OSDN Git Service

Update copyright dateas
[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, 2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
4    Contributed by Michael Tiemann (tiemann@cygnus.com)
5
6 This file is part of GCC.
7
8 GCC 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 GCC 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 GCC; 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 "coretypes.h"
29 #include "tm.h"
30 #include "tree.h"
31 #include "cp-tree.h"
32 #include "flags.h"
33 #include "rtl.h"
34 #include "output.h"
35 #include "toplev.h"
36 #include "target.h"
37 #include "convert.h"
38
39 /* The number of nested classes being processed.  If we are not in the
40    scope of any class, this is zero.  */
41
42 int current_class_depth;
43
44 /* In order to deal with nested classes, we keep a stack of classes.
45    The topmost entry is the innermost class, and is the entry at index
46    CURRENT_CLASS_DEPTH  */
47
48 typedef struct class_stack_node {
49   /* The name of the class.  */
50   tree name;
51
52   /* The _TYPE node for the class.  */
53   tree type;
54
55   /* The access specifier pending for new declarations in the scope of
56      this class.  */
57   tree access;
58
59   /* If were defining TYPE, the names used in this class.  */
60   splay_tree names_used;
61 }* class_stack_node_t;
62
63 typedef struct vtbl_init_data_s
64 {
65   /* The base for which we're building initializers.  */
66   tree binfo;
67   /* The type of the most-derived type.  */
68   tree derived;
69   /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
70      unless ctor_vtbl_p is true.  */
71   tree rtti_binfo;
72   /* The negative-index vtable initializers built up so far.  These
73      are in order from least negative index to most negative index.  */
74   tree inits;
75   /* The last (i.e., most negative) entry in INITS.  */
76   tree* last_init;
77   /* The binfo for the virtual base for which we're building
78      vcall offset initializers.  */
79   tree vbase;
80   /* The functions in vbase for which we have already provided vcall
81      offsets.  */
82   varray_type fns;
83   /* The vtable index of the next vcall or vbase offset.  */
84   tree index;
85   /* Nonzero if we are building the initializer for the primary
86      vtable.  */
87   int primary_vtbl_p;
88   /* Nonzero if we are building the initializer for a construction
89      vtable.  */
90   int ctor_vtbl_p;
91   /* True when adding vcall offset entries to the vtable.  False when
92      merely computing the indices.  */
93   bool generate_vcall_entries;
94 } vtbl_init_data;
95
96 /* The type of a function passed to walk_subobject_offsets.  */
97 typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
98
99 /* The stack itself.  This is a dynamically resized array.  The
100    number of elements allocated is CURRENT_CLASS_STACK_SIZE.  */
101 static int current_class_stack_size;
102 static class_stack_node_t current_class_stack;
103
104 /* An array of all local classes present in this translation unit, in
105    declaration order.  */
106 varray_type local_classes;
107
108 static tree get_vfield_name (tree);
109 static void finish_struct_anon (tree);
110 static tree get_vtable_name (tree);
111 static tree get_basefndecls (tree, tree);
112 static int build_primary_vtable (tree, tree);
113 static int build_secondary_vtable (tree);
114 static void finish_vtbls (tree);
115 static void modify_vtable_entry (tree, tree, tree, tree, tree *);
116 static void finish_struct_bits (tree);
117 static int alter_access (tree, tree, tree);
118 static void handle_using_decl (tree, tree);
119 static void check_for_override (tree, tree);
120 static tree dfs_modify_vtables (tree, void *);
121 static tree modify_all_vtables (tree, tree);
122 static void determine_primary_bases (tree);
123 static void finish_struct_methods (tree);
124 static void maybe_warn_about_overly_private_class (tree);
125 static int method_name_cmp (const void *, const void *);
126 static int resort_method_name_cmp (const void *, const void *);
127 static void add_implicitly_declared_members (tree, int, int, int);
128 static tree fixed_type_or_null (tree, int *, int *);
129 static tree resolve_address_of_overloaded_function (tree, tree, tsubst_flags_t,
130                                                     bool, tree);
131 static tree build_simple_base_path (tree expr, tree binfo);
132 static tree build_vtbl_ref_1 (tree, tree);
133 static tree build_vtbl_initializer (tree, tree, tree, tree, int *);
134 static int count_fields (tree);
135 static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
136 static void check_bitfield_decl (tree);
137 static void check_field_decl (tree, tree, int *, int *, int *, int *);
138 static void check_field_decls (tree, tree *, int *, int *, int *);
139 static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
140 static void build_base_fields (record_layout_info, splay_tree, tree *);
141 static void check_methods (tree);
142 static void remove_zero_width_bit_fields (tree);
143 static void check_bases (tree, int *, int *, int *);
144 static void check_bases_and_members (tree);
145 static tree create_vtable_ptr (tree, tree *);
146 static void include_empty_classes (record_layout_info);
147 static void layout_class_type (tree, tree *);
148 static void fixup_pending_inline (tree);
149 static void fixup_inline_methods (tree);
150 static void propagate_binfo_offsets (tree, tree);
151 static void layout_virtual_bases (record_layout_info, splay_tree);
152 static void build_vbase_offset_vtbl_entries (tree, vtbl_init_data *);
153 static void add_vcall_offset_vtbl_entries_r (tree, vtbl_init_data *);
154 static void add_vcall_offset_vtbl_entries_1 (tree, vtbl_init_data *);
155 static void build_vcall_offset_vtbl_entries (tree, vtbl_init_data *);
156 static void add_vcall_offset (tree, tree, vtbl_init_data *);
157 static void layout_vtable_decl (tree, int);
158 static tree dfs_find_final_overrider_pre (tree, void *);
159 static tree dfs_find_final_overrider_post (tree, void *);
160 static tree find_final_overrider (tree, tree, tree);
161 static int make_new_vtable (tree, tree);
162 static int maybe_indent_hierarchy (FILE *, int, int);
163 static tree dump_class_hierarchy_r (FILE *, int, tree, tree, int);
164 static void dump_class_hierarchy (tree);
165 static void dump_class_hierarchy_1 (FILE *, int, tree);
166 static void dump_array (FILE *, tree);
167 static void dump_vtable (tree, tree, tree);
168 static void dump_vtt (tree, tree);
169 static void dump_thunk (FILE *, int, tree);
170 static tree build_vtable (tree, tree, tree);
171 static void initialize_vtable (tree, tree);
172 static void layout_nonempty_base_or_field (record_layout_info,
173                                            tree, tree, splay_tree);
174 static tree end_of_class (tree, int);
175 static bool layout_empty_base (tree, tree, splay_tree);
176 static void accumulate_vtbl_inits (tree, tree, tree, tree, tree);
177 static tree dfs_accumulate_vtbl_inits (tree, tree, tree, tree,
178                                                tree);
179 static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
180 static void build_vcall_and_vbase_vtbl_entries (tree, vtbl_init_data *);
181 static void clone_constructors_and_destructors (tree);
182 static tree build_clone (tree, tree);
183 static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
184 static void build_ctor_vtbl_group (tree, tree);
185 static void build_vtt (tree);
186 static tree binfo_ctor_vtable (tree);
187 static tree *build_vtt_inits (tree, tree, tree *, tree *);
188 static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
189 static tree dfs_fixup_binfo_vtbls (tree, void *);
190 static int record_subobject_offset (tree, tree, splay_tree);
191 static int check_subobject_offset (tree, tree, splay_tree);
192 static int walk_subobject_offsets (tree, subobject_offset_fn,
193                                    tree, splay_tree, tree, int);
194 static void record_subobject_offsets (tree, tree, splay_tree, int);
195 static int layout_conflict_p (tree, tree, splay_tree, int);
196 static int splay_tree_compare_integer_csts (splay_tree_key k1,
197                                             splay_tree_key k2);
198 static void warn_about_ambiguous_bases (tree);
199 static bool type_requires_array_cookie (tree);
200 static bool contains_empty_class_p (tree);
201 static bool base_derived_from (tree, tree);
202 static int empty_base_at_nonzero_offset_p (tree, tree, splay_tree);
203 static tree end_of_base (tree);
204 static tree get_vcall_index (tree, tree);
205
206 /* Variables shared between class.c and call.c.  */
207
208 #ifdef GATHER_STATISTICS
209 int n_vtables = 0;
210 int n_vtable_entries = 0;
211 int n_vtable_searches = 0;
212 int n_vtable_elems = 0;
213 int n_convert_harshness = 0;
214 int n_compute_conversion_costs = 0;
215 int n_inner_fields_searched = 0;
216 #endif
217
218 /* Convert to or from a base subobject.  EXPR is an expression of type
219    `A' or `A*', an expression of type `B' or `B*' is returned.  To
220    convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
221    the B base instance within A.  To convert base A to derived B, CODE
222    is MINUS_EXPR and BINFO is the binfo for the A instance within B.
223    In this latter case, A must not be a morally virtual base of B.
224    NONNULL is true if EXPR is known to be non-NULL (this is only
225    needed when EXPR is of pointer type).  CV qualifiers are preserved
226    from EXPR.  */
227
228 tree
229 build_base_path (enum tree_code code,
230                  tree expr,
231                  tree binfo,
232                  int nonnull)
233 {
234   tree v_binfo = NULL_TREE;
235   tree d_binfo = NULL_TREE;
236   tree probe;
237   tree offset;
238   tree target_type;
239   tree null_test = NULL;
240   tree ptr_target_type;
241   int fixed_type_p;
242   int want_pointer = TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE;
243   bool has_empty = false;
244   bool virtual_access;
245
246   if (expr == error_mark_node || binfo == error_mark_node || !binfo)
247     return error_mark_node;
248
249   for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
250     {
251       d_binfo = probe;
252       if (is_empty_class (BINFO_TYPE (probe)))
253         has_empty = true;
254       if (!v_binfo && BINFO_VIRTUAL_P (probe))
255         v_binfo = probe;
256     }
257
258   probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
259   if (want_pointer)
260     probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
261
262   gcc_assert ((code == MINUS_EXPR
263                && SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), probe))
264               || (code == PLUS_EXPR
265                   && SAME_BINFO_TYPE_P (BINFO_TYPE (d_binfo), probe)));
266   
267   if (binfo == d_binfo)
268     /* Nothing to do.  */
269     return expr;
270
271   if (code == MINUS_EXPR && v_binfo)
272     {
273       error ("cannot convert from base %qT to derived type %qT via virtual base %qT",
274              BINFO_TYPE (binfo), BINFO_TYPE (d_binfo), BINFO_TYPE (v_binfo));
275       return error_mark_node;
276     }
277
278   if (!want_pointer)
279     /* This must happen before the call to save_expr.  */
280     expr = build_unary_op (ADDR_EXPR, expr, 0);
281
282   offset = BINFO_OFFSET (binfo);
283   fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
284
285   /* Do we need to look in the vtable for the real offset?  */
286   virtual_access = (v_binfo && fixed_type_p <= 0);
287
288   /* Do we need to check for a null pointer?  */
289   if (want_pointer && !nonnull && (virtual_access || !integer_zerop (offset)))
290     null_test = error_mark_node;
291
292   /* Protect against multiple evaluation if necessary.  */
293   if (TREE_SIDE_EFFECTS (expr) && (null_test || virtual_access))
294     expr = save_expr (expr);
295
296   /* Now that we've saved expr, build the real null test.  */
297   if (null_test)
298     {
299       tree zero = cp_convert (TREE_TYPE (expr), integer_zero_node);
300       null_test = fold (build2 (NE_EXPR, boolean_type_node,
301                                 expr, zero));
302     }
303
304   /* If this is a simple base reference, express it as a COMPONENT_REF.  */
305   if (code == PLUS_EXPR && !virtual_access
306       /* We don't build base fields for empty bases, and they aren't very
307          interesting to the optimizers anyway.  */
308       && !has_empty)
309     {
310       expr = build_indirect_ref (expr, NULL);
311       expr = build_simple_base_path (expr, binfo);
312       if (want_pointer)
313         expr = build_address (expr);
314       target_type = TREE_TYPE (expr);
315       goto out;
316     }
317
318   if (virtual_access)
319     {
320       /* Going via virtual base V_BINFO.  We need the static offset
321          from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
322          V_BINFO.  That offset is an entry in D_BINFO's vtable.  */
323       tree v_offset;
324
325       if (fixed_type_p < 0 && in_base_initializer)
326         {
327           /* In a base member initializer, we cannot rely on
328              the vtable being set up. We have to use the vtt_parm.  */
329           tree derived = BINFO_INHERITANCE_CHAIN (v_binfo);
330           tree t;
331
332           t = TREE_TYPE (TYPE_VFIELD (BINFO_TYPE (derived)));
333           t = build_pointer_type (t);
334           v_offset = convert (t, current_vtt_parm);
335           v_offset = build2 (PLUS_EXPR, t, v_offset,
336                              BINFO_VPTR_INDEX (derived));
337           v_offset = build_indirect_ref (v_offset, NULL);
338         }
339       else
340         v_offset = build_vfield_ref (build_indirect_ref (expr, NULL),
341                                      TREE_TYPE (TREE_TYPE (expr)));
342       
343       v_offset = build2 (PLUS_EXPR, TREE_TYPE (v_offset),
344                          v_offset,  BINFO_VPTR_FIELD (v_binfo));
345       v_offset = build1 (NOP_EXPR, 
346                          build_pointer_type (ptrdiff_type_node),
347                          v_offset);
348       v_offset = build_indirect_ref (v_offset, NULL);
349       TREE_CONSTANT (v_offset) = 1;
350       TREE_INVARIANT (v_offset) = 1;
351
352       offset = convert_to_integer (ptrdiff_type_node,
353                                    size_diffop (offset, 
354                                                 BINFO_OFFSET (v_binfo)));
355
356       if (!integer_zerop (offset))
357         v_offset = build2 (code, ptrdiff_type_node, v_offset, offset);
358
359       if (fixed_type_p < 0)
360         /* Negative fixed_type_p means this is a constructor or destructor;
361            virtual base layout is fixed in in-charge [cd]tors, but not in
362            base [cd]tors.  */
363         offset = build3 (COND_EXPR, ptrdiff_type_node,
364                          build2 (EQ_EXPR, boolean_type_node,
365                                  current_in_charge_parm, integer_zero_node),
366                          v_offset,
367                          BINFO_OFFSET (binfo));
368       else
369         offset = v_offset;
370     }
371
372   target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (d_binfo);
373   
374   target_type = cp_build_qualified_type
375     (target_type, cp_type_quals (TREE_TYPE (TREE_TYPE (expr))));
376   ptr_target_type = build_pointer_type (target_type);
377   if (want_pointer)
378     target_type = ptr_target_type;
379   
380   expr = build1 (NOP_EXPR, ptr_target_type, expr);
381
382   if (!integer_zerop (offset))
383     expr = build2 (code, ptr_target_type, expr, offset);
384   else
385     null_test = NULL;
386   
387   if (!want_pointer)
388     expr = build_indirect_ref (expr, NULL);
389
390  out:
391   if (null_test)
392     expr = fold (build3 (COND_EXPR, target_type, null_test, expr,
393                          fold (build1 (NOP_EXPR, target_type,
394                                        integer_zero_node))));
395
396   return expr;
397 }
398
399 /* Subroutine of build_base_path; EXPR and BINFO are as in that function.
400    Perform a derived-to-base conversion by recursively building up a
401    sequence of COMPONENT_REFs to the appropriate base fields.  */
402
403 static tree
404 build_simple_base_path (tree expr, tree binfo)
405 {
406   tree type = BINFO_TYPE (binfo);
407   tree d_binfo = BINFO_INHERITANCE_CHAIN (binfo);
408   tree field;
409
410   if (d_binfo == NULL_TREE)
411     {
412       gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (expr)) == type);
413       return expr;
414     }
415
416   /* Recurse.  */
417   expr = build_simple_base_path (expr, d_binfo);
418
419   for (field = TYPE_FIELDS (BINFO_TYPE (d_binfo));
420        field; field = TREE_CHAIN (field))
421     /* Is this the base field created by build_base_field?  */
422     if (TREE_CODE (field) == FIELD_DECL
423         && DECL_FIELD_IS_BASE (field)
424         && TREE_TYPE (field) == type)
425       return build_class_member_access_expr (expr, field,
426                                              NULL_TREE, false);
427
428   /* Didn't find the base field?!?  */
429   gcc_unreachable ();
430 }
431
432 /* Convert OBJECT to the base TYPE.  OBJECT is an expression whose
433    type is a class type or a pointer to a class type.  In the former
434    case, TYPE is also a class type; in the latter it is another
435    pointer type.  If CHECK_ACCESS is true, an error message is emitted
436    if TYPE is inaccessible.  If OBJECT has pointer type, the value is
437    assumed to be non-NULL.  */
438
439 tree
440 convert_to_base (tree object, tree type, bool check_access, bool nonnull)
441 {
442   tree binfo;
443   tree object_type;
444
445   if (TYPE_PTR_P (TREE_TYPE (object)))
446     {
447       object_type = TREE_TYPE (TREE_TYPE (object));
448       type = TREE_TYPE (type);
449     }
450   else
451     object_type = TREE_TYPE (object);
452
453   binfo = lookup_base (object_type, type,
454                        check_access ? ba_check : ba_unique, 
455                        NULL);
456   if (!binfo || binfo == error_mark_node)
457     return error_mark_node;
458
459   return build_base_path (PLUS_EXPR, object, binfo, nonnull);
460 }
461
462 /* EXPR is an expression with unqualified class type.  BASE is a base
463    binfo of that class type.  Returns EXPR, converted to the BASE
464    type.  This function assumes that EXPR is the most derived class;
465    therefore virtual bases can be found at their static offsets.  */
466
467 tree
468 convert_to_base_statically (tree expr, tree base)
469 {
470   tree expr_type;
471
472   expr_type = TREE_TYPE (expr);
473   if (!SAME_BINFO_TYPE_P (BINFO_TYPE (base), expr_type))
474     {
475       tree pointer_type;
476
477       pointer_type = build_pointer_type (expr_type);
478       expr = build_unary_op (ADDR_EXPR, expr, /*noconvert=*/1);
479       if (!integer_zerop (BINFO_OFFSET (base)))
480           expr = build2 (PLUS_EXPR, pointer_type, expr, 
481                          build_nop (pointer_type, BINFO_OFFSET (base)));
482       expr = build_nop (build_pointer_type (BINFO_TYPE (base)), expr);
483       expr = build1 (INDIRECT_REF, BINFO_TYPE (base), expr);
484     }
485
486   return expr;
487 }
488
489 \f
490 tree
491 build_vfield_ref (tree datum, tree type)
492 {
493   tree vfield, vcontext;
494
495   if (datum == error_mark_node)
496     return error_mark_node;
497
498   /* First, convert to the requested type.  */
499   if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
500     datum = convert_to_base (datum, type, /*check_access=*/false,
501                              /*nonnull=*/true);
502
503   /* Second, the requested type may not be the owner of its own vptr.
504      If not, convert to the base class that owns it.  We cannot use
505      convert_to_base here, because VCONTEXT may appear more than once
506      in the inheritance hierarchy of TYPE, and thus direct conversion
507      between the types may be ambiguous.  Following the path back up
508      one step at a time via primary bases avoids the problem.  */
509   vfield = TYPE_VFIELD (type);
510   vcontext = DECL_CONTEXT (vfield);
511   while (!same_type_ignoring_top_level_qualifiers_p (vcontext, type))
512     {
513       datum = build_simple_base_path (datum, CLASSTYPE_PRIMARY_BINFO (type));
514       type = TREE_TYPE (datum);
515     }
516
517   return build3 (COMPONENT_REF, TREE_TYPE (vfield), datum, vfield, NULL_TREE);
518 }
519
520 /* Given an object INSTANCE, return an expression which yields the
521    vtable element corresponding to INDEX.  There are many special
522    cases for INSTANCE which we take care of here, mainly to avoid
523    creating extra tree nodes when we don't have to.  */
524
525 static tree
526 build_vtbl_ref_1 (tree instance, tree idx)
527 {
528   tree aref;
529   tree vtbl = NULL_TREE;
530
531   /* Try to figure out what a reference refers to, and
532      access its virtual function table directly.  */
533
534   int cdtorp = 0;
535   tree fixed_type = fixed_type_or_null (instance, NULL, &cdtorp);
536
537   tree basetype = non_reference (TREE_TYPE (instance));
538
539   if (fixed_type && !cdtorp)
540     {
541       tree binfo = lookup_base (fixed_type, basetype,
542                                 ba_unique | ba_quiet, NULL);
543       if (binfo)
544         vtbl = unshare_expr (BINFO_VTABLE (binfo));
545     }
546
547   if (!vtbl)
548     vtbl = build_vfield_ref (instance, basetype);
549   
550   assemble_external (vtbl);
551
552   aref = build_array_ref (vtbl, idx);
553   TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
554   TREE_INVARIANT (aref) = TREE_CONSTANT (aref);
555
556   return aref;
557 }
558
559 tree
560 build_vtbl_ref (tree instance, tree idx)
561 {
562   tree aref = build_vtbl_ref_1 (instance, idx);
563
564   return aref;
565 }
566
567 /* Given a stable object pointer INSTANCE_PTR, return an expression which
568    yields a function pointer corresponding to vtable element INDEX.  */
569
570 tree
571 build_vfn_ref (tree instance_ptr, tree idx)
572 {
573   tree aref;
574
575   aref = build_vtbl_ref_1 (build_indirect_ref (instance_ptr, 0), idx);
576
577   /* When using function descriptors, the address of the
578      vtable entry is treated as a function pointer.  */
579   if (TARGET_VTABLE_USES_DESCRIPTORS)
580     aref = build1 (NOP_EXPR, TREE_TYPE (aref),
581                    build_unary_op (ADDR_EXPR, aref, /*noconvert=*/1));
582
583   /* Remember this as a method reference, for later devirtualization.  */
584   aref = build3 (OBJ_TYPE_REF, TREE_TYPE (aref), aref, instance_ptr, idx);
585
586   return aref;
587 }
588
589 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
590    for the given TYPE.  */
591
592 static tree
593 get_vtable_name (tree type)
594 {
595   return mangle_vtbl_for_type (type);
596 }
597
598 /* Return an IDENTIFIER_NODE for the name of the virtual table table
599    for TYPE.  */
600
601 tree
602 get_vtt_name (tree type)
603 {
604   return mangle_vtt_for_type (type);
605 }
606
607 /* DECL is an entity associated with TYPE, like a virtual table or an
608    implicitly generated constructor.  Determine whether or not DECL
609    should have external or internal linkage at the object file
610    level.  This routine does not deal with COMDAT linkage and other
611    similar complexities; it simply sets TREE_PUBLIC if it possible for
612    entities in other translation units to contain copies of DECL, in
613    the abstract.  */
614
615 void
616 set_linkage_according_to_type (tree type, tree decl)
617 {
618   /* If TYPE involves a local class in a function with internal
619      linkage, then DECL should have internal linkage too.  Other local
620      classes have no linkage -- but if their containing functions
621      have external linkage, it makes sense for DECL to have external
622      linkage too.  That will allow template definitions to be merged,
623      for example.  */
624   if (no_linkage_check (type, /*relaxed_p=*/true))
625     {
626       TREE_PUBLIC (decl) = 0;
627       DECL_INTERFACE_KNOWN (decl) = 1;
628     }
629   else
630     TREE_PUBLIC (decl) = 1;
631 }
632
633 /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
634    (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
635    Use NAME for the name of the vtable, and VTABLE_TYPE for its type.  */
636
637 static tree
638 build_vtable (tree class_type, tree name, tree vtable_type)
639 {
640   tree decl;
641
642   decl = build_lang_decl (VAR_DECL, name, vtable_type);
643   /* vtable names are already mangled; give them their DECL_ASSEMBLER_NAME
644      now to avoid confusion in mangle_decl.  */
645   SET_DECL_ASSEMBLER_NAME (decl, name);
646   DECL_CONTEXT (decl) = class_type;
647   DECL_ARTIFICIAL (decl) = 1;
648   TREE_STATIC (decl) = 1;
649   TREE_READONLY (decl) = 1;
650   DECL_VIRTUAL_P (decl) = 1;
651   DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
652   DECL_VTABLE_OR_VTT_P (decl) = 1;
653   /* At one time the vtable info was grabbed 2 words at a time.  This
654      fails on sparc unless you have 8-byte alignment.  (tiemann) */
655   DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
656                            DECL_ALIGN (decl));
657   set_linkage_according_to_type (class_type, decl);
658   /* The vtable has not been defined -- yet.  */
659   DECL_EXTERNAL (decl) = 1;
660   DECL_NOT_REALLY_EXTERN (decl) = 1;
661
662   /* Mark the VAR_DECL node representing the vtable itself as a
663      "gratuitous" one, thereby forcing dwarfout.c to ignore it.  It
664      is rather important that such things be ignored because any
665      effort to actually generate DWARF for them will run into
666      trouble when/if we encounter code like:
667        
668      #pragma interface
669      struct S { virtual void member (); };
670            
671      because the artificial declaration of the vtable itself (as
672      manufactured by the g++ front end) will say that the vtable is
673      a static member of `S' but only *after* the debug output for
674      the definition of `S' has already been output.  This causes
675      grief because the DWARF entry for the definition of the vtable
676      will try to refer back to an earlier *declaration* of the
677      vtable as a static member of `S' and there won't be one.  We
678      might be able to arrange to have the "vtable static member"
679      attached to the member list for `S' before the debug info for
680      `S' get written (which would solve the problem) but that would
681      require more intrusive changes to the g++ front end.  */
682   DECL_IGNORED_P (decl) = 1;
683
684   return decl;
685 }
686
687 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
688    or even complete.  If this does not exist, create it.  If COMPLETE is
689    nonzero, then complete the definition of it -- that will render it
690    impossible to actually build the vtable, but is useful to get at those
691    which are known to exist in the runtime.  */
692
693 tree 
694 get_vtable_decl (tree type, int complete)
695 {
696   tree decl;
697
698   if (CLASSTYPE_VTABLES (type))
699     return CLASSTYPE_VTABLES (type);
700   
701   decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
702   CLASSTYPE_VTABLES (type) = decl;
703
704   if (complete)
705     {
706       DECL_EXTERNAL (decl) = 1;
707       cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
708     }
709
710   return decl;
711 }
712
713 /* Build the primary virtual function table for TYPE.  If BINFO is
714    non-NULL, build the vtable starting with the initial approximation
715    that it is the same as the one which is the head of the association
716    list.  Returns a nonzero value if a new vtable is actually
717    created.  */
718
719 static int
720 build_primary_vtable (tree binfo, tree type)
721 {
722   tree decl;
723   tree virtuals;
724
725   decl = get_vtable_decl (type, /*complete=*/0);
726   
727   if (binfo)
728     {
729       if (BINFO_NEW_VTABLE_MARKED (binfo))
730         /* We have already created a vtable for this base, so there's
731            no need to do it again.  */
732         return 0;
733       
734       virtuals = copy_list (BINFO_VIRTUALS (binfo));
735       TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
736       DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
737       DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
738     }
739   else
740     {
741       gcc_assert (TREE_TYPE (decl) == vtbl_type_node);
742       virtuals = NULL_TREE;
743     }
744
745 #ifdef GATHER_STATISTICS
746   n_vtables += 1;
747   n_vtable_elems += list_length (virtuals);
748 #endif
749
750   /* Initialize the association list for this type, based
751      on our first approximation.  */
752   BINFO_VTABLE (TYPE_BINFO (type)) = decl;
753   BINFO_VIRTUALS (TYPE_BINFO (type)) = virtuals;
754   SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type));
755   return 1;
756 }
757
758 /* Give BINFO a new virtual function table which is initialized
759    with a skeleton-copy of its original initialization.  The only
760    entry that changes is the `delta' entry, so we can really
761    share a lot of structure.
762
763    FOR_TYPE is the most derived type which caused this table to
764    be needed.
765
766    Returns nonzero if we haven't met BINFO before.
767
768    The order in which vtables are built (by calling this function) for
769    an object must remain the same, otherwise a binary incompatibility
770    can result.  */
771
772 static int
773 build_secondary_vtable (tree binfo)
774 {
775   if (BINFO_NEW_VTABLE_MARKED (binfo))
776     /* We already created a vtable for this base.  There's no need to
777        do it again.  */
778     return 0;
779
780   /* Remember that we've created a vtable for this BINFO, so that we
781      don't try to do so again.  */
782   SET_BINFO_NEW_VTABLE_MARKED (binfo);
783   
784   /* Make fresh virtual list, so we can smash it later.  */
785   BINFO_VIRTUALS (binfo) = copy_list (BINFO_VIRTUALS (binfo));
786
787   /* Secondary vtables are laid out as part of the same structure as
788      the primary vtable.  */
789   BINFO_VTABLE (binfo) = NULL_TREE;
790   return 1;
791 }
792
793 /* Create a new vtable for BINFO which is the hierarchy dominated by
794    T. Return nonzero if we actually created a new vtable.  */
795
796 static int
797 make_new_vtable (tree t, tree binfo)
798 {
799   if (binfo == TYPE_BINFO (t))
800     /* In this case, it is *type*'s vtable we are modifying.  We start
801        with the approximation that its vtable is that of the
802        immediate base class.  */
803     return build_primary_vtable (binfo, t);
804   else
805     /* This is our very own copy of `basetype' to play with.  Later,
806        we will fill in all the virtual functions that override the
807        virtual functions in these base classes which are not defined
808        by the current type.  */
809     return build_secondary_vtable (binfo);
810 }
811
812 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
813    (which is in the hierarchy dominated by T) list FNDECL as its
814    BV_FN.  DELTA is the required constant adjustment from the `this'
815    pointer where the vtable entry appears to the `this' required when
816    the function is actually called.  */
817
818 static void
819 modify_vtable_entry (tree t,
820                      tree binfo, 
821                      tree fndecl, 
822                      tree delta, 
823                      tree *virtuals)
824 {
825   tree v;
826
827   v = *virtuals;
828
829   if (fndecl != BV_FN (v)
830       || !tree_int_cst_equal (delta, BV_DELTA (v)))
831     {
832       /* We need a new vtable for BINFO.  */
833       if (make_new_vtable (t, binfo))
834         {
835           /* If we really did make a new vtable, we also made a copy
836              of the BINFO_VIRTUALS list.  Now, we have to find the
837              corresponding entry in that list.  */
838           *virtuals = BINFO_VIRTUALS (binfo);
839           while (BV_FN (*virtuals) != BV_FN (v))
840             *virtuals = TREE_CHAIN (*virtuals);
841           v = *virtuals;
842         }
843
844       BV_DELTA (v) = delta;
845       BV_VCALL_INDEX (v) = NULL_TREE;
846       BV_FN (v) = fndecl;
847     }
848 }
849
850 \f
851 /* Add method METHOD to class TYPE.  */
852
853 void
854 add_method (tree type, tree method)
855 {
856   int using;
857   unsigned slot;
858   tree overload;
859   bool template_conv_p = false;
860   bool conv_p;
861   VEC(tree) *method_vec;
862   bool complete_p;
863   bool insert_p = false;
864   tree current_fns;
865
866   if (method == error_mark_node)
867     return;
868
869   complete_p = COMPLETE_TYPE_P (type);
870   using = (DECL_CONTEXT (method) != type);
871   conv_p = DECL_CONV_FN_P (method);
872   if (conv_p)
873     template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL
874                        && DECL_TEMPLATE_CONV_FN_P (method));
875
876   method_vec = CLASSTYPE_METHOD_VEC (type);
877   if (!method_vec)
878     {
879       /* Make a new method vector.  We start with 8 entries.  We must
880          allocate at least two (for constructors and destructors), and
881          we're going to end up with an assignment operator at some
882          point as well.  */
883       method_vec = VEC_alloc (tree, 8);
884       /* Create slots for constructors and destructors.  */
885       VEC_quick_push (tree, method_vec, NULL_TREE);
886       VEC_quick_push (tree, method_vec, NULL_TREE);
887       CLASSTYPE_METHOD_VEC (type) = method_vec;
888     }
889
890   /* Constructors and destructors go in special slots.  */
891   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
892     slot = CLASSTYPE_CONSTRUCTOR_SLOT;
893   else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
894     {
895       slot = CLASSTYPE_DESTRUCTOR_SLOT;
896       TYPE_HAS_DESTRUCTOR (type) = 1;
897       
898       if (TYPE_FOR_JAVA (type))
899         error (DECL_ARTIFICIAL (method)
900                ? "Java class %qT cannot have an implicit non-trivial destructor"
901                : "Java class %qT cannot have a destructor",
902                DECL_CONTEXT (method));
903     }
904   else
905     {
906       tree m;
907
908       insert_p = true;
909       /* See if we already have an entry with this name.  */
910       for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT; 
911            VEC_iterate (tree, method_vec, slot, m);
912            ++slot)
913         {
914           m = OVL_CURRENT (m);
915           if (template_conv_p)
916             {
917               if (TREE_CODE (m) == TEMPLATE_DECL
918                   && DECL_TEMPLATE_CONV_FN_P (m))
919                 insert_p = false;
920               break;
921             }
922           if (conv_p && !DECL_CONV_FN_P (m))
923             break;
924           if (DECL_NAME (m) == DECL_NAME (method))
925             {
926               insert_p = false;
927               break;
928             }
929           if (complete_p
930               && !DECL_CONV_FN_P (m)
931               && DECL_NAME (m) > DECL_NAME (method))
932             break;
933         }
934     }
935   current_fns = insert_p ? NULL_TREE : VEC_index (tree, method_vec, slot);
936   
937   if (processing_template_decl)
938     /* TYPE is a template class.  Don't issue any errors now; wait
939        until instantiation time to complain.  */
940     ;
941   else
942     {
943       tree fns;
944
945       /* Check to see if we've already got this method.  */
946       for (fns = current_fns; fns; fns = OVL_NEXT (fns))
947         {
948           tree fn = OVL_CURRENT (fns);
949           tree parms1;
950           tree parms2;
951           bool same = 1;
952
953           if (TREE_CODE (fn) != TREE_CODE (method))
954             continue;
955
956           /* [over.load] Member function declarations with the
957              same name and the same parameter types cannot be
958              overloaded if any of them is a static member
959              function declaration.
960
961              [namespace.udecl] When a using-declaration brings names
962              from a base class into a derived class scope, member
963              functions in the derived class override and/or hide member
964              functions with the same name and parameter types in a base
965              class (rather than conflicting).  */
966           parms1 = TYPE_ARG_TYPES (TREE_TYPE (fn));
967           parms2 = TYPE_ARG_TYPES (TREE_TYPE (method));
968
969           /* Compare the quals on the 'this' parm.  Don't compare
970              the whole types, as used functions are treated as
971              coming from the using class in overload resolution.  */
972           if (! DECL_STATIC_FUNCTION_P (fn)
973               && ! DECL_STATIC_FUNCTION_P (method)
974               && (TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms1)))
975                   != TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms2)))))
976             same = 0;
977           
978           /* For templates, the template parms must be identical.  */
979           if (TREE_CODE (fn) == TEMPLATE_DECL
980               && !comp_template_parms (DECL_TEMPLATE_PARMS (fn),
981                                        DECL_TEMPLATE_PARMS (method)))
982             same = 0;
983           
984           if (! DECL_STATIC_FUNCTION_P (fn))
985             parms1 = TREE_CHAIN (parms1);
986           if (! DECL_STATIC_FUNCTION_P (method))
987             parms2 = TREE_CHAIN (parms2);
988
989           if (same && compparms (parms1, parms2) 
990               && (!DECL_CONV_FN_P (fn) 
991                   || same_type_p (TREE_TYPE (TREE_TYPE (fn)),
992                                   TREE_TYPE (TREE_TYPE (method)))))
993             {
994               if (using && DECL_CONTEXT (fn) == type)
995                 /* Defer to the local function.  */
996                 return;
997               else
998                 {
999                   cp_error_at ("%q#D and %q#D cannot be overloaded",
1000                                method, fn);
1001
1002                   /* We don't call duplicate_decls here to merge
1003                      the declarations because that will confuse
1004                      things if the methods have inline
1005                      definitions.  In particular, we will crash
1006                      while processing the definitions.  */
1007                   return;
1008                 }
1009             }
1010         }
1011     }
1012
1013   /* Add the new binding.  */ 
1014   overload = build_overload (method, current_fns);
1015   
1016   if (!conv_p && slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
1017     push_class_level_binding (DECL_NAME (method), overload);
1018
1019   if (insert_p)
1020     {
1021       /* We only expect to add few methods in the COMPLETE_P case, so
1022          just make room for one more method in that case.  */
1023       if (VEC_reserve (tree, method_vec, complete_p ? 1 : -1))
1024         CLASSTYPE_METHOD_VEC (type) = method_vec;
1025       if (slot == VEC_length (tree, method_vec))
1026         VEC_quick_push (tree, method_vec, overload);
1027       else
1028         VEC_quick_insert (tree, method_vec, slot, overload);
1029     }
1030   else
1031     /* Replace the current slot.  */
1032     VEC_replace (tree, method_vec, slot, overload);
1033 }
1034
1035 /* Subroutines of finish_struct.  */
1036
1037 /* Change the access of FDECL to ACCESS in T.  Return 1 if change was
1038    legit, otherwise return 0.  */
1039
1040 static int
1041 alter_access (tree t, tree fdecl, tree access)
1042 {
1043   tree elem;
1044
1045   if (!DECL_LANG_SPECIFIC (fdecl))
1046     retrofit_lang_decl (fdecl);
1047
1048   gcc_assert (!DECL_DISCRIMINATOR_P (fdecl));
1049
1050   elem = purpose_member (t, DECL_ACCESS (fdecl));
1051   if (elem)
1052     {
1053       if (TREE_VALUE (elem) != access)
1054         {
1055           if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
1056             cp_error_at ("conflicting access specifications for method"
1057                          " %qD, ignored", TREE_TYPE (fdecl));
1058           else
1059             error ("conflicting access specifications for field %qE, ignored",
1060                    DECL_NAME (fdecl));
1061         }
1062       else
1063         {
1064           /* They're changing the access to the same thing they changed
1065              it to before.  That's OK.  */
1066           ;
1067         }
1068     }
1069   else
1070     {
1071       perform_or_defer_access_check (TYPE_BINFO (t), fdecl);
1072       DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
1073       return 1;
1074     }
1075   return 0;
1076 }
1077
1078 /* Process the USING_DECL, which is a member of T.  */
1079
1080 static void
1081 handle_using_decl (tree using_decl, tree t)
1082 {
1083   tree ctype = DECL_INITIAL (using_decl);
1084   tree name = DECL_NAME (using_decl);
1085   tree access
1086     = TREE_PRIVATE (using_decl) ? access_private_node
1087     : TREE_PROTECTED (using_decl) ? access_protected_node
1088     : access_public_node;
1089   tree fdecl, binfo;
1090   tree flist = NULL_TREE;
1091   tree old_value;
1092
1093   if (ctype == error_mark_node)
1094     return;
1095
1096   binfo = lookup_base (t, ctype, ba_any, NULL);
1097   if (! binfo)
1098     {
1099       location_t saved_loc = input_location;
1100
1101       input_location = DECL_SOURCE_LOCATION (using_decl);
1102       error_not_base_type (ctype, t);
1103       input_location = saved_loc;
1104       return;
1105     }
1106   
1107   if (constructor_name_p (name, ctype))
1108     {
1109       cp_error_at ("%qD names constructor", using_decl);
1110       return;
1111     }
1112   if (constructor_name_p (name, t))
1113     {
1114       cp_error_at ("%qD invalid in %qT", using_decl, t);
1115       return;
1116     }
1117
1118   fdecl = lookup_member (binfo, name, 0, false);
1119   
1120   if (!fdecl)
1121     {
1122       cp_error_at ("no members matching %qD in %q#T", using_decl, ctype);
1123       return;
1124     }
1125
1126   if (BASELINK_P (fdecl))
1127     /* Ignore base type this came from.  */
1128     fdecl = BASELINK_FUNCTIONS (fdecl);
1129
1130   old_value = lookup_member (t, name, /*protect=*/0, /*want_type=*/false);
1131   if (old_value)
1132     {
1133       if (is_overloaded_fn (old_value))
1134         old_value = OVL_CURRENT (old_value);
1135
1136       if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1137         /* OK */;
1138       else
1139         old_value = NULL_TREE;
1140     }
1141
1142   if (is_overloaded_fn (fdecl))
1143     flist = fdecl;
1144
1145   if (! old_value)
1146     ;
1147   else if (is_overloaded_fn (old_value))
1148     {
1149       if (flist)
1150         /* It's OK to use functions from a base when there are functions with
1151            the same name already present in the current class.  */;
1152       else
1153         {
1154           cp_error_at ("%qD invalid in %q#T", using_decl, t);
1155           cp_error_at ("  because of local method %q#D with same name",
1156                        OVL_CURRENT (old_value));
1157           return;
1158         }
1159     }
1160   else if (!DECL_ARTIFICIAL (old_value))
1161     {
1162       cp_error_at ("%qD invalid in %q#T", using_decl, t);
1163       cp_error_at ("  because of local member %q#D with same name", old_value);
1164       return;
1165     }
1166   
1167   /* Make type T see field decl FDECL with access ACCESS.  */
1168   if (flist)
1169     for (; flist; flist = OVL_NEXT (flist))
1170       {
1171         add_method (t, OVL_CURRENT (flist));
1172         alter_access (t, OVL_CURRENT (flist), access);
1173       }
1174   else
1175     alter_access (t, fdecl, access);
1176 }
1177 \f
1178 /* Run through the base classes of T, updating
1179    CANT_HAVE_DEFAULT_CTOR_P, CANT_HAVE_CONST_CTOR_P, and
1180    NO_CONST_ASN_REF_P.  Also set flag bits in T based on properties of
1181    the bases.  */
1182
1183 static void
1184 check_bases (tree t,
1185              int* cant_have_default_ctor_p,
1186              int* cant_have_const_ctor_p,
1187              int* no_const_asn_ref_p)
1188 {
1189   int i;
1190   int seen_non_virtual_nearly_empty_base_p;
1191   tree base_binfo;
1192   tree binfo;
1193
1194   seen_non_virtual_nearly_empty_base_p = 0;
1195
1196   for (binfo = TYPE_BINFO (t), i = 0;
1197        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
1198     {
1199       tree basetype = TREE_TYPE (base_binfo);
1200
1201       gcc_assert (COMPLETE_TYPE_P (basetype));
1202       
1203       /* Effective C++ rule 14.  We only need to check TYPE_POLYMORPHIC_P
1204          here because the case of virtual functions but non-virtual
1205          dtor is handled in finish_struct_1.  */
1206       if (warn_ecpp && ! TYPE_POLYMORPHIC_P (basetype)
1207           && TYPE_HAS_DESTRUCTOR (basetype))
1208         warning ("base class %q#T has a non-virtual destructor", basetype);
1209
1210       /* If the base class doesn't have copy constructors or
1211          assignment operators that take const references, then the
1212          derived class cannot have such a member automatically
1213          generated.  */
1214       if (! TYPE_HAS_CONST_INIT_REF (basetype))
1215         *cant_have_const_ctor_p = 1;
1216       if (TYPE_HAS_ASSIGN_REF (basetype)
1217           && !TYPE_HAS_CONST_ASSIGN_REF (basetype))
1218         *no_const_asn_ref_p = 1;
1219       /* Similarly, if the base class doesn't have a default
1220          constructor, then the derived class won't have an
1221          automatically generated default constructor.  */
1222       if (TYPE_HAS_CONSTRUCTOR (basetype)
1223           && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype))
1224         {
1225           *cant_have_default_ctor_p = 1;
1226           if (! TYPE_HAS_CONSTRUCTOR (t))
1227             pedwarn ("base %qT with only non-default constructor in class "
1228                      "without a constructor",
1229                      basetype);
1230         }
1231
1232       if (BINFO_VIRTUAL_P (base_binfo))
1233         /* A virtual base does not effect nearly emptiness.  */
1234         ;
1235       else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1236         {
1237           if (seen_non_virtual_nearly_empty_base_p)
1238             /* And if there is more than one nearly empty base, then the
1239                derived class is not nearly empty either.  */
1240             CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1241           else
1242             /* Remember we've seen one.  */
1243             seen_non_virtual_nearly_empty_base_p = 1;
1244         }
1245       else if (!is_empty_class (basetype))
1246         /* If the base class is not empty or nearly empty, then this
1247            class cannot be nearly empty.  */
1248         CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1249
1250       /* A lot of properties from the bases also apply to the derived
1251          class.  */
1252       TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1253       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) 
1254         |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1255       TYPE_HAS_COMPLEX_ASSIGN_REF (t) 
1256         |= TYPE_HAS_COMPLEX_ASSIGN_REF (basetype);
1257       TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (basetype);
1258       TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1259       CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) 
1260         |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
1261     }
1262 }
1263
1264 /* Determine all the primary bases within T.  Sets BINFO_PRIMARY_BASE_P for
1265    those that are primaries.  Sets BINFO_LOST_PRIMARY_P for those
1266    that have had a nearly-empty virtual primary base stolen by some
1267    other base in the hierarchy.  Determines CLASSTYPE_PRIMARY_BASE for
1268    T.  */
1269
1270 static void
1271 determine_primary_bases (tree t)
1272 {
1273   unsigned i;
1274   tree primary = NULL_TREE;
1275   tree type_binfo = TYPE_BINFO (t);
1276   tree base_binfo;
1277
1278   /* Determine the primary bases of our bases.  */
1279   for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1280        base_binfo = TREE_CHAIN (base_binfo))
1281     {
1282       tree primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (base_binfo));
1283
1284       /* See if we're the non-virtual primary of our inheritance
1285          chain.  */
1286       if (!BINFO_VIRTUAL_P (base_binfo))
1287         {
1288           tree parent = BINFO_INHERITANCE_CHAIN (base_binfo);
1289           tree parent_primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (parent));
1290           
1291           if (parent_primary
1292               && SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo),
1293                                     BINFO_TYPE (parent_primary)))
1294             /* We are the primary binfo.  */
1295             BINFO_PRIMARY_P (base_binfo) = 1;
1296         }
1297       /* Determine if we have a virtual primary base, and mark it so.
1298        */
1299       if (primary && BINFO_VIRTUAL_P (primary))
1300         {
1301           tree this_primary = copied_binfo (primary, base_binfo);
1302
1303           if (BINFO_PRIMARY_P (this_primary))
1304             /* Someone already claimed this base.  */
1305             BINFO_LOST_PRIMARY_P (base_binfo) = 1;
1306           else
1307             {
1308               tree delta;
1309               
1310               BINFO_PRIMARY_P (this_primary) = 1;
1311               BINFO_INHERITANCE_CHAIN (this_primary) = base_binfo;
1312               
1313               /* A virtual binfo might have been copied from within
1314                  another hierarchy. As we're about to use it as a
1315                  primary base, make sure the offsets match.  */
1316               delta = size_diffop (convert (ssizetype,
1317                                             BINFO_OFFSET (base_binfo)),
1318                                    convert (ssizetype,
1319                                             BINFO_OFFSET (this_primary)));
1320           
1321               propagate_binfo_offsets (this_primary, delta);
1322             }
1323         }
1324     }
1325
1326   /* First look for a dynamic direct non-virtual base.  */
1327   for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, base_binfo); i++)
1328     {
1329       tree basetype = BINFO_TYPE (base_binfo);
1330
1331       if (TYPE_CONTAINS_VPTR_P (basetype) && !BINFO_VIRTUAL_P (base_binfo))
1332         {
1333           primary = base_binfo;
1334           goto found;
1335         }
1336     }
1337
1338   /* A "nearly-empty" virtual base class can be the primary base
1339      class, if no non-virtual polymorphic base can be found.  Look for
1340      a nearly-empty virtual dynamic base that is not already a primary
1341      base of something in the hierarchy.  If there is no such base,
1342      just pick the first nearly-empty virtual base.  */
1343
1344   for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1345        base_binfo = TREE_CHAIN (base_binfo))
1346     if (BINFO_VIRTUAL_P (base_binfo)
1347         && CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (base_binfo)))
1348       {
1349         if (!BINFO_PRIMARY_P (base_binfo))
1350           {
1351             /* Found one that is not primary.  */
1352             primary = base_binfo;
1353             goto found;
1354           }
1355         else if (!primary)
1356           /* Remember the first candidate.  */
1357           primary = base_binfo;
1358       }
1359   
1360  found:
1361   /* If we've got a primary base, use it.  */
1362   if (primary)
1363     {
1364       tree basetype = BINFO_TYPE (primary);
1365       
1366       CLASSTYPE_PRIMARY_BINFO (t) = primary;
1367       if (BINFO_PRIMARY_P (primary))
1368         /* We are stealing a primary base.  */
1369         BINFO_LOST_PRIMARY_P (BINFO_INHERITANCE_CHAIN (primary)) = 1;
1370       BINFO_PRIMARY_P (primary) = 1;
1371       if (BINFO_VIRTUAL_P (primary))
1372         {
1373           tree delta;
1374
1375           BINFO_INHERITANCE_CHAIN (primary) = type_binfo;
1376           /* A virtual binfo might have been copied from within
1377              another hierarchy. As we're about to use it as a primary
1378              base, make sure the offsets match.  */
1379           delta = size_diffop (ssize_int (0),
1380                                convert (ssizetype, BINFO_OFFSET (primary)));
1381           
1382           propagate_binfo_offsets (primary, delta);
1383         }
1384       
1385       primary = TYPE_BINFO (basetype);
1386       
1387       TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1388       BINFO_VTABLE (type_binfo) = BINFO_VTABLE (primary);
1389       BINFO_VIRTUALS (type_binfo) = BINFO_VIRTUALS (primary);
1390     }
1391 }
1392 \f
1393 /* Set memoizing fields and bits of T (and its variants) for later
1394    use.  */
1395
1396 static void
1397 finish_struct_bits (tree t)
1398 {
1399   tree variants;
1400   
1401   /* Fix up variants (if any).  */
1402   for (variants = TYPE_NEXT_VARIANT (t);
1403        variants;
1404        variants = TYPE_NEXT_VARIANT (variants))
1405     {
1406       /* These fields are in the _TYPE part of the node, not in
1407          the TYPE_LANG_SPECIFIC component, so they are not shared.  */
1408       TYPE_HAS_CONSTRUCTOR (variants) = TYPE_HAS_CONSTRUCTOR (t);
1409       TYPE_HAS_DESTRUCTOR (variants) = TYPE_HAS_DESTRUCTOR (t);
1410       TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
1411       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants) 
1412         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
1413
1414       TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
1415       
1416       TYPE_BINFO (variants) = TYPE_BINFO (t);
1417
1418       /* Copy whatever these are holding today.  */
1419       TYPE_VFIELD (variants) = TYPE_VFIELD (t);
1420       TYPE_METHODS (variants) = TYPE_METHODS (t);
1421       TYPE_FIELDS (variants) = TYPE_FIELDS (t);
1422       TYPE_SIZE (variants) = TYPE_SIZE (t);
1423       TYPE_SIZE_UNIT (variants) = TYPE_SIZE_UNIT (t);
1424     }
1425
1426   if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t))
1427     /* For a class w/o baseclasses, 'finish_struct' has set
1428        CLASSTYPE_PURE_VIRTUALS correctly (by definition).
1429        Similarly for a class whose base classes do not have vtables.
1430        When neither of these is true, we might have removed abstract
1431        virtuals (by providing a definition), added some (by declaring
1432        new ones), or redeclared ones from a base class.  We need to
1433        recalculate what's really an abstract virtual at this point (by
1434        looking in the vtables).  */
1435     get_pure_virtuals (t);
1436   
1437   /* If this type has a copy constructor or a destructor, force its
1438      mode to be BLKmode, and force its TREE_ADDRESSABLE bit to be
1439      nonzero.  This will cause it to be passed by invisible reference
1440      and prevent it from being returned in a register.  */
1441   if (! TYPE_HAS_TRIVIAL_INIT_REF (t) || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
1442     {
1443       tree variants;
1444       DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
1445       for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
1446         {
1447           TYPE_MODE (variants) = BLKmode;
1448           TREE_ADDRESSABLE (variants) = 1;
1449         }
1450     }
1451 }
1452
1453 /* Issue warnings about T having private constructors, but no friends,
1454    and so forth.  
1455
1456    HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
1457    static members.  HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
1458    non-private static member functions.  */
1459
1460 static void
1461 maybe_warn_about_overly_private_class (tree t)
1462 {
1463   int has_member_fn = 0;
1464   int has_nonprivate_method = 0;
1465   tree fn;
1466
1467   if (!warn_ctor_dtor_privacy
1468       /* If the class has friends, those entities might create and
1469          access instances, so we should not warn.  */
1470       || (CLASSTYPE_FRIEND_CLASSES (t)
1471           || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
1472       /* We will have warned when the template was declared; there's
1473          no need to warn on every instantiation.  */
1474       || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
1475     /* There's no reason to even consider warning about this 
1476        class.  */
1477     return;
1478     
1479   /* We only issue one warning, if more than one applies, because
1480      otherwise, on code like:
1481
1482      class A {
1483        // Oops - forgot `public:'
1484        A();
1485        A(const A&);
1486        ~A();
1487      };
1488
1489      we warn several times about essentially the same problem.  */
1490
1491   /* Check to see if all (non-constructor, non-destructor) member
1492      functions are private.  (Since there are no friends or
1493      non-private statics, we can't ever call any of the private member
1494      functions.)  */
1495   for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
1496     /* We're not interested in compiler-generated methods; they don't
1497        provide any way to call private members.  */
1498     if (!DECL_ARTIFICIAL (fn)) 
1499       {
1500         if (!TREE_PRIVATE (fn))
1501           {
1502             if (DECL_STATIC_FUNCTION_P (fn)) 
1503               /* A non-private static member function is just like a
1504                  friend; it can create and invoke private member
1505                  functions, and be accessed without a class
1506                  instance.  */
1507               return;
1508                 
1509             has_nonprivate_method = 1;
1510             /* Keep searching for a static member function.  */
1511           }
1512         else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
1513           has_member_fn = 1;
1514       } 
1515
1516   if (!has_nonprivate_method && has_member_fn) 
1517     {
1518       /* There are no non-private methods, and there's at least one
1519          private member function that isn't a constructor or
1520          destructor.  (If all the private members are
1521          constructors/destructors we want to use the code below that
1522          issues error messages specifically referring to
1523          constructors/destructors.)  */
1524       unsigned i;
1525       tree binfo = TYPE_BINFO (t);
1526       
1527       for (i = 0; i != BINFO_N_BASE_BINFOS (binfo); i++)
1528         if (BINFO_BASE_ACCESS (binfo, i) != access_private_node)
1529           {
1530             has_nonprivate_method = 1;
1531             break;
1532           }
1533       if (!has_nonprivate_method) 
1534         {
1535           warning ("all member functions in class %qT are private", t);
1536           return;
1537         }
1538     }
1539
1540   /* Even if some of the member functions are non-private, the class
1541      won't be useful for much if all the constructors or destructors
1542      are private: such an object can never be created or destroyed.  */
1543   if (TYPE_HAS_DESTRUCTOR (t)
1544       && TREE_PRIVATE (CLASSTYPE_DESTRUCTORS (t)))
1545     {
1546       warning ("%q#T only defines a private destructor and has no friends",
1547                t);
1548       return;
1549     }
1550
1551   if (TYPE_HAS_CONSTRUCTOR (t))
1552     {
1553       int nonprivate_ctor = 0;
1554           
1555       /* If a non-template class does not define a copy
1556          constructor, one is defined for it, enabling it to avoid
1557          this warning.  For a template class, this does not
1558          happen, and so we would normally get a warning on:
1559
1560            template <class T> class C { private: C(); };  
1561           
1562          To avoid this asymmetry, we check TYPE_HAS_INIT_REF.  All
1563          complete non-template or fully instantiated classes have this
1564          flag set.  */
1565       if (!TYPE_HAS_INIT_REF (t))
1566         nonprivate_ctor = 1;
1567       else 
1568         for (fn = CLASSTYPE_CONSTRUCTORS (t); fn; fn = OVL_NEXT (fn)) 
1569           {
1570             tree ctor = OVL_CURRENT (fn);
1571             /* Ideally, we wouldn't count copy constructors (or, in
1572                fact, any constructor that takes an argument of the
1573                class type as a parameter) because such things cannot
1574                be used to construct an instance of the class unless
1575                you already have one.  But, for now at least, we're
1576                more generous.  */
1577             if (! TREE_PRIVATE (ctor))
1578               {
1579                 nonprivate_ctor = 1;
1580                 break;
1581               }
1582           }
1583
1584       if (nonprivate_ctor == 0)
1585         {
1586           warning ("%q#T only defines private constructors and has no friends",
1587                    t);
1588           return;
1589         }
1590     }
1591 }
1592
1593 static struct {
1594   gt_pointer_operator new_value;
1595   void *cookie;
1596 } resort_data;
1597
1598 /* Comparison function to compare two TYPE_METHOD_VEC entries by name.  */
1599
1600 static int
1601 method_name_cmp (const void* m1_p, const void* m2_p)
1602 {
1603   const tree *const m1 = m1_p;
1604   const tree *const m2 = m2_p;
1605   
1606   if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1607     return 0;
1608   if (*m1 == NULL_TREE)
1609     return -1;
1610   if (*m2 == NULL_TREE)
1611     return 1;
1612   if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
1613     return -1;
1614   return 1;
1615 }
1616
1617 /* This routine compares two fields like method_name_cmp but using the
1618    pointer operator in resort_field_decl_data.  */
1619
1620 static int
1621 resort_method_name_cmp (const void* m1_p, const void* m2_p)
1622 {
1623   const tree *const m1 = m1_p;
1624   const tree *const m2 = m2_p;
1625   if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1626     return 0;
1627   if (*m1 == NULL_TREE)
1628     return -1;
1629   if (*m2 == NULL_TREE)
1630     return 1;
1631   {
1632     tree d1 = DECL_NAME (OVL_CURRENT (*m1));
1633     tree d2 = DECL_NAME (OVL_CURRENT (*m2));
1634     resort_data.new_value (&d1, resort_data.cookie);
1635     resort_data.new_value (&d2, resort_data.cookie);
1636     if (d1 < d2)
1637       return -1;
1638   }
1639   return 1;
1640 }
1641
1642 /* Resort TYPE_METHOD_VEC because pointers have been reordered.  */
1643
1644 void 
1645 resort_type_method_vec (void* obj,
1646                         void* orig_obj ATTRIBUTE_UNUSED ,
1647                         gt_pointer_operator new_value,
1648                         void* cookie)
1649 {
1650   VEC(tree) *method_vec = (VEC(tree) *) obj;
1651   int len = VEC_length (tree, method_vec);
1652   size_t slot;
1653   tree fn;
1654
1655   /* The type conversion ops have to live at the front of the vec, so we
1656      can't sort them.  */
1657   for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1658        VEC_iterate (tree, method_vec, slot, fn);
1659        ++slot)
1660     if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1661       break;
1662
1663   if (len - slot > 1)
1664     {
1665       resort_data.new_value = new_value;
1666       resort_data.cookie = cookie;
1667       qsort (VEC_address (tree, method_vec) + slot, len - slot, sizeof (tree),
1668              resort_method_name_cmp);
1669     }
1670 }
1671
1672 /* Warn about duplicate methods in fn_fields.
1673
1674    Sort methods that are not special (i.e., constructors, destructors,
1675    and type conversion operators) so that we can find them faster in
1676    search.  */
1677
1678 static void
1679 finish_struct_methods (tree t)
1680 {
1681   tree fn_fields;
1682   VEC(tree) *method_vec;
1683   int slot, len;
1684
1685   method_vec = CLASSTYPE_METHOD_VEC (t);
1686   if (!method_vec)
1687     return;
1688
1689   len = VEC_length (tree, method_vec);
1690
1691   /* Clear DECL_IN_AGGR_P for all functions.  */
1692   for (fn_fields = TYPE_METHODS (t); fn_fields; 
1693        fn_fields = TREE_CHAIN (fn_fields))
1694     DECL_IN_AGGR_P (fn_fields) = 0;
1695
1696   if (TYPE_HAS_DESTRUCTOR (t) && !CLASSTYPE_DESTRUCTORS (t))
1697     /* We thought there was a destructor, but there wasn't.  Some
1698        parse errors cause this anomalous situation.  */
1699     TYPE_HAS_DESTRUCTOR (t) = 0;
1700     
1701   /* Issue warnings about private constructors and such.  If there are
1702      no methods, then some public defaults are generated.  */
1703   maybe_warn_about_overly_private_class (t);
1704
1705   /* The type conversion ops have to live at the front of the vec, so we
1706      can't sort them.  */
1707   for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1708        VEC_iterate (tree, method_vec, slot, fn_fields);
1709        ++slot)
1710     if (!DECL_CONV_FN_P (OVL_CURRENT (fn_fields)))
1711       break;
1712   if (len - slot > 1)
1713     qsort (VEC_address (tree, method_vec) + slot,
1714            len-slot, sizeof (tree), method_name_cmp);
1715 }
1716
1717 /* Make BINFO's vtable have N entries, including RTTI entries,
1718    vbase and vcall offsets, etc.  Set its type and call the backend
1719    to lay it out.  */
1720
1721 static void
1722 layout_vtable_decl (tree binfo, int n)
1723 {
1724   tree atype;
1725   tree vtable;
1726
1727   atype = build_cplus_array_type (vtable_entry_type, 
1728                                   build_index_type (size_int (n - 1)));
1729   layout_type (atype);
1730
1731   /* We may have to grow the vtable.  */
1732   vtable = get_vtbl_decl_for_binfo (binfo);
1733   if (!same_type_p (TREE_TYPE (vtable), atype))
1734     {
1735       TREE_TYPE (vtable) = atype;
1736       DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
1737       layout_decl (vtable, 0);
1738     }
1739 }
1740
1741 /* True iff FNDECL and BASE_FNDECL (both non-static member functions)
1742    have the same signature.  */
1743
1744 int
1745 same_signature_p (tree fndecl, tree base_fndecl)
1746 {
1747   /* One destructor overrides another if they are the same kind of
1748      destructor.  */
1749   if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
1750       && special_function_p (base_fndecl) == special_function_p (fndecl))
1751     return 1;
1752   /* But a non-destructor never overrides a destructor, nor vice
1753      versa, nor do different kinds of destructors override
1754      one-another.  For example, a complete object destructor does not
1755      override a deleting destructor.  */
1756   if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
1757     return 0;
1758
1759   if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)
1760       || (DECL_CONV_FN_P (fndecl)
1761           && DECL_CONV_FN_P (base_fndecl)
1762           && same_type_p (DECL_CONV_FN_TYPE (fndecl),
1763                           DECL_CONV_FN_TYPE (base_fndecl))))
1764     {
1765       tree types, base_types;
1766       types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
1767       base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
1768       if ((TYPE_QUALS (TREE_TYPE (TREE_VALUE (base_types)))
1769            == TYPE_QUALS (TREE_TYPE (TREE_VALUE (types))))
1770           && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
1771         return 1;
1772     }
1773   return 0;
1774 }
1775
1776 /* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
1777    subobject.  */
1778  
1779 static bool
1780 base_derived_from (tree derived, tree base)
1781 {
1782   tree probe;
1783
1784   for (probe = base; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
1785     {
1786       if (probe == derived)
1787         return true;
1788       else if (BINFO_VIRTUAL_P (probe))
1789         /* If we meet a virtual base, we can't follow the inheritance
1790            any more.  See if the complete type of DERIVED contains
1791            such a virtual base.  */
1792         return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (derived))
1793                 != NULL_TREE);
1794     }
1795   return false;
1796 }
1797
1798 typedef struct find_final_overrider_data_s {
1799   /* The function for which we are trying to find a final overrider.  */
1800   tree fn;
1801   /* The base class in which the function was declared.  */
1802   tree declaring_base;
1803   /* The candidate overriders.  */
1804   tree candidates;
1805   /* Path to most derived.  */
1806   VEC (tree) *path;
1807 } find_final_overrider_data;
1808
1809 /* Add the overrider along the current path to FFOD->CANDIDATES.
1810    Returns true if an overrider was found; false otherwise.  */
1811
1812 static bool
1813 dfs_find_final_overrider_1 (tree binfo, 
1814                             find_final_overrider_data *ffod,
1815                             unsigned depth)
1816 {
1817   tree method;
1818
1819   /* If BINFO is not the most derived type, try a more derived class.
1820      A definition there will overrider a definition here.  */
1821   if (depth)
1822     {
1823       depth--;
1824       if (dfs_find_final_overrider_1
1825           (VEC_index (tree, ffod->path, depth), ffod, depth))
1826         return true;
1827     }
1828
1829   method = look_for_overrides_here (BINFO_TYPE (binfo), ffod->fn);
1830   if (method)
1831     {
1832       tree *candidate = &ffod->candidates;
1833       
1834       /* Remove any candidates overridden by this new function.  */
1835       while (*candidate)
1836         {
1837           /* If *CANDIDATE overrides METHOD, then METHOD
1838              cannot override anything else on the list.  */
1839           if (base_derived_from (TREE_VALUE (*candidate), binfo))
1840             return true;
1841           /* If METHOD overrides *CANDIDATE, remove *CANDIDATE.  */
1842           if (base_derived_from (binfo, TREE_VALUE (*candidate)))
1843             *candidate = TREE_CHAIN (*candidate);
1844           else
1845             candidate = &TREE_CHAIN (*candidate);
1846         }
1847       
1848       /* Add the new function.  */
1849       ffod->candidates = tree_cons (method, binfo, ffod->candidates);
1850       return true;
1851     }
1852
1853   return false;
1854 }
1855
1856 /* Called from find_final_overrider via dfs_walk.  */
1857
1858 static tree
1859 dfs_find_final_overrider_pre (tree binfo, void *data)
1860 {
1861   find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1862
1863   if (binfo == ffod->declaring_base)
1864     dfs_find_final_overrider_1 (binfo, ffod, VEC_length (tree, ffod->path));
1865   VEC_safe_push (tree, ffod->path, binfo);
1866
1867   return NULL_TREE;
1868 }
1869
1870 static tree
1871 dfs_find_final_overrider_post (tree binfo ATTRIBUTE_UNUSED, void *data)
1872 {
1873   find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1874   VEC_pop (tree, ffod->path);
1875
1876   return NULL_TREE;
1877 }
1878
1879 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
1880    FN and whose TREE_VALUE is the binfo for the base where the
1881    overriding occurs.  BINFO (in the hierarchy dominated by the binfo
1882    DERIVED) is the base object in which FN is declared.  */
1883
1884 static tree
1885 find_final_overrider (tree derived, tree binfo, tree fn)
1886 {
1887   find_final_overrider_data ffod;
1888
1889   /* Getting this right is a little tricky.  This is valid:
1890
1891        struct S { virtual void f (); };
1892        struct T { virtual void f (); };
1893        struct U : public S, public T { };
1894
1895      even though calling `f' in `U' is ambiguous.  But, 
1896
1897        struct R { virtual void f(); };
1898        struct S : virtual public R { virtual void f (); };
1899        struct T : virtual public R { virtual void f (); };
1900        struct U : public S, public T { };
1901
1902      is not -- there's no way to decide whether to put `S::f' or
1903      `T::f' in the vtable for `R'.  
1904      
1905      The solution is to look at all paths to BINFO.  If we find
1906      different overriders along any two, then there is a problem.  */
1907   if (DECL_THUNK_P (fn))
1908     fn = THUNK_TARGET (fn);
1909
1910   /* Determine the depth of the hierarchy.  */
1911   ffod.fn = fn;
1912   ffod.declaring_base = binfo;
1913   ffod.candidates = NULL_TREE;
1914   ffod.path = VEC_alloc (tree, 30);
1915
1916   dfs_walk_all (derived, dfs_find_final_overrider_pre,
1917                 dfs_find_final_overrider_post, &ffod);
1918
1919   VEC_free (tree, ffod.path);
1920   
1921   /* If there was no winner, issue an error message.  */
1922   if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
1923     {
1924       error ("no unique final overrider for %qD in %qT", fn, 
1925              BINFO_TYPE (derived));
1926       return error_mark_node;
1927     }
1928
1929   return ffod.candidates;
1930 }
1931
1932 /* Return the index of the vcall offset for FN when TYPE is used as a
1933    virtual base.  */
1934
1935 static tree
1936 get_vcall_index (tree fn, tree type)
1937 {
1938   VEC (tree_pair_s) *indices = CLASSTYPE_VCALL_INDICES (type);
1939   tree_pair_p p;
1940   unsigned ix;
1941
1942   for (ix = 0; VEC_iterate (tree_pair_s, indices, ix, p); ix++)
1943     if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (p->purpose))
1944         || same_signature_p (fn, p->purpose))
1945       return p->value;
1946
1947   /* There should always be an appropriate index.  */
1948   gcc_unreachable ();
1949 }
1950
1951 /* Update an entry in the vtable for BINFO, which is in the hierarchy
1952    dominated by T.  FN has been overridden in BINFO; VIRTUALS points to the
1953    corresponding position in the BINFO_VIRTUALS list.  */
1954
1955 static void
1956 update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
1957                             unsigned ix)
1958 {
1959   tree b;
1960   tree overrider;
1961   tree delta;
1962   tree virtual_base;
1963   tree first_defn;
1964   tree overrider_fn, overrider_target;
1965   tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
1966   tree over_return, base_return;
1967   bool lost = false;
1968
1969   /* Find the nearest primary base (possibly binfo itself) which defines
1970      this function; this is the class the caller will convert to when
1971      calling FN through BINFO.  */
1972   for (b = binfo; ; b = get_primary_binfo (b))
1973     {
1974       gcc_assert (b);
1975       if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
1976         break;
1977
1978       /* The nearest definition is from a lost primary.  */
1979       if (BINFO_LOST_PRIMARY_P (b))
1980         lost = true;
1981     }
1982   first_defn = b;
1983
1984   /* Find the final overrider.  */
1985   overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
1986   if (overrider == error_mark_node)
1987     return;
1988   overrider_target = overrider_fn = TREE_PURPOSE (overrider);
1989   
1990   /* Check for adjusting covariant return types.  */
1991   over_return = TREE_TYPE (TREE_TYPE (overrider_target));
1992   base_return = TREE_TYPE (TREE_TYPE (target_fn));
1993   
1994   if (POINTER_TYPE_P (over_return)
1995       && TREE_CODE (over_return) == TREE_CODE (base_return)
1996       && CLASS_TYPE_P (TREE_TYPE (over_return))
1997       && CLASS_TYPE_P (TREE_TYPE (base_return)))
1998     {
1999       /* If FN is a covariant thunk, we must figure out the adjustment
2000          to the final base FN was converting to. As OVERRIDER_TARGET might
2001          also be converting to the return type of FN, we have to
2002          combine the two conversions here.  */
2003       tree fixed_offset, virtual_offset;
2004       
2005       if (DECL_THUNK_P (fn))
2006         {
2007           gcc_assert (DECL_RESULT_THUNK_P (fn));
2008           fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
2009           virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
2010         }
2011       else
2012         fixed_offset = virtual_offset = NULL_TREE;
2013
2014       if (virtual_offset)
2015         /* Find the equivalent binfo within the return type of the
2016            overriding function. We will want the vbase offset from
2017            there.  */
2018         virtual_offset = binfo_for_vbase (BINFO_TYPE (virtual_offset),
2019                                           TREE_TYPE (over_return));
2020       else if (!same_type_p (TREE_TYPE (over_return),
2021                              TREE_TYPE (base_return)))
2022         {
2023           /* There was no existing virtual thunk (which takes
2024              precedence).  */
2025           tree thunk_binfo;
2026           base_kind kind;
2027           
2028           thunk_binfo = lookup_base (TREE_TYPE (over_return),
2029                                      TREE_TYPE (base_return),
2030                                      ba_check | ba_quiet, &kind);
2031
2032           if (thunk_binfo && (kind == bk_via_virtual
2033                               || !BINFO_OFFSET_ZEROP (thunk_binfo)))
2034             {
2035               tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
2036
2037               if (kind == bk_via_virtual)
2038                 {
2039                   /* We convert via virtual base. Find the virtual
2040                      base and adjust the fixed offset to be from there.  */
2041                   while (!BINFO_VIRTUAL_P (thunk_binfo))
2042                     thunk_binfo = BINFO_INHERITANCE_CHAIN (thunk_binfo);
2043
2044                   virtual_offset = thunk_binfo;
2045                   offset = size_diffop
2046                     (offset, convert
2047                      (ssizetype, BINFO_OFFSET (virtual_offset)));
2048                 }
2049               if (fixed_offset)
2050                 /* There was an existing fixed offset, this must be
2051                    from the base just converted to, and the base the
2052                    FN was thunking to.  */
2053                 fixed_offset = size_binop (PLUS_EXPR, fixed_offset, offset);
2054               else
2055                 fixed_offset = offset;
2056             }
2057         }
2058       
2059       if (fixed_offset || virtual_offset)
2060         /* Replace the overriding function with a covariant thunk.  We
2061            will emit the overriding function in its own slot as
2062            well.  */
2063         overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2064                                    fixed_offset, virtual_offset);
2065     }
2066   else
2067     gcc_assert (!DECL_THUNK_P (fn));
2068   
2069   /* Assume that we will produce a thunk that convert all the way to
2070      the final overrider, and not to an intermediate virtual base.  */
2071   virtual_base = NULL_TREE;
2072
2073   /* See if we can convert to an intermediate virtual base first, and then
2074      use the vcall offset located there to finish the conversion.  */
2075   for (; b; b = BINFO_INHERITANCE_CHAIN (b))
2076     {
2077       /* If we find the final overrider, then we can stop
2078          walking.  */
2079       if (SAME_BINFO_TYPE_P (BINFO_TYPE (b),
2080                              BINFO_TYPE (TREE_VALUE (overrider))))
2081         break;
2082
2083       /* If we find a virtual base, and we haven't yet found the
2084          overrider, then there is a virtual base between the
2085          declaring base (first_defn) and the final overrider.  */
2086       if (BINFO_VIRTUAL_P (b))
2087         {
2088           virtual_base = b;
2089           break;
2090         }
2091     }
2092
2093   if (overrider_fn != overrider_target && !virtual_base)
2094     {
2095       /* The ABI specifies that a covariant thunk includes a mangling
2096          for a this pointer adjustment.  This-adjusting thunks that
2097          override a function from a virtual base have a vcall
2098          adjustment.  When the virtual base in question is a primary
2099          virtual base, we know the adjustments are zero, (and in the
2100          non-covariant case, we would not use the thunk).
2101          Unfortunately we didn't notice this could happen, when
2102          designing the ABI and so never mandated that such a covariant
2103          thunk should be emitted.  Because we must use the ABI mandated
2104          name, we must continue searching from the binfo where we
2105          found the most recent definition of the function, towards the
2106          primary binfo which first introduced the function into the
2107          vtable.  If that enters a virtual base, we must use a vcall
2108          this-adjusting thunk.  Bleah! */
2109       tree probe = first_defn;
2110
2111       while ((probe = get_primary_binfo (probe))
2112              && (unsigned) list_length (BINFO_VIRTUALS (probe)) > ix)
2113         if (BINFO_VIRTUAL_P (probe))
2114           virtual_base = probe;
2115       
2116       if (virtual_base)
2117         /* Even if we find a virtual base, the correct delta is
2118            between the overrider and the binfo we're building a vtable
2119            for.  */
2120         goto virtual_covariant;
2121     }
2122   
2123   /* Compute the constant adjustment to the `this' pointer.  The
2124      `this' pointer, when this function is called, will point at BINFO
2125      (or one of its primary bases, which are at the same offset).  */
2126   if (virtual_base)
2127     /* The `this' pointer needs to be adjusted from the declaration to
2128        the nearest virtual base.  */
2129     delta = size_diffop (convert (ssizetype, BINFO_OFFSET (virtual_base)),
2130                          convert (ssizetype, BINFO_OFFSET (first_defn)));
2131   else if (lost)
2132     /* If the nearest definition is in a lost primary, we don't need an
2133        entry in our vtable.  Except possibly in a constructor vtable,
2134        if we happen to get our primary back.  In that case, the offset
2135        will be zero, as it will be a primary base.  */
2136     delta = size_zero_node;
2137   else
2138     /* The `this' pointer needs to be adjusted from pointing to
2139        BINFO to pointing at the base where the final overrider
2140        appears.  */
2141     virtual_covariant:
2142     delta = size_diffop (convert (ssizetype,
2143                                   BINFO_OFFSET (TREE_VALUE (overrider))),
2144                          convert (ssizetype, BINFO_OFFSET (binfo)));
2145
2146   modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
2147
2148   if (virtual_base)
2149     BV_VCALL_INDEX (*virtuals) 
2150       = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
2151   else
2152     BV_VCALL_INDEX (*virtuals) = NULL_TREE;
2153 }
2154
2155 /* Called from modify_all_vtables via dfs_walk.  */
2156
2157 static tree
2158 dfs_modify_vtables (tree binfo, void* data)
2159 {
2160   tree t = (tree) data;
2161   tree virtuals;
2162   tree old_virtuals;
2163   unsigned ix;
2164
2165   if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2166     /* A base without a vtable needs no modification, and its bases
2167        are uninteresting.  */
2168     return dfs_skip_bases;
2169   
2170   if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t)
2171       && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2172     /* Don't do the primary vtable, if it's new.  */
2173     return NULL_TREE;
2174
2175   if (BINFO_PRIMARY_P (binfo) && !BINFO_VIRTUAL_P (binfo))
2176     /* There's no need to modify the vtable for a non-virtual primary
2177        base; we're not going to use that vtable anyhow.  We do still
2178        need to do this for virtual primary bases, as they could become
2179        non-primary in a construction vtable.  */
2180     return NULL_TREE;
2181
2182   make_new_vtable (t, binfo);
2183       
2184   /* Now, go through each of the virtual functions in the virtual
2185      function table for BINFO.  Find the final overrider, and update
2186      the BINFO_VIRTUALS list appropriately.  */
2187   for (ix = 0, virtuals = BINFO_VIRTUALS (binfo),
2188          old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2189        virtuals;
2190        ix++, virtuals = TREE_CHAIN (virtuals),
2191          old_virtuals = TREE_CHAIN (old_virtuals))
2192     update_vtable_entry_for_fn (t, 
2193                                 binfo, 
2194                                 BV_FN (old_virtuals),
2195                                 &virtuals, ix);
2196
2197   return NULL_TREE;
2198 }
2199
2200 /* Update all of the primary and secondary vtables for T.  Create new
2201    vtables as required, and initialize their RTTI information.  Each
2202    of the functions in VIRTUALS is declared in T and may override a
2203    virtual function from a base class; find and modify the appropriate
2204    entries to point to the overriding functions.  Returns a list, in
2205    declaration order, of the virtual functions that are declared in T,
2206    but do not appear in the primary base class vtable, and which
2207    should therefore be appended to the end of the vtable for T.  */
2208
2209 static tree
2210 modify_all_vtables (tree t, tree virtuals)
2211 {
2212   tree binfo = TYPE_BINFO (t);
2213   tree *fnsp;
2214
2215   /* Update all of the vtables.  */
2216   dfs_walk_once (binfo, dfs_modify_vtables, NULL, t);
2217
2218   /* Add virtual functions not already in our primary vtable. These
2219      will be both those introduced by this class, and those overridden
2220      from secondary bases.  It does not include virtuals merely
2221      inherited from secondary bases.  */
2222   for (fnsp = &virtuals; *fnsp; )
2223     {
2224       tree fn = TREE_VALUE (*fnsp);
2225
2226       if (!value_member (fn, BINFO_VIRTUALS (binfo))
2227           || DECL_VINDEX (fn) == error_mark_node)
2228         {
2229           /* We don't need to adjust the `this' pointer when
2230              calling this function.  */
2231           BV_DELTA (*fnsp) = integer_zero_node;
2232           BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2233
2234           /* This is a function not already in our vtable.  Keep it.  */
2235           fnsp = &TREE_CHAIN (*fnsp);
2236         }
2237       else
2238         /* We've already got an entry for this function.  Skip it.  */
2239         *fnsp = TREE_CHAIN (*fnsp);
2240     }
2241
2242   return virtuals;
2243 }
2244
2245 /* Get the base virtual function declarations in T that have the
2246    indicated NAME.  */
2247
2248 static tree
2249 get_basefndecls (tree name, tree t)
2250 {
2251   tree methods;
2252   tree base_fndecls = NULL_TREE;
2253   int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
2254   int i;
2255
2256   /* Find virtual functions in T with the indicated NAME.  */
2257   i = lookup_fnfields_1 (t, name);
2258   if (i != -1)
2259     for (methods = VEC_index (tree, CLASSTYPE_METHOD_VEC (t), i);
2260          methods;
2261          methods = OVL_NEXT (methods))
2262       {
2263         tree method = OVL_CURRENT (methods);
2264
2265         if (TREE_CODE (method) == FUNCTION_DECL
2266             && DECL_VINDEX (method))
2267           base_fndecls = tree_cons (NULL_TREE, method, base_fndecls);
2268       }
2269
2270   if (base_fndecls)
2271     return base_fndecls;
2272
2273   for (i = 0; i < n_baseclasses; i++)
2274     {
2275       tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
2276       base_fndecls = chainon (get_basefndecls (name, basetype),
2277                               base_fndecls);
2278     }
2279
2280   return base_fndecls;
2281 }
2282
2283 /* If this declaration supersedes the declaration of
2284    a method declared virtual in the base class, then
2285    mark this field as being virtual as well.  */
2286
2287 static void
2288 check_for_override (tree decl, tree ctype)
2289 {
2290   if (TREE_CODE (decl) == TEMPLATE_DECL)
2291     /* In [temp.mem] we have:
2292
2293          A specialization of a member function template does not
2294          override a virtual function from a base class.  */
2295     return;
2296   if ((DECL_DESTRUCTOR_P (decl)
2297        || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2298        || DECL_CONV_FN_P (decl))
2299       && look_for_overrides (ctype, decl)
2300       && !DECL_STATIC_FUNCTION_P (decl))
2301     /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2302        the error_mark_node so that we know it is an overriding
2303        function.  */
2304     DECL_VINDEX (decl) = decl;
2305
2306   if (DECL_VIRTUAL_P (decl))
2307     {
2308       if (!DECL_VINDEX (decl))
2309         DECL_VINDEX (decl) = error_mark_node;
2310       IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2311     }
2312 }
2313
2314 /* Warn about hidden virtual functions that are not overridden in t.
2315    We know that constructors and destructors don't apply.  */
2316
2317 void
2318 warn_hidden (tree t)
2319 {
2320   VEC(tree) *method_vec = CLASSTYPE_METHOD_VEC (t);
2321   tree fns;
2322   size_t i;
2323
2324   /* We go through each separately named virtual function.  */
2325   for (i = CLASSTYPE_FIRST_CONVERSION_SLOT; 
2326        VEC_iterate (tree, method_vec, i, fns);
2327        ++i)
2328     {
2329       tree fn;
2330       tree name;
2331       tree fndecl;
2332       tree base_fndecls;
2333       tree base_binfo;
2334       tree binfo;
2335       int j;
2336
2337       /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2338          have the same name.  Figure out what name that is.  */
2339       name = DECL_NAME (OVL_CURRENT (fns));
2340       /* There are no possibly hidden functions yet.  */
2341       base_fndecls = NULL_TREE;
2342       /* Iterate through all of the base classes looking for possibly
2343          hidden functions.  */
2344       for (binfo = TYPE_BINFO (t), j = 0;
2345            BINFO_BASE_ITERATE (binfo, j, base_binfo); j++)
2346         {
2347           tree basetype = BINFO_TYPE (base_binfo);
2348           base_fndecls = chainon (get_basefndecls (name, basetype),
2349                                   base_fndecls);
2350         }
2351
2352       /* If there are no functions to hide, continue.  */
2353       if (!base_fndecls)
2354         continue;
2355
2356       /* Remove any overridden functions.  */
2357       for (fn = fns; fn; fn = OVL_NEXT (fn))
2358         {
2359           fndecl = OVL_CURRENT (fn);
2360           if (DECL_VINDEX (fndecl))
2361             {
2362               tree *prev = &base_fndecls;
2363               
2364               while (*prev) 
2365                 /* If the method from the base class has the same
2366                    signature as the method from the derived class, it
2367                    has been overridden.  */
2368                 if (same_signature_p (fndecl, TREE_VALUE (*prev)))
2369                   *prev = TREE_CHAIN (*prev);
2370                 else
2371                   prev = &TREE_CHAIN (*prev);
2372             }
2373         }
2374
2375       /* Now give a warning for all base functions without overriders,
2376          as they are hidden.  */
2377       while (base_fndecls) 
2378         {
2379           /* Here we know it is a hider, and no overrider exists.  */
2380           cp_warning_at ("%qD was hidden", TREE_VALUE (base_fndecls));
2381           cp_warning_at ("  by %qD", fns);
2382           base_fndecls = TREE_CHAIN (base_fndecls);
2383         }
2384     }
2385 }
2386
2387 /* Check for things that are invalid.  There are probably plenty of other
2388    things we should check for also.  */
2389
2390 static void
2391 finish_struct_anon (tree t)
2392 {
2393   tree field;
2394
2395   for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
2396     {
2397       if (TREE_STATIC (field))
2398         continue;
2399       if (TREE_CODE (field) != FIELD_DECL)
2400         continue;
2401
2402       if (DECL_NAME (field) == NULL_TREE
2403           && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2404         {
2405           tree elt = TYPE_FIELDS (TREE_TYPE (field));
2406           for (; elt; elt = TREE_CHAIN (elt))
2407             {
2408               /* We're generally only interested in entities the user
2409                  declared, but we also find nested classes by noticing
2410                  the TYPE_DECL that we create implicitly.  You're
2411                  allowed to put one anonymous union inside another,
2412                  though, so we explicitly tolerate that.  We use
2413                  TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
2414                  we also allow unnamed types used for defining fields.  */
2415               if (DECL_ARTIFICIAL (elt) 
2416                   && (!DECL_IMPLICIT_TYPEDEF_P (elt)
2417                       || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
2418                 continue;
2419
2420               if (TREE_CODE (elt) != FIELD_DECL)
2421                 {
2422                   cp_pedwarn_at ("%q#D invalid; an anonymous union can "
2423                                  "only have non-static data members",
2424                                  elt);
2425                   continue;
2426                 }
2427
2428               if (TREE_PRIVATE (elt))
2429                 cp_pedwarn_at ("private member %q#D in anonymous union",
2430                                elt);
2431               else if (TREE_PROTECTED (elt))
2432                 cp_pedwarn_at ("protected member %q#D in anonymous union",
2433                                elt);
2434
2435               TREE_PRIVATE (elt) = TREE_PRIVATE (field);
2436               TREE_PROTECTED (elt) = TREE_PROTECTED (field);
2437             }
2438         }
2439     }
2440 }
2441
2442 /* Add T to CLASSTYPE_DECL_LIST of current_class_type which
2443    will be used later during class template instantiation.
2444    When FRIEND_P is zero, T can be a static member data (VAR_DECL),
2445    a non-static member data (FIELD_DECL), a member function
2446    (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE), 
2447    a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
2448    When FRIEND_P is nonzero, T is either a friend class
2449    (RECORD_TYPE, TEMPLATE_DECL) or a friend function
2450    (FUNCTION_DECL, TEMPLATE_DECL).  */
2451
2452 void
2453 maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
2454 {
2455   /* Save some memory by not creating TREE_LIST if TYPE is not template.  */
2456   if (CLASSTYPE_TEMPLATE_INFO (type))
2457     CLASSTYPE_DECL_LIST (type)
2458       = tree_cons (friend_p ? NULL_TREE : type,
2459                    t, CLASSTYPE_DECL_LIST (type));
2460 }
2461
2462 /* Create default constructors, assignment operators, and so forth for
2463    the type indicated by T, if they are needed.
2464    CANT_HAVE_DEFAULT_CTOR, CANT_HAVE_CONST_CTOR, and
2465    CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason, the
2466    class cannot have a default constructor, copy constructor taking a
2467    const reference argument, or an assignment operator taking a const
2468    reference, respectively.  If a virtual destructor is created, its
2469    DECL is returned; otherwise the return value is NULL_TREE.  */
2470
2471 static void
2472 add_implicitly_declared_members (tree t, 
2473                                  int cant_have_default_ctor,
2474                                  int cant_have_const_cctor,
2475                                  int cant_have_const_assignment)
2476 {
2477   tree default_fn;
2478   tree implicit_fns = NULL_TREE;
2479   tree virtual_dtor = NULL_TREE;
2480   tree *f;
2481
2482   /* Destructor.  */
2483   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) && !TYPE_HAS_DESTRUCTOR (t))
2484     {
2485       default_fn = implicitly_declare_fn (sfk_destructor, t, /*const_p=*/0);
2486       check_for_override (default_fn, t);
2487
2488       TREE_CHAIN (default_fn) = implicit_fns;
2489       implicit_fns = default_fn;
2490       
2491       if (DECL_VINDEX (default_fn))
2492         virtual_dtor = default_fn;
2493     }
2494   else
2495     /* Any non-implicit destructor is non-trivial.  */
2496     TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) |= TYPE_HAS_DESTRUCTOR (t);
2497
2498   /* Default constructor.  */
2499   if (! TYPE_HAS_CONSTRUCTOR (t) && ! cant_have_default_ctor)
2500     {
2501       TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 1;
2502       CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 1;
2503     }
2504
2505   /* Copy constructor.  */
2506   if (! TYPE_HAS_INIT_REF (t) && ! TYPE_FOR_JAVA (t))
2507     {
2508       TYPE_HAS_INIT_REF (t) = 1;
2509       TYPE_HAS_CONST_INIT_REF (t) = !cant_have_const_cctor;
2510       CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
2511       TYPE_HAS_CONSTRUCTOR (t) = 1;
2512     }
2513
2514   /* If there is no assignment operator, one will be created if and
2515      when it is needed.  For now, just record whether or not the type
2516      of the parameter to the assignment operator will be a const or
2517      non-const reference.  */
2518   if (!TYPE_HAS_ASSIGN_REF (t) && !TYPE_FOR_JAVA (t))
2519     {
2520       TYPE_HAS_ASSIGN_REF (t) = 1;
2521       TYPE_HAS_CONST_ASSIGN_REF (t) = !cant_have_const_assignment;
2522       CLASSTYPE_LAZY_ASSIGNMENT_OP (t) = 1;
2523     }
2524   
2525   /* Now, hook all of the new functions on to TYPE_METHODS,
2526      and add them to the CLASSTYPE_METHOD_VEC.  */
2527   for (f = &implicit_fns; *f; f = &TREE_CHAIN (*f))
2528     {
2529       add_method (t, *f);
2530       maybe_add_class_template_decl_list (current_class_type, *f, /*friend_p=*/0);
2531     }
2532   if (abi_version_at_least (2))
2533     /* G++ 3.2 put the implicit destructor at the *beginning* of the
2534        list, which cause the destructor to be emitted in an incorrect
2535        location in the vtable.  */
2536     TYPE_METHODS (t) = chainon (TYPE_METHODS (t), implicit_fns);
2537   else
2538     {
2539       if (warn_abi && virtual_dtor)
2540         warning ("vtable layout for class %qT may not be ABI-compliant "
2541                  "and may change in a future version of GCC due to implicit "
2542                  "virtual destructor",
2543                  t);
2544       *f = TYPE_METHODS (t);
2545       TYPE_METHODS (t) = implicit_fns;
2546     }
2547 }
2548
2549 /* Subroutine of finish_struct_1.  Recursively count the number of fields
2550    in TYPE, including anonymous union members.  */
2551
2552 static int
2553 count_fields (tree fields)
2554 {
2555   tree x;
2556   int n_fields = 0;
2557   for (x = fields; x; x = TREE_CHAIN (x))
2558     {
2559       if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2560         n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
2561       else
2562         n_fields += 1;
2563     }
2564   return n_fields;
2565 }
2566
2567 /* Subroutine of finish_struct_1.  Recursively add all the fields in the
2568    TREE_LIST FIELDS to the SORTED_FIELDS_TYPE elts, starting at offset IDX.  */
2569
2570 static int
2571 add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
2572 {
2573   tree x;
2574   for (x = fields; x; x = TREE_CHAIN (x))
2575     {
2576       if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2577         idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
2578       else
2579         field_vec->elts[idx++] = x;
2580     }
2581   return idx;
2582 }
2583
2584 /* FIELD is a bit-field.  We are finishing the processing for its
2585    enclosing type.  Issue any appropriate messages and set appropriate
2586    flags.  */
2587
2588 static void
2589 check_bitfield_decl (tree field)
2590 {
2591   tree type = TREE_TYPE (field);
2592   tree w = NULL_TREE;
2593
2594   /* Detect invalid bit-field type.  */
2595   if (DECL_INITIAL (field)
2596       && ! INTEGRAL_TYPE_P (TREE_TYPE (field)))
2597     {
2598       cp_error_at ("bit-field %q#D with non-integral type", field);
2599       w = error_mark_node;
2600     }
2601
2602   /* Detect and ignore out of range field width.  */
2603   if (DECL_INITIAL (field))
2604     {
2605       w = DECL_INITIAL (field);
2606
2607       /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs.  */
2608       STRIP_NOPS (w);
2609
2610       /* detect invalid field size.  */
2611       w = integral_constant_value (w);
2612
2613       if (TREE_CODE (w) != INTEGER_CST)
2614         {
2615           cp_error_at ("bit-field %qD width not an integer constant",
2616                        field);
2617           w = error_mark_node;
2618         }
2619       else if (tree_int_cst_sgn (w) < 0)
2620         {
2621           cp_error_at ("negative width in bit-field %qD", field);
2622           w = error_mark_node;
2623         }
2624       else if (integer_zerop (w) && DECL_NAME (field) != 0)
2625         {
2626           cp_error_at ("zero width for bit-field %qD", field);
2627           w = error_mark_node;
2628         }
2629       else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
2630                && TREE_CODE (type) != ENUMERAL_TYPE
2631                && TREE_CODE (type) != BOOLEAN_TYPE)
2632         cp_warning_at ("width of %qD exceeds its type", field);
2633       else if (TREE_CODE (type) == ENUMERAL_TYPE
2634                && (0 > compare_tree_int (w,
2635                                          min_precision (TYPE_MIN_VALUE (type),
2636                                                         TYPE_UNSIGNED (type)))
2637                    ||  0 > compare_tree_int (w,
2638                                              min_precision
2639                                              (TYPE_MAX_VALUE (type),
2640                                               TYPE_UNSIGNED (type)))))
2641         cp_warning_at ("%qD is too small to hold all values of %q#T",
2642                        field, type);
2643     }
2644   
2645   /* Remove the bit-field width indicator so that the rest of the
2646      compiler does not treat that value as an initializer.  */
2647   DECL_INITIAL (field) = NULL_TREE;
2648
2649   if (w != error_mark_node)
2650     {
2651       DECL_SIZE (field) = convert (bitsizetype, w);
2652       DECL_BIT_FIELD (field) = 1;
2653     }
2654   else
2655     {
2656       /* Non-bit-fields are aligned for their type.  */
2657       DECL_BIT_FIELD (field) = 0;
2658       CLEAR_DECL_C_BIT_FIELD (field);
2659     }
2660 }
2661
2662 /* FIELD is a non bit-field.  We are finishing the processing for its
2663    enclosing type T.  Issue any appropriate messages and set appropriate
2664    flags.  */
2665
2666 static void
2667 check_field_decl (tree field,
2668                   tree t,
2669                   int* cant_have_const_ctor,
2670                   int* cant_have_default_ctor,
2671                   int* no_const_asn_ref,
2672                   int* any_default_members)
2673 {
2674   tree type = strip_array_types (TREE_TYPE (field));
2675
2676   /* An anonymous union cannot contain any fields which would change
2677      the settings of CANT_HAVE_CONST_CTOR and friends.  */
2678   if (ANON_UNION_TYPE_P (type))
2679     ;
2680   /* And, we don't set TYPE_HAS_CONST_INIT_REF, etc., for anonymous
2681      structs.  So, we recurse through their fields here.  */
2682   else if (ANON_AGGR_TYPE_P (type))
2683     {
2684       tree fields;
2685
2686       for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
2687         if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
2688           check_field_decl (fields, t, cant_have_const_ctor,
2689                             cant_have_default_ctor, no_const_asn_ref,
2690                             any_default_members);
2691     }
2692   /* Check members with class type for constructors, destructors,
2693      etc.  */
2694   else if (CLASS_TYPE_P (type))
2695     {
2696       /* Never let anything with uninheritable virtuals
2697          make it through without complaint.  */
2698       abstract_virtuals_error (field, type);
2699                       
2700       if (TREE_CODE (t) == UNION_TYPE)
2701         {
2702           if (TYPE_NEEDS_CONSTRUCTING (type))
2703             cp_error_at ("member %q#D with constructor not allowed in union",
2704                          field);
2705           if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2706             cp_error_at ("member %q#D with destructor not allowed in union",
2707                          field);
2708           if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
2709             cp_error_at ("member %q#D with copy assignment operator not allowed in union",
2710                          field);
2711         }
2712       else
2713         {
2714           TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
2715           TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) 
2716             |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
2717           TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_HAS_COMPLEX_ASSIGN_REF (type);
2718           TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (type);
2719         }
2720
2721       if (!TYPE_HAS_CONST_INIT_REF (type))
2722         *cant_have_const_ctor = 1;
2723
2724       if (!TYPE_HAS_CONST_ASSIGN_REF (type))
2725         *no_const_asn_ref = 1;
2726
2727       if (TYPE_HAS_CONSTRUCTOR (type)
2728           && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
2729         *cant_have_default_ctor = 1;
2730     }
2731   if (DECL_INITIAL (field) != NULL_TREE)
2732     {
2733       /* `build_class_init_list' does not recognize
2734          non-FIELD_DECLs.  */
2735       if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
2736         error ("multiple fields in union %qT initialized", t);
2737       *any_default_members = 1;
2738     }
2739 }
2740
2741 /* Check the data members (both static and non-static), class-scoped
2742    typedefs, etc., appearing in the declaration of T.  Issue
2743    appropriate diagnostics.  Sets ACCESS_DECLS to a list (in
2744    declaration order) of access declarations; each TREE_VALUE in this
2745    list is a USING_DECL.
2746
2747    In addition, set the following flags:
2748
2749      EMPTY_P
2750        The class is empty, i.e., contains no non-static data members.
2751
2752      CANT_HAVE_DEFAULT_CTOR_P
2753        This class cannot have an implicitly generated default
2754        constructor.
2755
2756      CANT_HAVE_CONST_CTOR_P
2757        This class cannot have an implicitly generated copy constructor
2758        taking a const reference.
2759
2760      CANT_HAVE_CONST_ASN_REF
2761        This class cannot have an implicitly generated assignment
2762        operator taking a const reference.
2763
2764    All of these flags should be initialized before calling this
2765    function.
2766
2767    Returns a pointer to the end of the TYPE_FIELDs chain; additional
2768    fields can be added by adding to this chain.  */
2769
2770 static void
2771 check_field_decls (tree t, tree *access_decls,
2772                    int *cant_have_default_ctor_p, 
2773                    int *cant_have_const_ctor_p,
2774                    int *no_const_asn_ref_p)
2775 {
2776   tree *field;
2777   tree *next;
2778   bool has_pointers;
2779   int any_default_members;
2780
2781   /* Assume there are no access declarations.  */
2782   *access_decls = NULL_TREE;
2783   /* Assume this class has no pointer members.  */
2784   has_pointers = false;
2785   /* Assume none of the members of this class have default
2786      initializations.  */
2787   any_default_members = 0;
2788
2789   for (field = &TYPE_FIELDS (t); *field; field = next)
2790     {
2791       tree x = *field;
2792       tree type = TREE_TYPE (x);
2793
2794       next = &TREE_CHAIN (x);
2795
2796       if (TREE_CODE (x) == FIELD_DECL)
2797         {
2798           if (TYPE_PACKED (t))
2799             {
2800               if (!pod_type_p (TREE_TYPE (x)) && !TYPE_PACKED (TREE_TYPE (x)))
2801                 cp_warning_at
2802                   ("ignoring packed attribute on unpacked non-POD field %q#D",
2803                    x);
2804               else
2805                 DECL_PACKED (x) = 1;
2806             }
2807
2808           if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
2809             /* We don't treat zero-width bitfields as making a class
2810                non-empty.  */
2811             ;
2812           else
2813             {
2814               tree element_type;
2815
2816               /* The class is non-empty.  */
2817               CLASSTYPE_EMPTY_P (t) = 0;
2818               /* The class is not even nearly empty.  */
2819               CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
2820               /* If one of the data members contains an empty class,
2821                  so does T.  */
2822               element_type = strip_array_types (type);
2823               if (CLASS_TYPE_P (element_type) 
2824                   && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
2825                 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
2826             }
2827         }
2828
2829       if (TREE_CODE (x) == USING_DECL)
2830         {
2831           /* Prune the access declaration from the list of fields.  */
2832           *field = TREE_CHAIN (x);
2833
2834           /* Save the access declarations for our caller.  */
2835           *access_decls = tree_cons (NULL_TREE, x, *access_decls);
2836
2837           /* Since we've reset *FIELD there's no reason to skip to the
2838              next field.  */
2839           next = field;
2840           continue;
2841         }
2842
2843       if (TREE_CODE (x) == TYPE_DECL
2844           || TREE_CODE (x) == TEMPLATE_DECL)
2845         continue;
2846
2847       /* If we've gotten this far, it's a data member, possibly static,
2848          or an enumerator.  */
2849       DECL_CONTEXT (x) = t;
2850
2851       /* When this goes into scope, it will be a non-local reference.  */
2852       DECL_NONLOCAL (x) = 1;
2853
2854       if (TREE_CODE (t) == UNION_TYPE)
2855         {
2856           /* [class.union]
2857
2858              If a union contains a static data member, or a member of
2859              reference type, the program is ill-formed.  */
2860           if (TREE_CODE (x) == VAR_DECL)
2861             {
2862               cp_error_at ("%qD may not be static because it is a member of a union", x);
2863               continue;
2864             }
2865           if (TREE_CODE (type) == REFERENCE_TYPE)
2866             {
2867               cp_error_at ("%qD may not have reference type %qT because"
2868                            " it is a member of a union",
2869                            x, type);
2870               continue;
2871             }
2872         }
2873
2874       /* ``A local class cannot have static data members.'' ARM 9.4 */
2875       if (current_function_decl && TREE_STATIC (x))
2876         cp_error_at ("field %qD in local class cannot be static", x);
2877
2878       /* Perform error checking that did not get done in
2879          grokdeclarator.  */
2880       if (TREE_CODE (type) == FUNCTION_TYPE)
2881         {
2882           cp_error_at ("field %qD invalidly declared function type", x);
2883           type = build_pointer_type (type);
2884           TREE_TYPE (x) = type;
2885         }
2886       else if (TREE_CODE (type) == METHOD_TYPE)
2887         {
2888           cp_error_at ("field %qD invalidly declared method type", x);
2889           type = build_pointer_type (type);
2890           TREE_TYPE (x) = type;
2891         }
2892
2893       if (type == error_mark_node)
2894         continue;
2895           
2896       if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL)
2897         continue;
2898
2899       /* Now it can only be a FIELD_DECL.  */
2900
2901       if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
2902         CLASSTYPE_NON_AGGREGATE (t) = 1;
2903
2904       /* If this is of reference type, check if it needs an init.
2905          Also do a little ANSI jig if necessary.  */
2906       if (TREE_CODE (type) == REFERENCE_TYPE)
2907         {
2908           CLASSTYPE_NON_POD_P (t) = 1;
2909           if (DECL_INITIAL (x) == NULL_TREE)
2910             SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
2911
2912           /* ARM $12.6.2: [A member initializer list] (or, for an
2913              aggregate, initialization by a brace-enclosed list) is the
2914              only way to initialize nonstatic const and reference
2915              members.  */
2916           *cant_have_default_ctor_p = 1;
2917           TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
2918
2919           if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2920               && extra_warnings)
2921             cp_warning_at ("non-static reference %q#D in class without a constructor", x);
2922         }
2923
2924       type = strip_array_types (type);
2925
2926       /* This is used by -Weffc++ (see below). Warn only for pointers
2927          to members which might hold dynamic memory. So do not warn
2928          for pointers to functions or pointers to members.  */
2929       if (TYPE_PTR_P (type)
2930           && !TYPE_PTRFN_P (type)
2931           && !TYPE_PTR_TO_MEMBER_P (type))
2932         has_pointers = true;
2933
2934       if (CLASS_TYPE_P (type))
2935         {
2936           if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
2937             SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
2938           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
2939             SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
2940         }
2941
2942       if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
2943         CLASSTYPE_HAS_MUTABLE (t) = 1;
2944
2945       if (! pod_type_p (type))
2946         /* DR 148 now allows pointers to members (which are POD themselves),
2947            to be allowed in POD structs.  */
2948         CLASSTYPE_NON_POD_P (t) = 1;
2949
2950       if (! zero_init_p (type))
2951         CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
2952
2953       /* If any field is const, the structure type is pseudo-const.  */
2954       if (CP_TYPE_CONST_P (type))
2955         {
2956           C_TYPE_FIELDS_READONLY (t) = 1;
2957           if (DECL_INITIAL (x) == NULL_TREE)
2958             SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
2959
2960           /* ARM $12.6.2: [A member initializer list] (or, for an
2961              aggregate, initialization by a brace-enclosed list) is the
2962              only way to initialize nonstatic const and reference
2963              members.  */
2964           *cant_have_default_ctor_p = 1;
2965           TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
2966
2967           if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2968               && extra_warnings)
2969             cp_warning_at ("non-static const member %q#D in class without a constructor", x);
2970         }
2971       /* A field that is pseudo-const makes the structure likewise.  */
2972       else if (CLASS_TYPE_P (type))
2973         {
2974           C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
2975           SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
2976             CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
2977             | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
2978         }
2979
2980       /* Core issue 80: A nonstatic data member is required to have a
2981          different name from the class iff the class has a
2982          user-defined constructor.  */
2983       if (constructor_name_p (DECL_NAME (x), t) && TYPE_HAS_CONSTRUCTOR (t))
2984         cp_pedwarn_at ("field %q#D with same name as class", x);
2985
2986       /* We set DECL_C_BIT_FIELD in grokbitfield.
2987          If the type and width are valid, we'll also set DECL_BIT_FIELD.  */
2988       if (DECL_C_BIT_FIELD (x))
2989         check_bitfield_decl (x);
2990       else
2991         check_field_decl (x, t,
2992                           cant_have_const_ctor_p,
2993                           cant_have_default_ctor_p, 
2994                           no_const_asn_ref_p,
2995                           &any_default_members);
2996     }
2997
2998   /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
2999      it should also define a copy constructor and an assignment operator to
3000      implement the correct copy semantic (deep vs shallow, etc.). As it is
3001      not feasible to check whether the constructors do allocate dynamic memory
3002      and store it within members, we approximate the warning like this:
3003
3004      -- Warn only if there are members which are pointers
3005      -- Warn only if there is a non-trivial constructor (otherwise,
3006         there cannot be memory allocated).
3007      -- Warn only if there is a non-trivial destructor. We assume that the
3008         user at least implemented the cleanup correctly, and a destructor
3009         is needed to free dynamic memory.
3010         
3011      This seems enough for practical purposes.  */
3012     if (warn_ecpp
3013         && has_pointers
3014         && TYPE_HAS_CONSTRUCTOR (t)
3015         && TYPE_HAS_DESTRUCTOR (t)
3016         && !(TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
3017     {
3018       warning ("%q#T has pointer data members", t);
3019       
3020       if (! TYPE_HAS_INIT_REF (t))
3021         {
3022           warning ("  but does not override %<%T(const %T&)%>", t, t);
3023           if (! TYPE_HAS_ASSIGN_REF (t))
3024             warning ("  or %<operator=(const %T&)%>", t);
3025         }
3026       else if (! TYPE_HAS_ASSIGN_REF (t))
3027         warning ("  but does not override %<operator=(const %T&)%>", t);
3028     }
3029
3030
3031   /* Check anonymous struct/anonymous union fields.  */
3032   finish_struct_anon (t);
3033
3034   /* We've built up the list of access declarations in reverse order.
3035      Fix that now.  */
3036   *access_decls = nreverse (*access_decls);
3037 }
3038
3039 /* If TYPE is an empty class type, records its OFFSET in the table of
3040    OFFSETS.  */
3041
3042 static int
3043 record_subobject_offset (tree type, tree offset, splay_tree offsets)
3044 {
3045   splay_tree_node n;
3046
3047   if (!is_empty_class (type))
3048     return 0;
3049
3050   /* Record the location of this empty object in OFFSETS.  */
3051   n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3052   if (!n)
3053     n = splay_tree_insert (offsets, 
3054                            (splay_tree_key) offset,
3055                            (splay_tree_value) NULL_TREE);
3056   n->value = ((splay_tree_value) 
3057               tree_cons (NULL_TREE,
3058                          type,
3059                          (tree) n->value));
3060
3061   return 0;
3062 }
3063
3064 /* Returns nonzero if TYPE is an empty class type and there is
3065    already an entry in OFFSETS for the same TYPE as the same OFFSET.  */
3066
3067 static int
3068 check_subobject_offset (tree type, tree offset, splay_tree offsets)
3069 {
3070   splay_tree_node n;
3071   tree t;
3072
3073   if (!is_empty_class (type))
3074     return 0;
3075
3076   /* Record the location of this empty object in OFFSETS.  */
3077   n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3078   if (!n)
3079     return 0;
3080
3081   for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3082     if (same_type_p (TREE_VALUE (t), type))
3083       return 1;
3084
3085   return 0;
3086 }
3087
3088 /* Walk through all the subobjects of TYPE (located at OFFSET).  Call
3089    F for every subobject, passing it the type, offset, and table of
3090    OFFSETS.  If VBASES_P is one, then virtual non-primary bases should
3091    be traversed.
3092
3093    If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3094    than MAX_OFFSET will not be walked.
3095
3096    If F returns a nonzero value, the traversal ceases, and that value
3097    is returned.  Otherwise, returns zero.  */
3098
3099 static int
3100 walk_subobject_offsets (tree type, 
3101                         subobject_offset_fn f, 
3102                         tree offset, 
3103                         splay_tree offsets, 
3104                         tree max_offset, 
3105                         int vbases_p)
3106 {
3107   int r = 0;
3108   tree type_binfo = NULL_TREE;
3109
3110   /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3111      stop.  */
3112   if (max_offset && INT_CST_LT (max_offset, offset))
3113     return 0;
3114
3115   if (!TYPE_P (type)) 
3116     {
3117       if (abi_version_at_least (2))
3118         type_binfo = type;
3119       type = BINFO_TYPE (type);
3120     }
3121
3122   if (CLASS_TYPE_P (type))
3123     {
3124       tree field;
3125       tree binfo;
3126       int i;
3127
3128       /* Avoid recursing into objects that are not interesting.  */
3129       if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3130         return 0;
3131
3132       /* Record the location of TYPE.  */
3133       r = (*f) (type, offset, offsets);
3134       if (r)
3135         return r;
3136
3137       /* Iterate through the direct base classes of TYPE.  */
3138       if (!type_binfo)
3139         type_binfo = TYPE_BINFO (type);
3140       for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
3141         {
3142           tree binfo_offset;
3143
3144           if (abi_version_at_least (2) 
3145               && BINFO_VIRTUAL_P (binfo))
3146             continue;
3147
3148           if (!vbases_p 
3149               && BINFO_VIRTUAL_P (binfo) 
3150               && !BINFO_PRIMARY_P (binfo))
3151             continue;
3152
3153           if (!abi_version_at_least (2))
3154             binfo_offset = size_binop (PLUS_EXPR,
3155                                        offset,
3156                                        BINFO_OFFSET (binfo));
3157           else
3158             {
3159               tree orig_binfo;
3160               /* We cannot rely on BINFO_OFFSET being set for the base
3161                  class yet, but the offsets for direct non-virtual
3162                  bases can be calculated by going back to the TYPE.  */
3163               orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
3164               binfo_offset = size_binop (PLUS_EXPR,           
3165                                          offset,
3166                                          BINFO_OFFSET (orig_binfo));
3167             }
3168
3169           r = walk_subobject_offsets (binfo,
3170                                       f,
3171                                       binfo_offset,
3172                                       offsets,
3173                                       max_offset,
3174                                       (abi_version_at_least (2) 
3175                                        ? /*vbases_p=*/0 : vbases_p));
3176           if (r)
3177             return r;
3178         }
3179
3180       if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
3181         {
3182           unsigned ix;
3183           VEC (tree) *vbases;
3184
3185           /* Iterate through the virtual base classes of TYPE.  In G++
3186              3.2, we included virtual bases in the direct base class
3187              loop above, which results in incorrect results; the
3188              correct offsets for virtual bases are only known when
3189              working with the most derived type.  */
3190           if (vbases_p)
3191             for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
3192                  VEC_iterate (tree, vbases, ix, binfo); ix++)
3193               {
3194                 r = walk_subobject_offsets (binfo,
3195                                             f,
3196                                             size_binop (PLUS_EXPR,
3197                                                         offset,
3198                                                         BINFO_OFFSET (binfo)),
3199                                             offsets,
3200                                             max_offset,
3201                                             /*vbases_p=*/0);
3202                 if (r)
3203                   return r;
3204               }
3205           else
3206             {
3207               /* We still have to walk the primary base, if it is
3208                  virtual.  (If it is non-virtual, then it was walked
3209                  above.)  */
3210               tree vbase = get_primary_binfo (type_binfo);
3211               
3212               if (vbase && BINFO_VIRTUAL_P (vbase)
3213                   && BINFO_PRIMARY_P (vbase)
3214                   && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
3215                 {
3216                   r = (walk_subobject_offsets 
3217                        (vbase, f, offset,
3218                         offsets, max_offset, /*vbases_p=*/0));
3219                   if (r)
3220                     return r;
3221                 }
3222             }
3223         }
3224
3225       /* Iterate through the fields of TYPE.  */
3226       for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3227         if (TREE_CODE (field) == FIELD_DECL && !DECL_ARTIFICIAL (field))
3228           {
3229             tree field_offset;
3230
3231             if (abi_version_at_least (2))
3232               field_offset = byte_position (field);
3233             else
3234               /* In G++ 3.2, DECL_FIELD_OFFSET was used.  */
3235               field_offset = DECL_FIELD_OFFSET (field);
3236
3237             r = walk_subobject_offsets (TREE_TYPE (field),
3238                                         f,
3239                                         size_binop (PLUS_EXPR,
3240                                                     offset,
3241                                                     field_offset),
3242                                         offsets,
3243                                         max_offset,
3244                                         /*vbases_p=*/1);
3245             if (r)
3246               return r;
3247           }
3248     }
3249   else if (TREE_CODE (type) == ARRAY_TYPE)
3250     {
3251       tree element_type = strip_array_types (type);
3252       tree domain = TYPE_DOMAIN (type);
3253       tree index;
3254
3255       /* Avoid recursing into objects that are not interesting.  */
3256       if (!CLASS_TYPE_P (element_type)
3257           || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3258         return 0;
3259
3260       /* Step through each of the elements in the array.  */
3261       for (index = size_zero_node;
3262            /* G++ 3.2 had an off-by-one error here.  */
3263            (abi_version_at_least (2) 
3264             ? !INT_CST_LT (TYPE_MAX_VALUE (domain), index)
3265             : INT_CST_LT (index, TYPE_MAX_VALUE (domain)));
3266            index = size_binop (PLUS_EXPR, index, size_one_node))
3267         {
3268           r = walk_subobject_offsets (TREE_TYPE (type),
3269                                       f,
3270                                       offset,
3271                                       offsets,
3272                                       max_offset,
3273                                       /*vbases_p=*/1);
3274           if (r)
3275             return r;
3276           offset = size_binop (PLUS_EXPR, offset, 
3277                                TYPE_SIZE_UNIT (TREE_TYPE (type)));
3278           /* If this new OFFSET is bigger than the MAX_OFFSET, then
3279              there's no point in iterating through the remaining
3280              elements of the array.  */
3281           if (max_offset && INT_CST_LT (max_offset, offset))
3282             break;
3283         }
3284     }
3285
3286   return 0;
3287 }
3288
3289 /* Record all of the empty subobjects of TYPE (located at OFFSET) in
3290    OFFSETS.  If VBASES_P is nonzero, virtual bases of TYPE are
3291    examined.  */
3292
3293 static void
3294 record_subobject_offsets (tree type, 
3295                           tree offset, 
3296                           splay_tree offsets, 
3297                           int vbases_p)
3298 {
3299   walk_subobject_offsets (type, record_subobject_offset, offset,
3300                           offsets, /*max_offset=*/NULL_TREE, vbases_p);
3301 }
3302
3303 /* Returns nonzero if any of the empty subobjects of TYPE (located at
3304    OFFSET) conflict with entries in OFFSETS.  If VBASES_P is nonzero,
3305    virtual bases of TYPE are examined.  */
3306
3307 static int
3308 layout_conflict_p (tree type,
3309                    tree offset, 
3310                    splay_tree offsets, 
3311                    int vbases_p)
3312 {
3313   splay_tree_node max_node;
3314
3315   /* Get the node in OFFSETS that indicates the maximum offset where
3316      an empty subobject is located.  */
3317   max_node = splay_tree_max (offsets);
3318   /* If there aren't any empty subobjects, then there's no point in
3319      performing this check.  */
3320   if (!max_node)
3321     return 0;
3322
3323   return walk_subobject_offsets (type, check_subobject_offset, offset,
3324                                  offsets, (tree) (max_node->key),
3325                                  vbases_p);
3326 }
3327
3328 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
3329    non-static data member of the type indicated by RLI.  BINFO is the
3330    binfo corresponding to the base subobject, OFFSETS maps offsets to
3331    types already located at those offsets.  This function determines
3332    the position of the DECL.  */
3333
3334 static void
3335 layout_nonempty_base_or_field (record_layout_info rli, 
3336                                tree decl, 
3337                                tree binfo, 
3338                                splay_tree offsets)
3339 {
3340   tree offset = NULL_TREE;
3341   bool field_p;
3342   tree type;
3343   
3344   if (binfo)
3345     {
3346       /* For the purposes of determining layout conflicts, we want to
3347          use the class type of BINFO; TREE_TYPE (DECL) will be the
3348          CLASSTYPE_AS_BASE version, which does not contain entries for
3349          zero-sized bases.  */
3350       type = TREE_TYPE (binfo);
3351       field_p = false;
3352     }
3353   else
3354     {
3355       type = TREE_TYPE (decl);
3356       field_p = true;
3357     }
3358
3359   /* Try to place the field.  It may take more than one try if we have
3360      a hard time placing the field without putting two objects of the
3361      same type at the same address.  */
3362   while (1)
3363     {
3364       struct record_layout_info_s old_rli = *rli;
3365
3366       /* Place this field.  */
3367       place_field (rli, decl);
3368       offset = byte_position (decl);
3369
3370       /* We have to check to see whether or not there is already
3371          something of the same type at the offset we're about to use.
3372          For example, consider:
3373          
3374            struct S {};
3375            struct T : public S { int i; };
3376            struct U : public S, public T {};
3377          
3378          Here, we put S at offset zero in U.  Then, we can't put T at
3379          offset zero -- its S component would be at the same address
3380          as the S we already allocated.  So, we have to skip ahead.
3381          Since all data members, including those whose type is an
3382          empty class, have nonzero size, any overlap can happen only
3383          with a direct or indirect base-class -- it can't happen with
3384          a data member.  */
3385       /* In a union, overlap is permitted; all members are placed at
3386          offset zero.  */
3387       if (TREE_CODE (rli->t) == UNION_TYPE)
3388         break;
3389       /* G++ 3.2 did not check for overlaps when placing a non-empty
3390          virtual base.  */
3391       if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
3392         break;
3393       if (layout_conflict_p (field_p ? type : binfo, offset, 
3394                              offsets, field_p))
3395         {
3396           /* Strip off the size allocated to this field.  That puts us
3397              at the first place we could have put the field with
3398              proper alignment.  */
3399           *rli = old_rli;
3400
3401           /* Bump up by the alignment required for the type.  */
3402           rli->bitpos
3403             = size_binop (PLUS_EXPR, rli->bitpos, 
3404                           bitsize_int (binfo 
3405                                        ? CLASSTYPE_ALIGN (type)
3406                                        : TYPE_ALIGN (type)));
3407           normalize_rli (rli);
3408         }
3409       else
3410         /* There was no conflict.  We're done laying out this field.  */
3411         break;
3412     }
3413
3414   /* Now that we know where it will be placed, update its
3415      BINFO_OFFSET.  */
3416   if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
3417     /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
3418        this point because their BINFO_OFFSET is copied from another
3419        hierarchy.  Therefore, we may not need to add the entire
3420        OFFSET.  */
3421     propagate_binfo_offsets (binfo, 
3422                              size_diffop (convert (ssizetype, offset),
3423                                           convert (ssizetype, 
3424                                                    BINFO_OFFSET (binfo))));
3425 }
3426
3427 /* Returns true if TYPE is empty and OFFSET is nonzero.  */
3428
3429 static int
3430 empty_base_at_nonzero_offset_p (tree type,
3431                                 tree offset,
3432                                 splay_tree offsets ATTRIBUTE_UNUSED)
3433 {
3434   return is_empty_class (type) && !integer_zerop (offset);
3435 }
3436
3437 /* Layout the empty base BINFO.  EOC indicates the byte currently just
3438    past the end of the class, and should be correctly aligned for a
3439    class of the type indicated by BINFO; OFFSETS gives the offsets of
3440    the empty bases allocated so far. T is the most derived
3441    type.  Return nonzero iff we added it at the end.  */
3442
3443 static bool
3444 layout_empty_base (tree binfo, tree eoc, splay_tree offsets)
3445 {
3446   tree alignment;
3447   tree basetype = BINFO_TYPE (binfo);
3448   bool atend = false;
3449
3450   /* This routine should only be used for empty classes.  */
3451   gcc_assert (is_empty_class (basetype));
3452   alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
3453
3454   if (!integer_zerop (BINFO_OFFSET (binfo)))
3455     {
3456       if (abi_version_at_least (2))
3457         propagate_binfo_offsets
3458           (binfo, size_diffop (size_zero_node, BINFO_OFFSET (binfo)));
3459       else if (warn_abi)
3460         warning ("offset of empty base %qT may not be ABI-compliant and may"
3461                  "change in a future version of GCC",
3462                  BINFO_TYPE (binfo));
3463     }
3464   
3465   /* This is an empty base class.  We first try to put it at offset
3466      zero.  */
3467   if (layout_conflict_p (binfo,
3468                          BINFO_OFFSET (binfo),
3469                          offsets, 
3470                          /*vbases_p=*/0))
3471     {
3472       /* That didn't work.  Now, we move forward from the next
3473          available spot in the class.  */
3474       atend = true;
3475       propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
3476       while (1) 
3477         {
3478           if (!layout_conflict_p (binfo,
3479                                   BINFO_OFFSET (binfo), 
3480                                   offsets,
3481                                   /*vbases_p=*/0))
3482             /* We finally found a spot where there's no overlap.  */
3483             break;
3484
3485           /* There's overlap here, too.  Bump along to the next spot.  */
3486           propagate_binfo_offsets (binfo, alignment);
3487         }
3488     }
3489   return atend;
3490 }
3491
3492 /* Layout the the base given by BINFO in the class indicated by RLI.
3493    *BASE_ALIGN is a running maximum of the alignments of
3494    any base class.  OFFSETS gives the location of empty base
3495    subobjects.  T is the most derived type.  Return nonzero if the new
3496    object cannot be nearly-empty.  A new FIELD_DECL is inserted at
3497    *NEXT_FIELD, unless BINFO is for an empty base class.  
3498
3499    Returns the location at which the next field should be inserted.  */
3500
3501 static tree *
3502 build_base_field (record_layout_info rli, tree binfo,
3503                   splay_tree offsets, tree *next_field)
3504 {
3505   tree t = rli->t;
3506   tree basetype = BINFO_TYPE (binfo);
3507
3508   if (!COMPLETE_TYPE_P (basetype))
3509     /* This error is now reported in xref_tag, thus giving better
3510        location information.  */
3511     return next_field;
3512   
3513   /* Place the base class.  */
3514   if (!is_empty_class (basetype))
3515     {
3516       tree decl;
3517
3518       /* The containing class is non-empty because it has a non-empty
3519          base class.  */
3520       CLASSTYPE_EMPTY_P (t) = 0;
3521       
3522       /* Create the FIELD_DECL.  */
3523       decl = build_decl (FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
3524       DECL_ARTIFICIAL (decl) = 1;
3525       DECL_IGNORED_P (decl) = 1;
3526       DECL_FIELD_CONTEXT (decl) = t;
3527       DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3528       DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3529       DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3530       DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
3531       DECL_MODE (decl) = TYPE_MODE (basetype);
3532       DECL_FIELD_IS_BASE (decl) = 1;
3533
3534       /* Try to place the field.  It may take more than one try if we
3535          have a hard time placing the field without putting two
3536          objects of the same type at the same address.  */
3537       layout_nonempty_base_or_field (rli, decl, binfo, offsets);
3538       /* Add the new FIELD_DECL to the list of fields for T.  */
3539       TREE_CHAIN (decl) = *next_field;
3540       *next_field = decl;
3541       next_field = &TREE_CHAIN (decl);
3542     }
3543   else
3544     {
3545       tree eoc;
3546       bool atend;
3547
3548       /* On some platforms (ARM), even empty classes will not be
3549          byte-aligned.  */
3550       eoc = round_up (rli_size_unit_so_far (rli),
3551                       CLASSTYPE_ALIGN_UNIT (basetype));
3552       atend = layout_empty_base (binfo, eoc, offsets);
3553       /* A nearly-empty class "has no proper base class that is empty,
3554          not morally virtual, and at an offset other than zero."  */
3555       if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
3556         {
3557           if (atend)
3558             CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3559           /* The check above (used in G++ 3.2) is insufficient  because
3560              an empty class placed at offset zero might itself have an
3561              empty base at a nonzero offset.  */
3562           else if (walk_subobject_offsets (basetype, 
3563                                            empty_base_at_nonzero_offset_p,
3564                                            size_zero_node,
3565                                            /*offsets=*/NULL,
3566                                            /*max_offset=*/NULL_TREE,
3567                                            /*vbases_p=*/true))
3568             {
3569               if (abi_version_at_least (2))
3570                 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3571               else if (warn_abi)
3572                 warning ("class %qT will be considered nearly empty in a "
3573                          "future version of GCC", t);
3574             }
3575         }
3576         
3577       /* We do not create a FIELD_DECL for empty base classes because
3578          it might overlap some other field.  We want to be able to
3579          create CONSTRUCTORs for the class by iterating over the
3580          FIELD_DECLs, and the back end does not handle overlapping
3581          FIELD_DECLs.  */
3582
3583       /* An empty virtual base causes a class to be non-empty
3584          -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
3585          here because that was already done when the virtual table
3586          pointer was created.  */
3587     }
3588
3589   /* Record the offsets of BINFO and its base subobjects.  */
3590   record_subobject_offsets (binfo,
3591                             BINFO_OFFSET (binfo),
3592                             offsets, 
3593                             /*vbases_p=*/0);
3594
3595   return next_field;
3596 }
3597
3598 /* Layout all of the non-virtual base classes.  Record empty
3599    subobjects in OFFSETS.  T is the most derived type.  Return nonzero
3600    if the type cannot be nearly empty.  The fields created
3601    corresponding to the base classes will be inserted at
3602    *NEXT_FIELD.  */
3603
3604 static void
3605 build_base_fields (record_layout_info rli,
3606                    splay_tree offsets, tree *next_field)
3607 {
3608   /* Chain to hold all the new FIELD_DECLs which stand in for base class
3609      subobjects.  */
3610   tree t = rli->t;
3611   int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
3612   int i;
3613
3614   /* The primary base class is always allocated first.  */
3615   if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
3616     next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
3617                                    offsets, next_field);
3618
3619   /* Now allocate the rest of the bases.  */
3620   for (i = 0; i < n_baseclasses; ++i)
3621     {
3622       tree base_binfo;
3623
3624       base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
3625
3626       /* The primary base was already allocated above, so we don't
3627          need to allocate it again here.  */
3628       if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
3629         continue;
3630
3631       /* Virtual bases are added at the end (a primary virtual base
3632          will have already been added).  */
3633       if (BINFO_VIRTUAL_P (base_binfo))
3634         continue;
3635
3636       next_field = build_base_field (rli, base_binfo,
3637                                      offsets, next_field);
3638     }
3639 }
3640
3641 /* Go through the TYPE_METHODS of T issuing any appropriate
3642    diagnostics, figuring out which methods override which other
3643    methods, and so forth.  */
3644
3645 static void
3646 check_methods (tree t)
3647 {
3648   tree x;
3649
3650   for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
3651     {
3652       check_for_override (x, t);
3653       if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
3654         cp_error_at ("initializer specified for non-virtual method %qD", x);
3655       /* The name of the field is the original field name
3656          Save this in auxiliary field for later overloading.  */
3657       if (DECL_VINDEX (x))
3658         {
3659           TYPE_POLYMORPHIC_P (t) = 1;
3660           if (DECL_PURE_VIRTUAL_P (x))
3661             VEC_safe_push (tree, CLASSTYPE_PURE_VIRTUALS (t), x);
3662         }
3663     }
3664 }
3665
3666 /* FN is a constructor or destructor.  Clone the declaration to create
3667    a specialized in-charge or not-in-charge version, as indicated by
3668    NAME.  */
3669
3670 static tree
3671 build_clone (tree fn, tree name)
3672 {
3673   tree parms;
3674   tree clone;
3675
3676   /* Copy the function.  */
3677   clone = copy_decl (fn);
3678   /* Remember where this function came from.  */
3679   DECL_CLONED_FUNCTION (clone) = fn;
3680   DECL_ABSTRACT_ORIGIN (clone) = fn;
3681   /* Reset the function name.  */
3682   DECL_NAME (clone) = name;
3683   SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
3684   /* There's no pending inline data for this function.  */
3685   DECL_PENDING_INLINE_INFO (clone) = NULL;
3686   DECL_PENDING_INLINE_P (clone) = 0;
3687   /* And it hasn't yet been deferred.  */
3688   DECL_DEFERRED_FN (clone) = 0;
3689
3690   /* The base-class destructor is not virtual.  */
3691   if (name == base_dtor_identifier)
3692     {
3693       DECL_VIRTUAL_P (clone) = 0;
3694       if (TREE_CODE (clone) != TEMPLATE_DECL)
3695         DECL_VINDEX (clone) = NULL_TREE;
3696     }
3697
3698   /* If there was an in-charge parameter, drop it from the function
3699      type.  */
3700   if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3701     {
3702       tree basetype;
3703       tree parmtypes;
3704       tree exceptions;
3705
3706       exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3707       basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3708       parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
3709       /* Skip the `this' parameter.  */
3710       parmtypes = TREE_CHAIN (parmtypes);
3711       /* Skip the in-charge parameter.  */
3712       parmtypes = TREE_CHAIN (parmtypes);
3713       /* And the VTT parm, in a complete [cd]tor.  */
3714       if (DECL_HAS_VTT_PARM_P (fn)
3715           && ! DECL_NEEDS_VTT_PARM_P (clone))
3716         parmtypes = TREE_CHAIN (parmtypes);
3717        /* If this is subobject constructor or destructor, add the vtt
3718          parameter.  */
3719       TREE_TYPE (clone) 
3720         = build_method_type_directly (basetype,
3721                                       TREE_TYPE (TREE_TYPE (clone)),
3722                                       parmtypes);
3723       if (exceptions)
3724         TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
3725                                                      exceptions);
3726       TREE_TYPE (clone) 
3727         = cp_build_type_attribute_variant (TREE_TYPE (clone),
3728                                            TYPE_ATTRIBUTES (TREE_TYPE (fn)));
3729     }
3730
3731   /* Copy the function parameters.  But, DECL_ARGUMENTS on a TEMPLATE_DECL
3732      aren't function parameters; those are the template parameters.  */
3733   if (TREE_CODE (clone) != TEMPLATE_DECL)
3734     {
3735       DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
3736       /* Remove the in-charge parameter.  */
3737       if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3738         {
3739           TREE_CHAIN (DECL_ARGUMENTS (clone))
3740             = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3741           DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
3742         }
3743       /* And the VTT parm, in a complete [cd]tor.  */
3744       if (DECL_HAS_VTT_PARM_P (fn))
3745         {
3746           if (DECL_NEEDS_VTT_PARM_P (clone))
3747             DECL_HAS_VTT_PARM_P (clone) = 1;
3748           else
3749             {
3750               TREE_CHAIN (DECL_ARGUMENTS (clone))
3751                 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3752               DECL_HAS_VTT_PARM_P (clone) = 0;
3753             }
3754         }
3755
3756       for (parms = DECL_ARGUMENTS (clone); parms; parms = TREE_CHAIN (parms))
3757         {
3758           DECL_CONTEXT (parms) = clone;
3759           cxx_dup_lang_specific_decl (parms);
3760         }
3761     }
3762
3763   /* Create the RTL for this function.  */
3764   SET_DECL_RTL (clone, NULL_RTX);
3765   rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
3766   
3767   /* Make it easy to find the CLONE given the FN.  */
3768   TREE_CHAIN (clone) = TREE_CHAIN (fn);
3769   TREE_CHAIN (fn) = clone;
3770
3771   /* If this is a template, handle the DECL_TEMPLATE_RESULT as well.  */
3772   if (TREE_CODE (clone) == TEMPLATE_DECL)
3773     {
3774       tree result;
3775
3776       DECL_TEMPLATE_RESULT (clone) 
3777         = build_clone (DECL_TEMPLATE_RESULT (clone), name);
3778       result = DECL_TEMPLATE_RESULT (clone);
3779       DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
3780       DECL_TI_TEMPLATE (result) = clone;
3781     }
3782   else if (pch_file)
3783     note_decl_for_pch (clone);
3784
3785   return clone;
3786 }
3787
3788 /* Produce declarations for all appropriate clones of FN.  If
3789    UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
3790    CLASTYPE_METHOD_VEC as well.  */
3791
3792 void
3793 clone_function_decl (tree fn, int update_method_vec_p)
3794 {
3795   tree clone;
3796
3797   /* Avoid inappropriate cloning.  */
3798   if (TREE_CHAIN (fn)
3799       && DECL_CLONED_FUNCTION (TREE_CHAIN (fn)))
3800     return;
3801
3802   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
3803     {
3804       /* For each constructor, we need two variants: an in-charge version
3805          and a not-in-charge version.  */
3806       clone = build_clone (fn, complete_ctor_identifier);
3807       if (update_method_vec_p)
3808         add_method (DECL_CONTEXT (clone), clone);
3809       clone = build_clone (fn, base_ctor_identifier);
3810       if (update_method_vec_p)
3811         add_method (DECL_CONTEXT (clone), clone);
3812     }
3813   else
3814     {
3815       gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
3816
3817       /* For each destructor, we need three variants: an in-charge
3818          version, a not-in-charge version, and an in-charge deleting
3819          version.  We clone the deleting version first because that
3820          means it will go second on the TYPE_METHODS list -- and that
3821          corresponds to the correct layout order in the virtual
3822          function table.  
3823
3824          For a non-virtual destructor, we do not build a deleting
3825          destructor.  */
3826       if (DECL_VIRTUAL_P (fn))
3827         {
3828           clone = build_clone (fn, deleting_dtor_identifier);
3829           if (update_method_vec_p)
3830             add_method (DECL_CONTEXT (clone), clone);
3831         }
3832       clone = build_clone (fn, complete_dtor_identifier);
3833       if (update_method_vec_p)
3834         add_method (DECL_CONTEXT (clone), clone);
3835       clone = build_clone (fn, base_dtor_identifier);
3836       if (update_method_vec_p)
3837         add_method (DECL_CONTEXT (clone), clone);
3838     }
3839
3840   /* Note that this is an abstract function that is never emitted.  */
3841   DECL_ABSTRACT (fn) = 1;
3842 }
3843
3844 /* DECL is an in charge constructor, which is being defined. This will
3845    have had an in class declaration, from whence clones were
3846    declared. An out-of-class definition can specify additional default
3847    arguments. As it is the clones that are involved in overload
3848    resolution, we must propagate the information from the DECL to its
3849    clones.  */
3850
3851 void
3852 adjust_clone_args (tree decl)
3853 {
3854   tree clone;
3855   
3856   for (clone = TREE_CHAIN (decl); clone && DECL_CLONED_FUNCTION (clone);
3857        clone = TREE_CHAIN (clone))
3858     {
3859       tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
3860       tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
3861       tree decl_parms, clone_parms;
3862
3863       clone_parms = orig_clone_parms;
3864       
3865       /* Skip the 'this' parameter.  */
3866       orig_clone_parms = TREE_CHAIN (orig_clone_parms);
3867       orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3868
3869       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
3870         orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3871       if (DECL_HAS_VTT_PARM_P (decl))
3872         orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3873       
3874       clone_parms = orig_clone_parms;
3875       if (DECL_HAS_VTT_PARM_P (clone))
3876         clone_parms = TREE_CHAIN (clone_parms);
3877       
3878       for (decl_parms = orig_decl_parms; decl_parms;
3879            decl_parms = TREE_CHAIN (decl_parms),
3880              clone_parms = TREE_CHAIN (clone_parms))
3881         {
3882           gcc_assert (same_type_p (TREE_TYPE (decl_parms),
3883                                    TREE_TYPE (clone_parms)));
3884           
3885           if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
3886             {
3887               /* A default parameter has been added. Adjust the
3888                  clone's parameters.  */
3889               tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3890               tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3891               tree type;
3892
3893               clone_parms = orig_decl_parms;
3894
3895               if (DECL_HAS_VTT_PARM_P (clone))
3896                 {
3897                   clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
3898                                            TREE_VALUE (orig_clone_parms),
3899                                            clone_parms);
3900                   TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
3901                 }
3902               type = build_method_type_directly (basetype,
3903                                                  TREE_TYPE (TREE_TYPE (clone)),
3904                                                  clone_parms);
3905               if (exceptions)
3906                 type = build_exception_variant (type, exceptions);
3907               TREE_TYPE (clone) = type;
3908               
3909               clone_parms = NULL_TREE;
3910               break;
3911             }
3912         }
3913       gcc_assert (!clone_parms);
3914     }
3915 }
3916
3917 /* For each of the constructors and destructors in T, create an
3918    in-charge and not-in-charge variant.  */
3919
3920 static void
3921 clone_constructors_and_destructors (tree t)
3922 {
3923   tree fns;
3924
3925   /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
3926      out now.  */
3927   if (!CLASSTYPE_METHOD_VEC (t))
3928     return;
3929
3930   for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3931     clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
3932   for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3933     clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
3934 }
3935
3936 /* Remove all zero-width bit-fields from T.  */
3937
3938 static void
3939 remove_zero_width_bit_fields (tree t)
3940 {
3941   tree *fieldsp;
3942
3943   fieldsp = &TYPE_FIELDS (t); 
3944   while (*fieldsp)
3945     {
3946       if (TREE_CODE (*fieldsp) == FIELD_DECL
3947           && DECL_C_BIT_FIELD (*fieldsp) 
3948           && DECL_INITIAL (*fieldsp))
3949         *fieldsp = TREE_CHAIN (*fieldsp);
3950       else
3951         fieldsp = &TREE_CHAIN (*fieldsp);
3952     }
3953 }
3954
3955 /* Returns TRUE iff we need a cookie when dynamically allocating an
3956    array whose elements have the indicated class TYPE.  */
3957
3958 static bool
3959 type_requires_array_cookie (tree type)
3960 {
3961   tree fns;
3962   bool has_two_argument_delete_p = false;
3963
3964   gcc_assert (CLASS_TYPE_P (type));
3965
3966   /* If there's a non-trivial destructor, we need a cookie.  In order
3967      to iterate through the array calling the destructor for each
3968      element, we'll have to know how many elements there are.  */
3969   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3970     return true;
3971
3972   /* If the usual deallocation function is a two-argument whose second
3973      argument is of type `size_t', then we have to pass the size of
3974      the array to the deallocation function, so we will need to store
3975      a cookie.  */
3976   fns = lookup_fnfields (TYPE_BINFO (type), 
3977                          ansi_opname (VEC_DELETE_EXPR),
3978                          /*protect=*/0);
3979   /* If there are no `operator []' members, or the lookup is
3980      ambiguous, then we don't need a cookie.  */
3981   if (!fns || fns == error_mark_node)
3982     return false;
3983   /* Loop through all of the functions.  */
3984   for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
3985     {
3986       tree fn;
3987       tree second_parm;
3988
3989       /* Select the current function.  */
3990       fn = OVL_CURRENT (fns);
3991       /* See if this function is a one-argument delete function.  If
3992          it is, then it will be the usual deallocation function.  */
3993       second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
3994       if (second_parm == void_list_node)
3995         return false;
3996       /* Otherwise, if we have a two-argument function and the second
3997          argument is `size_t', it will be the usual deallocation
3998          function -- unless there is one-argument function, too.  */
3999       if (TREE_CHAIN (second_parm) == void_list_node
4000           && same_type_p (TREE_VALUE (second_parm), sizetype))
4001         has_two_argument_delete_p = true;
4002     }
4003
4004   return has_two_argument_delete_p;
4005 }
4006
4007 /* Check the validity of the bases and members declared in T.  Add any
4008    implicitly-generated functions (like copy-constructors and
4009    assignment operators).  Compute various flag bits (like
4010    CLASSTYPE_NON_POD_T) for T.  This routine works purely at the C++
4011    level: i.e., independently of the ABI in use.  */
4012
4013 static void
4014 check_bases_and_members (tree t)
4015 {
4016   /* Nonzero if we are not allowed to generate a default constructor
4017      for this case.  */
4018   int cant_have_default_ctor;
4019   /* Nonzero if the implicitly generated copy constructor should take
4020      a non-const reference argument.  */
4021   int cant_have_const_ctor;
4022   /* Nonzero if the the implicitly generated assignment operator
4023      should take a non-const reference argument.  */
4024   int no_const_asn_ref;
4025   tree access_decls;
4026
4027   /* By default, we use const reference arguments and generate default
4028      constructors.  */
4029   cant_have_default_ctor = 0;
4030   cant_have_const_ctor = 0;
4031   no_const_asn_ref = 0;
4032
4033   /* Check all the base-classes.  */
4034   check_bases (t, &cant_have_default_ctor, &cant_have_const_ctor,
4035                &no_const_asn_ref);
4036
4037   /* Check all the data member declarations.  */
4038   check_field_decls (t, &access_decls,
4039                      &cant_have_default_ctor,
4040                      &cant_have_const_ctor,
4041                      &no_const_asn_ref);
4042
4043   /* Check all the method declarations.  */
4044   check_methods (t);
4045
4046   /* A nearly-empty class has to be vptr-containing; a nearly empty
4047      class contains just a vptr.  */
4048   if (!TYPE_CONTAINS_VPTR_P (t))
4049     CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4050
4051   /* Do some bookkeeping that will guide the generation of implicitly
4052      declared member functions.  */
4053   TYPE_HAS_COMPLEX_INIT_REF (t)
4054     |= (TYPE_HAS_INIT_REF (t) || TYPE_CONTAINS_VPTR_P (t));
4055   TYPE_NEEDS_CONSTRUCTING (t)
4056     |= (TYPE_HAS_CONSTRUCTOR (t) || TYPE_CONTAINS_VPTR_P (t));
4057   CLASSTYPE_NON_AGGREGATE (t)
4058     |= (TYPE_HAS_CONSTRUCTOR (t) || TYPE_POLYMORPHIC_P (t));
4059   CLASSTYPE_NON_POD_P (t)
4060     |= (CLASSTYPE_NON_AGGREGATE (t) || TYPE_HAS_DESTRUCTOR (t) 
4061         || TYPE_HAS_ASSIGN_REF (t));
4062   TYPE_HAS_COMPLEX_ASSIGN_REF (t)
4063     |= TYPE_HAS_ASSIGN_REF (t) || TYPE_CONTAINS_VPTR_P (t);
4064
4065   /* Synthesize any needed methods.  */
4066   add_implicitly_declared_members (t, cant_have_default_ctor,
4067                                    cant_have_const_ctor,
4068                                    no_const_asn_ref);
4069
4070   /* Create the in-charge and not-in-charge variants of constructors
4071      and destructors.  */
4072   clone_constructors_and_destructors (t);
4073
4074   /* Process the using-declarations.  */
4075   for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4076     handle_using_decl (TREE_VALUE (access_decls), t);
4077
4078   /* Build and sort the CLASSTYPE_METHOD_VEC.  */
4079   finish_struct_methods (t);
4080
4081   /* Figure out whether or not we will need a cookie when dynamically
4082      allocating an array of this type.  */
4083   TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
4084     = type_requires_array_cookie (t);
4085 }
4086
4087 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
4088    accordingly.  If a new vfield was created (because T doesn't have a
4089    primary base class), then the newly created field is returned.  It
4090    is not added to the TYPE_FIELDS list; it is the caller's
4091    responsibility to do that.  Accumulate declared virtual functions
4092    on VIRTUALS_P.  */
4093
4094 static tree
4095 create_vtable_ptr (tree t, tree* virtuals_p)
4096 {
4097   tree fn;
4098
4099   /* Collect the virtual functions declared in T.  */
4100   for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
4101     if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
4102         && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
4103       {
4104         tree new_virtual = make_node (TREE_LIST);
4105         
4106         BV_FN (new_virtual) = fn;
4107         BV_DELTA (new_virtual) = integer_zero_node;
4108         BV_VCALL_INDEX (new_virtual) = NULL_TREE;
4109
4110         TREE_CHAIN (new_virtual) = *virtuals_p;
4111         *virtuals_p = new_virtual;
4112       }
4113   
4114   /* If we couldn't find an appropriate base class, create a new field
4115      here.  Even if there weren't any new virtual functions, we might need a
4116      new virtual function table if we're supposed to include vptrs in
4117      all classes that need them.  */
4118   if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
4119     {
4120       /* We build this decl with vtbl_ptr_type_node, which is a
4121          `vtable_entry_type*'.  It might seem more precise to use
4122          `vtable_entry_type (*)[N]' where N is the number of virtual
4123          functions.  However, that would require the vtable pointer in
4124          base classes to have a different type than the vtable pointer
4125          in derived classes.  We could make that happen, but that
4126          still wouldn't solve all the problems.  In particular, the
4127          type-based alias analysis code would decide that assignments
4128          to the base class vtable pointer can't alias assignments to
4129          the derived class vtable pointer, since they have different
4130          types.  Thus, in a derived class destructor, where the base
4131          class constructor was inlined, we could generate bad code for
4132          setting up the vtable pointer.  
4133
4134          Therefore, we use one type for all vtable pointers.  We still
4135          use a type-correct type; it's just doesn't indicate the array
4136          bounds.  That's better than using `void*' or some such; it's
4137          cleaner, and it let's the alias analysis code know that these
4138          stores cannot alias stores to void*!  */
4139       tree field;
4140
4141       field = build_decl (FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
4142       SET_DECL_ASSEMBLER_NAME (field, get_identifier (VFIELD_BASE));
4143       DECL_VIRTUAL_P (field) = 1;
4144       DECL_ARTIFICIAL (field) = 1;
4145       DECL_FIELD_CONTEXT (field) = t;
4146       DECL_FCONTEXT (field) = t;
4147       
4148       TYPE_VFIELD (t) = field;
4149       
4150       /* This class is non-empty.  */
4151       CLASSTYPE_EMPTY_P (t) = 0;
4152
4153       return field;
4154     }
4155
4156   return NULL_TREE;
4157 }
4158
4159 /* Fixup the inline function given by INFO now that the class is
4160    complete.  */
4161
4162 static void
4163 fixup_pending_inline (tree fn)
4164 {
4165   if (DECL_PENDING_INLINE_INFO (fn))
4166     {
4167       tree args = DECL_ARGUMENTS (fn);
4168       while (args)
4169         {
4170           DECL_CONTEXT (args) = fn;
4171           args = TREE_CHAIN (args);
4172         }
4173     }
4174 }
4175
4176 /* Fixup the inline methods and friends in TYPE now that TYPE is
4177    complete.  */
4178
4179 static void
4180 fixup_inline_methods (tree type)
4181 {
4182   tree method = TYPE_METHODS (type);
4183   VEC (tree) *friends;
4184   unsigned ix;
4185
4186   if (method && TREE_CODE (method) == TREE_VEC)
4187     {
4188       if (TREE_VEC_ELT (method, 1))
4189         method = TREE_VEC_ELT (method, 1);
4190       else if (TREE_VEC_ELT (method, 0))
4191         method = TREE_VEC_ELT (method, 0);
4192       else
4193         method = TREE_VEC_ELT (method, 2);
4194     }
4195
4196   /* Do inline member functions.  */
4197   for (; method; method = TREE_CHAIN (method))
4198     fixup_pending_inline (method);
4199
4200   /* Do friends.  */
4201   for (friends = CLASSTYPE_INLINE_FRIENDS (type), ix = 0;
4202        VEC_iterate (tree, friends, ix, method); ix++)
4203     fixup_pending_inline (method);
4204   CLASSTYPE_INLINE_FRIENDS (type) = NULL;
4205 }
4206
4207 /* Add OFFSET to all base types of BINFO which is a base in the
4208    hierarchy dominated by T.
4209
4210    OFFSET, which is a type offset, is number of bytes.  */
4211
4212 static void
4213 propagate_binfo_offsets (tree binfo, tree offset)
4214 {
4215   int i;
4216   tree primary_binfo;
4217   tree base_binfo;
4218
4219   /* Update BINFO's offset.  */
4220   BINFO_OFFSET (binfo)
4221     = convert (sizetype, 
4222                size_binop (PLUS_EXPR,
4223                            convert (ssizetype, BINFO_OFFSET (binfo)),
4224                            offset));
4225
4226   /* Find the primary base class.  */
4227   primary_binfo = get_primary_binfo (binfo);
4228
4229   if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
4230     propagate_binfo_offsets (primary_binfo, offset);
4231   
4232   /* Scan all of the bases, pushing the BINFO_OFFSET adjust
4233      downwards.  */
4234   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4235     {
4236       /* Don't do the primary base twice.  */
4237       if (base_binfo == primary_binfo)
4238         continue;
4239
4240       if (BINFO_VIRTUAL_P (base_binfo))
4241         continue;
4242
4243       propagate_binfo_offsets (base_binfo, offset);
4244     }
4245 }
4246
4247 /* Set BINFO_OFFSET for all of the virtual bases for RLI->T.  Update
4248    TYPE_ALIGN and TYPE_SIZE for T.  OFFSETS gives the location of
4249    empty subobjects of T.  */
4250
4251 static void
4252 layout_virtual_bases (record_layout_info rli, splay_tree offsets)
4253 {
4254   tree vbase;
4255   tree t = rli->t;
4256   bool first_vbase = true;
4257   tree *next_field;
4258
4259   if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
4260     return;
4261
4262   if (!abi_version_at_least(2))
4263     {
4264       /* In G++ 3.2, we incorrectly rounded the size before laying out
4265          the virtual bases.  */
4266       finish_record_layout (rli, /*free_p=*/false);
4267 #ifdef STRUCTURE_SIZE_BOUNDARY
4268       /* Packed structures don't need to have minimum size.  */
4269       if (! TYPE_PACKED (t))
4270         TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
4271 #endif
4272       rli->offset = TYPE_SIZE_UNIT (t);
4273       rli->bitpos = bitsize_zero_node;
4274       rli->record_align = TYPE_ALIGN (t);
4275     }
4276
4277   /* Find the last field.  The artificial fields created for virtual
4278      bases will go after the last extant field to date.  */
4279   next_field = &TYPE_FIELDS (t);
4280   while (*next_field)
4281     next_field = &TREE_CHAIN (*next_field);
4282
4283   /* Go through the virtual bases, allocating space for each virtual
4284      base that is not already a primary base class.  These are
4285      allocated in inheritance graph order.  */
4286   for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
4287     {
4288       if (!BINFO_VIRTUAL_P (vbase))
4289         continue;
4290
4291       if (!BINFO_PRIMARY_P (vbase))
4292         {
4293           tree basetype = TREE_TYPE (vbase);
4294
4295           /* This virtual base is not a primary base of any class in the
4296              hierarchy, so we have to add space for it.  */
4297           next_field = build_base_field (rli, vbase,
4298                                          offsets, next_field);
4299
4300           /* If the first virtual base might have been placed at a
4301              lower address, had we started from CLASSTYPE_SIZE, rather
4302              than TYPE_SIZE, issue a warning.  There can be both false
4303              positives and false negatives from this warning in rare
4304              cases; to deal with all the possibilities would probably
4305              require performing both layout algorithms and comparing
4306              the results which is not particularly tractable.  */
4307           if (warn_abi
4308               && first_vbase
4309               && (tree_int_cst_lt 
4310                   (size_binop (CEIL_DIV_EXPR,
4311                                round_up (CLASSTYPE_SIZE (t),
4312                                          CLASSTYPE_ALIGN (basetype)),
4313                                bitsize_unit_node),
4314                    BINFO_OFFSET (vbase))))
4315             warning ("offset of virtual base %qT is not ABI-compliant and "
4316                      "may change in a future version of GCC",
4317                      basetype);
4318
4319           first_vbase = false;
4320         }
4321     }
4322 }
4323
4324 /* Returns the offset of the byte just past the end of the base class
4325    BINFO.  */
4326
4327 static tree
4328 end_of_base (tree binfo)
4329 {
4330   tree size;
4331
4332   if (is_empty_class (BINFO_TYPE (binfo)))
4333     /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
4334        allocate some space for it. It cannot have virtual bases, so
4335        TYPE_SIZE_UNIT is fine.  */
4336     size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4337   else
4338     size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4339
4340   return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
4341 }
4342
4343 /* Returns the offset of the byte just past the end of the base class
4344    with the highest offset in T.  If INCLUDE_VIRTUALS_P is zero, then
4345    only non-virtual bases are included.  */
4346
4347 static tree
4348 end_of_class (tree t, int include_virtuals_p)
4349 {
4350   tree result = size_zero_node;
4351   VEC (tree) *vbases;
4352   tree binfo;
4353   tree base_binfo;
4354   tree offset;
4355   int i;
4356
4357   for (binfo = TYPE_BINFO (t), i = 0;
4358        BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4359     {
4360       if (!include_virtuals_p
4361           && BINFO_VIRTUAL_P (base_binfo)
4362           && (!BINFO_PRIMARY_P (base_binfo)
4363               || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
4364         continue;
4365
4366       offset = end_of_base (base_binfo);
4367       if (INT_CST_LT_UNSIGNED (result, offset))
4368         result = offset;
4369     }
4370
4371   /* G++ 3.2 did not check indirect virtual bases.  */
4372   if (abi_version_at_least (2) && include_virtuals_p)
4373     for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4374          VEC_iterate (tree, vbases, i, base_binfo); i++)
4375       {
4376         offset = end_of_base (base_binfo);
4377         if (INT_CST_LT_UNSIGNED (result, offset))
4378           result = offset;
4379       }
4380
4381   return result;
4382 }
4383
4384 /* Warn about bases of T that are inaccessible because they are
4385    ambiguous.  For example:
4386
4387      struct S {};
4388      struct T : public S {};
4389      struct U : public S, public T {};
4390
4391    Here, `(S*) new U' is not allowed because there are two `S'
4392    subobjects of U.  */
4393
4394 static void
4395 warn_about_ambiguous_bases (tree t)
4396 {
4397   int i;
4398   VEC (tree) *vbases;
4399   tree basetype;
4400   tree binfo;
4401   tree base_binfo;
4402
4403   /* If there are no repeated bases, nothing can be ambiguous.  */
4404   if (!CLASSTYPE_REPEATED_BASE_P (t))
4405     return;
4406   
4407   /* Check direct bases.  */
4408   for (binfo = TYPE_BINFO (t), i = 0;
4409        BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4410     {
4411       basetype = BINFO_TYPE (base_binfo);
4412
4413       if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
4414         warning ("direct base %qT inaccessible in %qT due to ambiguity",
4415                  basetype, t);
4416     }
4417
4418   /* Check for ambiguous virtual bases.  */
4419   if (extra_warnings)
4420     for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4421          VEC_iterate (tree, vbases, i, binfo); i++)
4422       {
4423         basetype = BINFO_TYPE (binfo);
4424         
4425         if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
4426           warning ("virtual base %qT inaccessible in %qT due to ambiguity",
4427                    basetype, t);
4428       }
4429 }
4430
4431 /* Compare two INTEGER_CSTs K1 and K2.  */
4432
4433 static int
4434 splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
4435 {
4436   return tree_int_cst_compare ((tree) k1, (tree) k2);
4437 }
4438
4439 /* Increase the size indicated in RLI to account for empty classes
4440    that are "off the end" of the class.  */
4441
4442 static void
4443 include_empty_classes (record_layout_info rli)
4444 {
4445   tree eoc;
4446   tree rli_size;
4447
4448   /* It might be the case that we grew the class to allocate a
4449      zero-sized base class.  That won't be reflected in RLI, yet,
4450      because we are willing to overlay multiple bases at the same
4451      offset.  However, now we need to make sure that RLI is big enough
4452      to reflect the entire class.  */
4453   eoc = end_of_class (rli->t, 
4454                       CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
4455   rli_size = rli_size_unit_so_far (rli);
4456   if (TREE_CODE (rli_size) == INTEGER_CST
4457       && INT_CST_LT_UNSIGNED (rli_size, eoc))
4458     {
4459       if (!abi_version_at_least (2))
4460         /* In version 1 of the ABI, the size of a class that ends with
4461            a bitfield was not rounded up to a whole multiple of a
4462            byte.  Because rli_size_unit_so_far returns only the number
4463            of fully allocated bytes, any extra bits were not included
4464            in the size.  */
4465         rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
4466       else
4467         /* The size should have been rounded to a whole byte.  */
4468         gcc_assert (tree_int_cst_equal
4469                     (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
4470       rli->bitpos 
4471         = size_binop (PLUS_EXPR, 
4472                       rli->bitpos,
4473                       size_binop (MULT_EXPR,
4474                                   convert (bitsizetype,
4475                                            size_binop (MINUS_EXPR,
4476                                                        eoc, rli_size)),
4477                                   bitsize_int (BITS_PER_UNIT)));
4478       normalize_rli (rli);
4479     }
4480 }
4481
4482 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T.  Calculate
4483    BINFO_OFFSETs for all of the base-classes.  Position the vtable
4484    pointer.  Accumulate declared virtual functions on VIRTUALS_P.  */
4485
4486 static void
4487 layout_class_type (tree t, tree *virtuals_p)
4488 {
4489   tree non_static_data_members;
4490   tree field;
4491   tree vptr;
4492   record_layout_info rli;
4493   /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
4494      types that appear at that offset.  */
4495   splay_tree empty_base_offsets;
4496   /* True if the last field layed out was a bit-field.  */
4497   bool last_field_was_bitfield = false;
4498   /* The location at which the next field should be inserted.  */
4499   tree *next_field;
4500   /* T, as a base class.  */
4501   tree base_t;
4502
4503   /* Keep track of the first non-static data member.  */
4504   non_static_data_members = TYPE_FIELDS (t);
4505
4506   /* Start laying out the record.  */
4507   rli = start_record_layout (t);
4508
4509   /* Mark all the primary bases in the hierarchy.  */
4510   determine_primary_bases (t);
4511
4512   /* Create a pointer to our virtual function table.  */
4513   vptr = create_vtable_ptr (t, virtuals_p);
4514
4515   /* The vptr is always the first thing in the class.  */
4516   if (vptr)
4517     {
4518       TREE_CHAIN (vptr) = TYPE_FIELDS (t);
4519       TYPE_FIELDS (t) = vptr;
4520       next_field = &TREE_CHAIN (vptr);
4521       place_field (rli, vptr);
4522     }
4523   else
4524     next_field = &TYPE_FIELDS (t);
4525
4526   /* Build FIELD_DECLs for all of the non-virtual base-types.  */
4527   empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts, 
4528                                        NULL, NULL);
4529   build_base_fields (rli, empty_base_offsets, next_field);
4530   
4531   /* Layout the non-static data members.  */
4532   for (field = non_static_data_members; field; field = TREE_CHAIN (field))
4533     {
4534       tree type;
4535       tree padding;
4536
4537       /* We still pass things that aren't non-static data members to
4538          the back-end, in case it wants to do something with them.  */
4539       if (TREE_CODE (field) != FIELD_DECL)
4540         {
4541           place_field (rli, field);
4542           /* If the static data member has incomplete type, keep track
4543              of it so that it can be completed later.  (The handling 
4544              of pending statics in finish_record_layout is
4545              insufficient; consider:
4546
4547                struct S1;
4548                struct S2 { static S1 s1; };
4549                
4550              At this point, finish_record_layout will be called, but
4551              S1 is still incomplete.)  */
4552           if (TREE_CODE (field) == VAR_DECL)
4553             {
4554               maybe_register_incomplete_var (field);
4555               /* The visibility of static data members is determined
4556                  at their point of declaration, not their point of
4557                  definition.  */
4558               determine_visibility (field);
4559             }
4560           continue;
4561         }
4562
4563       type = TREE_TYPE (field);
4564       
4565       padding = NULL_TREE;
4566
4567       /* If this field is a bit-field whose width is greater than its
4568          type, then there are some special rules for allocating
4569          it.  */
4570       if (DECL_C_BIT_FIELD (field)
4571           && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
4572         {
4573           integer_type_kind itk;
4574           tree integer_type;
4575           bool was_unnamed_p = false;
4576           /* We must allocate the bits as if suitably aligned for the
4577              longest integer type that fits in this many bits.  type
4578              of the field.  Then, we are supposed to use the left over
4579              bits as additional padding.  */
4580           for (itk = itk_char; itk != itk_none; ++itk)
4581             if (INT_CST_LT (DECL_SIZE (field), 
4582                             TYPE_SIZE (integer_types[itk])))
4583               break;
4584
4585           /* ITK now indicates a type that is too large for the
4586              field.  We have to back up by one to find the largest
4587              type that fits.  */
4588           integer_type = integer_types[itk - 1];
4589
4590           /* Figure out how much additional padding is required.  GCC
4591              3.2 always created a padding field, even if it had zero
4592              width.  */
4593           if (!abi_version_at_least (2)
4594               || INT_CST_LT (TYPE_SIZE (integer_type), DECL_SIZE (field)))
4595             {
4596               if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
4597                 /* In a union, the padding field must have the full width
4598                    of the bit-field; all fields start at offset zero.  */
4599                 padding = DECL_SIZE (field);
4600               else
4601                 {
4602                   if (warn_abi && TREE_CODE (t) == UNION_TYPE)
4603                     warning ("size assigned to %qT may not be "
4604                              "ABI-compliant and may change in a future "
4605                              "version of GCC", 
4606                              t);
4607                   padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
4608                                         TYPE_SIZE (integer_type));
4609                 }
4610             }
4611 #ifdef PCC_BITFIELD_TYPE_MATTERS
4612           /* An unnamed bitfield does not normally affect the
4613              alignment of the containing class on a target where
4614              PCC_BITFIELD_TYPE_MATTERS.  But, the C++ ABI does not
4615              make any exceptions for unnamed bitfields when the
4616              bitfields are longer than their types.  Therefore, we
4617              temporarily give the field a name.  */
4618           if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
4619             {
4620               was_unnamed_p = true;
4621               DECL_NAME (field) = make_anon_name ();
4622             }
4623 #endif
4624           DECL_SIZE (field) = TYPE_SIZE (integer_type);
4625           DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
4626           DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
4627           layout_nonempty_base_or_field (rli, field, NULL_TREE,
4628                                          empty_base_offsets);
4629           if (was_unnamed_p)
4630             DECL_NAME (field) = NULL_TREE;
4631           /* Now that layout has been performed, set the size of the
4632              field to the size of its declared type; the rest of the
4633              field is effectively invisible.  */
4634           DECL_SIZE (field) = TYPE_SIZE (type);
4635           /* We must also reset the DECL_MODE of the field.  */
4636           if (abi_version_at_least (2))
4637             DECL_MODE (field) = TYPE_MODE (type);
4638           else if (warn_abi
4639                    && DECL_MODE (field) != TYPE_MODE (type))
4640             /* Versions of G++ before G++ 3.4 did not reset the
4641                DECL_MODE.  */
4642             warning ("the offset of %qD may not be ABI-compliant and may "
4643                      "change in a future version of GCC", field);
4644         }
4645       else
4646         layout_nonempty_base_or_field (rli, field, NULL_TREE,
4647                                        empty_base_offsets);
4648
4649       /* Remember the location of any empty classes in FIELD.  */
4650       if (abi_version_at_least (2))
4651         record_subobject_offsets (TREE_TYPE (field), 
4652                                   byte_position(field),
4653                                   empty_base_offsets,
4654                                   /*vbases_p=*/1);
4655
4656       /* If a bit-field does not immediately follow another bit-field,
4657          and yet it starts in the middle of a byte, we have failed to
4658          comply with the ABI.  */
4659       if (warn_abi
4660           && DECL_C_BIT_FIELD (field) 
4661           && !last_field_was_bitfield
4662           && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
4663                                          DECL_FIELD_BIT_OFFSET (field),
4664                                          bitsize_unit_node)))
4665         cp_warning_at ("offset of %qD is not ABI-compliant and may "
4666                        "change in a future version of GCC", 
4667                        field);
4668
4669       /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
4670          offset of the field.  */
4671       if (warn_abi 
4672           && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
4673                                   byte_position (field))
4674           && contains_empty_class_p (TREE_TYPE (field)))
4675         cp_warning_at ("%qD contains empty classes which may cause base "
4676                        "classes to be placed at different locations in a "
4677                        "future version of GCC",
4678                        field);
4679
4680       /* If we needed additional padding after this field, add it
4681          now.  */
4682       if (padding)
4683         {
4684           tree padding_field;
4685
4686           padding_field = build_decl (FIELD_DECL, 
4687                                       NULL_TREE,
4688                                       char_type_node); 
4689           DECL_BIT_FIELD (padding_field) = 1;
4690           DECL_SIZE (padding_field) = padding;
4691           DECL_CONTEXT (padding_field) = t;
4692           DECL_ARTIFICIAL (padding_field) = 1;
4693           DECL_IGNORED_P (padding_field) = 1;
4694           layout_nonempty_base_or_field (rli, padding_field,
4695                                          NULL_TREE, 
4696                                          empty_base_offsets);
4697         }
4698
4699       last_field_was_bitfield = DECL_C_BIT_FIELD (field);
4700     }
4701
4702   if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
4703     {
4704       /* Make sure that we are on a byte boundary so that the size of
4705          the class without virtual bases will always be a round number
4706          of bytes.  */
4707       rli->bitpos = round_up (rli->bitpos, BITS_PER_UNIT);
4708       normalize_rli (rli);
4709     }
4710
4711   /* G++ 3.2 does not allow virtual bases to be overlaid with tail
4712      padding.  */
4713   if (!abi_version_at_least (2))
4714     include_empty_classes(rli);
4715
4716   /* Delete all zero-width bit-fields from the list of fields.  Now
4717      that the type is laid out they are no longer important.  */
4718   remove_zero_width_bit_fields (t);
4719
4720   /* Create the version of T used for virtual bases.  We do not use
4721      make_aggr_type for this version; this is an artificial type.  For
4722      a POD type, we just reuse T.  */
4723   if (CLASSTYPE_NON_POD_P (t) || CLASSTYPE_EMPTY_P (t))
4724     {
4725       base_t = make_node (TREE_CODE (t));
4726       
4727       /* Set the size and alignment for the new type.  In G++ 3.2, all
4728          empty classes were considered to have size zero when used as
4729          base classes.  */
4730       if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
4731         {
4732           TYPE_SIZE (base_t) = bitsize_zero_node;
4733           TYPE_SIZE_UNIT (base_t) = size_zero_node;
4734           if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
4735             warning ("layout of classes derived from empty class %qT "
4736                      "may change in a future version of GCC",
4737                      t);
4738         }
4739       else
4740         {
4741           tree eoc;
4742
4743           /* If the ABI version is not at least two, and the last
4744              field was a bit-field, RLI may not be on a byte
4745              boundary.  In particular, rli_size_unit_so_far might
4746              indicate the last complete byte, while rli_size_so_far
4747              indicates the total number of bits used.  Therefore,
4748              rli_size_so_far, rather than rli_size_unit_so_far, is
4749              used to compute TYPE_SIZE_UNIT.  */
4750           eoc = end_of_class (t, /*include_virtuals_p=*/0);
4751           TYPE_SIZE_UNIT (base_t) 
4752             = size_binop (MAX_EXPR,
4753                           convert (sizetype,
4754                                    size_binop (CEIL_DIV_EXPR,
4755                                                rli_size_so_far (rli),
4756                                                bitsize_int (BITS_PER_UNIT))),
4757                           eoc);
4758           TYPE_SIZE (base_t) 
4759             = size_binop (MAX_EXPR,
4760                           rli_size_so_far (rli),
4761                           size_binop (MULT_EXPR,
4762                                       convert (bitsizetype, eoc),
4763                                       bitsize_int (BITS_PER_UNIT)));
4764         }
4765       TYPE_ALIGN (base_t) = rli->record_align;
4766       TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
4767
4768       /* Copy the fields from T.  */
4769       next_field = &TYPE_FIELDS (base_t);
4770       for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4771         if (TREE_CODE (field) == FIELD_DECL)
4772           {
4773             *next_field = build_decl (FIELD_DECL,
4774                                       DECL_NAME (field), 
4775                                       TREE_TYPE (field));
4776             DECL_CONTEXT (*next_field) = base_t;
4777             DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
4778             DECL_FIELD_BIT_OFFSET (*next_field)
4779               = DECL_FIELD_BIT_OFFSET (field);
4780             DECL_SIZE (*next_field) = DECL_SIZE (field);
4781             DECL_MODE (*next_field) = DECL_MODE (field);
4782             next_field = &TREE_CHAIN (*next_field);
4783           }
4784
4785       /* Record the base version of the type.  */
4786       CLASSTYPE_AS_BASE (t) = base_t;
4787       TYPE_CONTEXT (base_t) = t;
4788     }
4789   else
4790     CLASSTYPE_AS_BASE (t) = t;
4791
4792   /* Every empty class contains an empty class.  */
4793   if (CLASSTYPE_EMPTY_P (t))
4794     CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
4795
4796   /* Set the TYPE_DECL for this type to contain the right
4797      value for DECL_OFFSET, so that we can use it as part
4798      of a COMPONENT_REF for multiple inheritance.  */
4799   layout_decl (TYPE_MAIN_DECL (t), 0);
4800
4801   /* Now fix up any virtual base class types that we left lying
4802      around.  We must get these done before we try to lay out the
4803      virtual function table.  As a side-effect, this will remove the
4804      base subobject fields.  */
4805   layout_virtual_bases (rli, empty_base_offsets);
4806
4807   /* Make sure that empty classes are reflected in RLI at this 
4808      point.  */
4809   include_empty_classes(rli);
4810
4811   /* Make sure not to create any structures with zero size.  */
4812   if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
4813     place_field (rli, 
4814                  build_decl (FIELD_DECL, NULL_TREE, char_type_node));
4815
4816   /* Let the back-end lay out the type.  */
4817   finish_record_layout (rli, /*free_p=*/true);
4818
4819   /* Warn about bases that can't be talked about due to ambiguity.  */
4820   warn_about_ambiguous_bases (t);
4821
4822   /* Now that we're done with layout, give the base fields the real types.  */
4823   for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4824     if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
4825       TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
4826
4827   /* Clean up.  */
4828   splay_tree_delete (empty_base_offsets);
4829 }
4830
4831 /* Determine the "key method" for the class type indicated by TYPE,
4832    and set CLASSTYPE_KEY_METHOD accordingly.  */
4833
4834 void
4835 determine_key_method (tree type)
4836 {
4837   tree method;
4838
4839   if (TYPE_FOR_JAVA (type)
4840       || processing_template_decl
4841       || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
4842       || CLASSTYPE_INTERFACE_KNOWN (type))
4843     return;
4844
4845   /* The key method is the first non-pure virtual function that is not
4846      inline at the point of class definition.  On some targets the
4847      key function may not be inline; those targets should not call
4848      this function until the end of the translation unit.  */
4849   for (method = TYPE_METHODS (type); method != NULL_TREE;
4850        method = TREE_CHAIN (method))
4851     if (DECL_VINDEX (method) != NULL_TREE
4852         && ! DECL_DECLARED_INLINE_P (method)
4853         && ! DECL_PURE_VIRTUAL_P (method))
4854       {
4855         CLASSTYPE_KEY_METHOD (type) = method;
4856         break;
4857       }
4858
4859   return;
4860 }
4861
4862 /* Perform processing required when the definition of T (a class type)
4863    is complete.  */
4864
4865 void
4866 finish_struct_1 (tree t)
4867 {
4868   tree x;
4869   /* A TREE_LIST.  The TREE_VALUE of each node is a FUNCTION_DECL.  */
4870   tree virtuals = NULL_TREE;
4871   int n_fields = 0;
4872
4873   if (COMPLETE_TYPE_P (t))
4874     {
4875       gcc_assert (IS_AGGR_TYPE (t));
4876       error ("redefinition of %q#T", t);
4877       popclass ();
4878       return;
4879     }
4880
4881   /* If this type was previously laid out as a forward reference,
4882      make sure we lay it out again.  */
4883   TYPE_SIZE (t) = NULL_TREE;
4884   CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
4885
4886   fixup_inline_methods (t);
4887   
4888   /* Make assumptions about the class; we'll reset the flags if
4889      necessary.  */
4890   CLASSTYPE_EMPTY_P (t) = 1;
4891   CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
4892   CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
4893
4894   /* Do end-of-class semantic processing: checking the validity of the
4895      bases and members and add implicitly generated methods.  */
4896   check_bases_and_members (t);
4897
4898   /* Find the key method.  */
4899   if (TYPE_CONTAINS_VPTR_P (t))
4900     {
4901       /* The Itanium C++ ABI permits the key method to be chosen when
4902          the class is defined -- even though the key method so
4903          selected may later turn out to be an inline function.  On
4904          some systems (such as ARM Symbian OS) the key method cannot
4905          be determined until the end of the translation unit.  On such
4906          systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
4907          will cause the class to be added to KEYED_CLASSES.  Then, in
4908          finish_file we will determine the key method.  */
4909       if (targetm.cxx.key_method_may_be_inline ())
4910         determine_key_method (t);
4911
4912       /* If a polymorphic class has no key method, we may emit the vtable
4913          in every translation unit where the class definition appears.  */
4914       if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
4915         keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
4916     }
4917
4918   /* Layout the class itself.  */
4919   layout_class_type (t, &virtuals);
4920   if (CLASSTYPE_AS_BASE (t) != t)
4921     /* We use the base type for trivial assignments, and hence it
4922        needs a mode.  */
4923     compute_record_mode (CLASSTYPE_AS_BASE (t));
4924
4925   virtuals = modify_all_vtables (t, nreverse (virtuals));
4926
4927   /* If necessary, create the primary vtable for this class.  */
4928   if (virtuals || TYPE_CONTAINS_VPTR_P (t))
4929     {
4930       /* We must enter these virtuals into the table.  */
4931       if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4932         build_primary_vtable (NULL_TREE, t);
4933       else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
4934         /* Here we know enough to change the type of our virtual
4935            function table, but we will wait until later this function.  */
4936         build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
4937     }
4938
4939   if (TYPE_CONTAINS_VPTR_P (t))
4940     {
4941       int vindex;
4942       tree fn;
4943
4944       if (BINFO_VTABLE (TYPE_BINFO (t)))
4945         gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
4946       if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4947         gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
4948
4949       /* Add entries for virtual functions introduced by this class.  */
4950       BINFO_VIRTUALS (TYPE_BINFO (t))
4951         = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
4952
4953       /* Set DECL_VINDEX for all functions declared in this class.  */
4954       for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t)); 
4955            fn; 
4956            fn = TREE_CHAIN (fn), 
4957              vindex += (TARGET_VTABLE_USES_DESCRIPTORS
4958                         ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
4959         {
4960           tree fndecl = BV_FN (fn);
4961
4962           if (DECL_THUNK_P (fndecl))
4963             /* A thunk. We should never be calling this entry directly
4964                from this vtable -- we'd use the entry for the non
4965                thunk base function.  */
4966             DECL_VINDEX (fndecl) = NULL_TREE;
4967           else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
4968             DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
4969         }
4970     }
4971
4972   finish_struct_bits (t);
4973
4974   /* Complete the rtl for any static member objects of the type we're
4975      working on.  */
4976   for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
4977     if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
4978         && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
4979       DECL_MODE (x) = TYPE_MODE (t);
4980
4981   /* Done with FIELDS...now decide whether to sort these for
4982      faster lookups later.
4983
4984      We use a small number because most searches fail (succeeding
4985      ultimately as the search bores through the inheritance
4986      hierarchy), and we want this failure to occur quickly.  */
4987
4988   n_fields = count_fields (TYPE_FIELDS (t));
4989   if (n_fields > 7)
4990     {
4991       struct sorted_fields_type *field_vec = GGC_NEWVAR
4992          (struct sorted_fields_type,
4993           sizeof (struct sorted_fields_type) + n_fields * sizeof (tree));
4994       field_vec->len = n_fields;
4995       add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
4996       qsort (field_vec->elts, n_fields, sizeof (tree),
4997              field_decl_cmp);
4998       if (! DECL_LANG_SPECIFIC (TYPE_MAIN_DECL (t)))
4999         retrofit_lang_decl (TYPE_MAIN_DECL (t));
5000       DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec;
5001     }
5002
5003   /* Make the rtl for any new vtables we have created, and unmark
5004      the base types we marked.  */
5005   finish_vtbls (t);
5006   
5007   /* Build the VTT for T.  */
5008   build_vtt (t);
5009
5010   if (warn_nonvdtor && TYPE_POLYMORPHIC_P (t) && TYPE_HAS_DESTRUCTOR (t)
5011       && !DECL_VINDEX (CLASSTYPE_DESTRUCTORS (t)))
5012
5013     {
5014       tree dtor = CLASSTYPE_DESTRUCTORS (t);
5015
5016       /* Warn only if the dtor is non-private or the class has friends */
5017       if (!TREE_PRIVATE (dtor) ||
5018           (CLASSTYPE_FRIEND_CLASSES (t) ||
5019            DECL_FRIENDLIST (TYPE_MAIN_DECL (t))))
5020         warning ("%q#T has virtual functions but non-virtual destructor", t);
5021     }
5022
5023   complete_vars (t);
5024
5025   if (warn_overloaded_virtual)
5026     warn_hidden (t);
5027
5028   maybe_suppress_debug_info (t);
5029
5030   dump_class_hierarchy (t);
5031   
5032   /* Finish debugging output for this type.  */
5033   rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
5034 }
5035
5036 /* When T was built up, the member declarations were added in reverse
5037    order.  Rearrange them to declaration order.  */
5038
5039 void
5040 unreverse_member_declarations (tree t)
5041 {
5042   tree next;
5043   tree prev;
5044   tree x;
5045
5046   /* The following lists are all in reverse order.  Put them in
5047      declaration order now.  */
5048   TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
5049   CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
5050
5051   /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5052      reverse order, so we can't just use nreverse.  */
5053   prev = NULL_TREE;
5054   for (x = TYPE_FIELDS (t); 
5055        x && TREE_CODE (x) != TYPE_DECL; 
5056        x = next)
5057     {
5058       next = TREE_CHAIN (x);
5059       TREE_CHAIN (x) = prev;
5060       prev = x;
5061     }
5062   if (prev)
5063     {
5064       TREE_CHAIN (TYPE_FIELDS (t)) = x;
5065       if (prev)
5066         TYPE_FIELDS (t) = prev;
5067     }
5068 }
5069
5070 tree
5071 finish_struct (tree t, tree attributes)
5072 {
5073   location_t saved_loc = input_location;
5074
5075   /* Now that we've got all the field declarations, reverse everything
5076      as necessary.  */
5077   unreverse_member_declarations (t);
5078
5079   cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5080
5081   /* Nadger the current location so that diagnostics point to the start of
5082      the struct, not the end.  */
5083   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
5084
5085   if (processing_template_decl)
5086     {
5087       tree x;
5088
5089       finish_struct_methods (t);
5090       TYPE_SIZE (t) = bitsize_zero_node;
5091
5092       /* We need to emit an error message if this type was used as a parameter
5093          and it is an abstract type, even if it is a template. We construct
5094          a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
5095          account and we call complete_vars with this type, which will check
5096          the PARM_DECLS. Note that while the type is being defined,
5097          CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
5098          (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it.  */
5099       CLASSTYPE_PURE_VIRTUALS (t) = NULL;
5100       for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
5101         if (DECL_PURE_VIRTUAL_P (x))
5102           VEC_safe_push (tree, CLASSTYPE_PURE_VIRTUALS (t), x);
5103       complete_vars (t);
5104     }
5105   else
5106     finish_struct_1 (t);
5107
5108   input_location = saved_loc;
5109
5110   TYPE_BEING_DEFINED (t) = 0;
5111
5112   if (current_class_type)
5113     popclass ();
5114   else
5115     error ("trying to finish struct, but kicked out due to previous parse errors");
5116
5117   if (processing_template_decl && at_function_scope_p ())
5118     add_stmt (build_min (TAG_DEFN, t));
5119
5120   return t;
5121 }
5122 \f
5123 /* Return the dynamic type of INSTANCE, if known.
5124    Used to determine whether the virtual function table is needed
5125    or not.
5126
5127    *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5128    of our knowledge of its type.  *NONNULL should be initialized
5129    before this function is called.  */
5130
5131 static tree
5132 fixed_type_or_null (tree instance, int* nonnull, int* cdtorp)
5133 {
5134   switch (TREE_CODE (instance))
5135     {
5136     case INDIRECT_REF:
5137       if (POINTER_TYPE_P (TREE_TYPE (instance)))
5138         return NULL_TREE;
5139       else
5140         return fixed_type_or_null (TREE_OPERAND (instance, 0),
5141                                    nonnull, cdtorp);
5142
5143     case CALL_EXPR:
5144       /* This is a call to a constructor, hence it's never zero.  */
5145       if (TREE_HAS_CONSTRUCTOR (instance))
5146         {
5147           if (nonnull)
5148             *nonnull = 1;
5149           return TREE_TYPE (instance);
5150         }
5151       return NULL_TREE;
5152
5153     case SAVE_EXPR:
5154       /* This is a call to a constructor, hence it's never zero.  */
5155       if (TREE_HAS_CONSTRUCTOR (instance))
5156         {
5157           if (nonnull)
5158             *nonnull = 1;
5159           return TREE_TYPE (instance);
5160         }
5161       return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5162
5163     case PLUS_EXPR:
5164     case MINUS_EXPR:
5165       if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5166         return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5167       if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5168         /* Propagate nonnull.  */
5169         return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5170       return NULL_TREE;
5171
5172     case NOP_EXPR:
5173     case CONVERT_EXPR:
5174       return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5175
5176     case ADDR_EXPR:
5177       instance = TREE_OPERAND (instance, 0);
5178       if (nonnull)
5179         {
5180           /* Just because we see an ADDR_EXPR doesn't mean we're dealing
5181              with a real object -- given &p->f, p can still be null.  */
5182           tree t = get_base_address (instance);
5183           /* ??? Probably should check DECL_WEAK here.  */
5184           if (t && DECL_P (t))
5185             *nonnull = 1;
5186         }
5187       return fixed_type_or_null (instance, nonnull, cdtorp);
5188
5189     case COMPONENT_REF:
5190       /* If this component is really a base class reference, then the field
5191          itself isn't definitive.  */
5192       if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
5193         return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5194       return fixed_type_or_null (TREE_OPERAND (instance, 1), nonnull, cdtorp);
5195
5196     case VAR_DECL:
5197     case FIELD_DECL:
5198       if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5199           && IS_AGGR_TYPE (TREE_TYPE (TREE_TYPE (instance))))
5200         {
5201           if (nonnull)
5202             *nonnull = 1;
5203           return TREE_TYPE (TREE_TYPE (instance));
5204         }
5205       /* fall through...  */
5206     case TARGET_EXPR:
5207     case PARM_DECL:
5208     case RESULT_DECL:
5209       if (IS_AGGR_TYPE (TREE_TYPE (instance)))
5210         {
5211           if (nonnull)
5212             *nonnull = 1;
5213           return TREE_TYPE (instance);
5214         }
5215       else if (instance == current_class_ptr)
5216         {
5217           if (nonnull)
5218             *nonnull = 1;
5219         
5220           /* if we're in a ctor or dtor, we know our type.  */
5221           if (DECL_LANG_SPECIFIC (current_function_decl)
5222               && (DECL_CONSTRUCTOR_P (current_function_decl)
5223                   || DECL_DESTRUCTOR_P (current_function_decl)))
5224             {
5225               if (cdtorp)
5226                 *cdtorp = 1;
5227               return TREE_TYPE (TREE_TYPE (instance));
5228             }
5229         }
5230       else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5231         {
5232           /* Reference variables should be references to objects.  */
5233           if (nonnull)
5234             *nonnull = 1;
5235           
5236           /* DECL_VAR_MARKED_P is used to prevent recursion; a
5237              variable's initializer may refer to the variable
5238              itself.  */
5239           if (TREE_CODE (instance) == VAR_DECL 
5240               && DECL_INITIAL (instance)
5241               && !DECL_VAR_MARKED_P (instance))
5242             {
5243               tree type;
5244               DECL_VAR_MARKED_P (instance) = 1;
5245               type = fixed_type_or_null (DECL_INITIAL (instance),
5246                                          nonnull, cdtorp);
5247               DECL_VAR_MARKED_P (instance) = 0;
5248               return type;
5249             }
5250         }
5251       return NULL_TREE;
5252
5253     default:
5254       return NULL_TREE;
5255     }
5256 }
5257
5258 /* Return nonzero if the dynamic type of INSTANCE is known, and
5259    equivalent to the static type.  We also handle the case where
5260    INSTANCE is really a pointer. Return negative if this is a
5261    ctor/dtor. There the dynamic type is known, but this might not be
5262    the most derived base of the original object, and hence virtual
5263    bases may not be layed out according to this type.
5264
5265    Used to determine whether the virtual function table is needed
5266    or not.
5267
5268    *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5269    of our knowledge of its type.  *NONNULL should be initialized
5270    before this function is called.  */
5271
5272 int
5273 resolves_to_fixed_type_p (tree instance, int* nonnull)
5274 {
5275   tree t = TREE_TYPE (instance);
5276   int cdtorp = 0;
5277   
5278   tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
5279   if (fixed == NULL_TREE)
5280     return 0;
5281   if (POINTER_TYPE_P (t))
5282     t = TREE_TYPE (t);
5283   if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
5284     return 0;
5285   return cdtorp ? -1 : 1;
5286 }
5287
5288 \f
5289 void
5290 init_class_processing (void)
5291 {
5292   current_class_depth = 0;
5293   current_class_stack_size = 10;
5294   current_class_stack 
5295     = xmalloc (current_class_stack_size * sizeof (struct class_stack_node));
5296   VARRAY_TREE_INIT (local_classes, 8, "local_classes");
5297
5298   ridpointers[(int) RID_PUBLIC] = access_public_node;
5299   ridpointers[(int) RID_PRIVATE] = access_private_node;
5300   ridpointers[(int) RID_PROTECTED] = access_protected_node;
5301 }
5302
5303 /* Restore the cached PREVIOUS_CLASS_LEVEL.  */
5304
5305 static void
5306 restore_class_cache (void)
5307 {
5308   tree type;
5309
5310   /* We are re-entering the same class we just left, so we don't
5311      have to search the whole inheritance matrix to find all the
5312      decls to bind again.  Instead, we install the cached
5313      class_shadowed list and walk through it binding names.  */
5314   push_binding_level (previous_class_level);
5315   class_binding_level = previous_class_level;
5316   /* Restore IDENTIFIER_TYPE_VALUE.  */
5317   for (type = class_binding_level->type_shadowed; 
5318        type; 
5319        type = TREE_CHAIN (type))
5320     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
5321 }
5322
5323 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
5324    appropriate for TYPE.
5325
5326    So that we may avoid calls to lookup_name, we cache the _TYPE
5327    nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5328
5329    For multiple inheritance, we perform a two-pass depth-first search
5330    of the type lattice.  */
5331
5332 void
5333 pushclass (tree type)
5334 {
5335   type = TYPE_MAIN_VARIANT (type);
5336
5337   /* Make sure there is enough room for the new entry on the stack.  */
5338   if (current_class_depth + 1 >= current_class_stack_size) 
5339     {
5340       current_class_stack_size *= 2;
5341       current_class_stack
5342         = xrealloc (current_class_stack,
5343                     current_class_stack_size
5344                     * sizeof (struct class_stack_node));
5345     }
5346
5347   /* Insert a new entry on the class stack.  */
5348   current_class_stack[current_class_depth].name = current_class_name;
5349   current_class_stack[current_class_depth].type = current_class_type;
5350   current_class_stack[current_class_depth].access = current_access_specifier;
5351   current_class_stack[current_class_depth].names_used = 0;
5352   current_class_depth++;
5353
5354   /* Now set up the new type.  */
5355   current_class_name = TYPE_NAME (type);
5356   if (TREE_CODE (current_class_name) == TYPE_DECL)
5357     current_class_name = DECL_NAME (current_class_name);
5358   current_class_type = type;
5359
5360   /* By default, things in classes are private, while things in
5361      structures or unions are public.  */
5362   current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type) 
5363                               ? access_private_node 
5364                               : access_public_node);
5365
5366   if (previous_class_level
5367       && type != previous_class_level->this_entity
5368       && current_class_depth == 1)
5369     {
5370       /* Forcibly remove any old class remnants.  */
5371       invalidate_class_lookup_cache ();
5372     }
5373
5374   if (!previous_class_level 
5375       || type != previous_class_level->this_entity
5376       || current_class_depth > 1)
5377     pushlevel_class ();
5378   else
5379     restore_class_cache ();
5380 }
5381
5382 /* When we exit a toplevel class scope, we save its binding level so
5383    that we can restore it quickly.  Here, we've entered some other
5384    class, so we must invalidate our cache.  */
5385
5386 void
5387 invalidate_class_lookup_cache (void)
5388 {
5389   previous_class_level = NULL;
5390 }
5391  
5392 /* Get out of the current class scope. If we were in a class scope
5393    previously, that is the one popped to.  */
5394
5395 void
5396 popclass (void)
5397 {
5398   poplevel_class ();
5399
5400   current_class_depth--;
5401   current_class_name = current_class_stack[current_class_depth].name;
5402   current_class_type = current_class_stack[current_class_depth].type;
5403   current_access_specifier = current_class_stack[current_class_depth].access;
5404   if (current_class_stack[current_class_depth].names_used)
5405     splay_tree_delete (current_class_stack[current_class_depth].names_used);
5406 }
5407
5408 /* Returns 1 if current_class_type is either T or a nested type of T.
5409    We start looking from 1 because entry 0 is from global scope, and has
5410    no type.  */
5411
5412 int
5413 currently_open_class (tree t)
5414 {
5415   int i;
5416   if (current_class_type && same_type_p (t, current_class_type))
5417     return 1;
5418   for (i = 1; i < current_class_depth; ++i)
5419     if (current_class_stack[i].type
5420         && same_type_p (current_class_stack [i].type, t))
5421       return 1;
5422   return 0;
5423 }
5424
5425 /* If either current_class_type or one of its enclosing classes are derived
5426    from T, return the appropriate type.  Used to determine how we found
5427    something via unqualified lookup.  */
5428
5429 tree
5430 currently_open_derived_class (tree t)
5431 {
5432   int i;
5433
5434   /* The bases of a dependent type are unknown.  */
5435   if (dependent_type_p (t))
5436     return NULL_TREE;
5437
5438   if (!current_class_type)
5439     return NULL_TREE;
5440
5441   if (DERIVED_FROM_P (t, current_class_type))
5442     return current_class_type;
5443
5444   for (i = current_class_depth - 1; i > 0; --i)
5445     if (DERIVED_FROM_P (t, current_class_stack[i].type))
5446       return current_class_stack[i].type;
5447
5448   return NULL_TREE;
5449 }
5450
5451 /* When entering a class scope, all enclosing class scopes' names with
5452    static meaning (static variables, static functions, types and
5453    enumerators) have to be visible.  This recursive function calls
5454    pushclass for all enclosing class contexts until global or a local
5455    scope is reached.  TYPE is the enclosed class.  */
5456
5457 void
5458 push_nested_class (tree type)
5459 {
5460   tree context;
5461
5462   /* A namespace might be passed in error cases, like A::B:C.  */
5463   if (type == NULL_TREE 
5464       || type == error_mark_node 
5465       || TREE_CODE (type) == NAMESPACE_DECL
5466       || ! IS_AGGR_TYPE (type)
5467       || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5468       || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
5469     return;
5470   
5471   context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
5472
5473   if (context && CLASS_TYPE_P (context))
5474     push_nested_class (context);
5475   pushclass (type);
5476 }
5477
5478 /* Undoes a push_nested_class call.  */
5479
5480 void
5481 pop_nested_class (void)
5482 {
5483   tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
5484
5485   popclass ();
5486   if (context && CLASS_TYPE_P (context))
5487     pop_nested_class ();
5488 }
5489
5490 /* Returns the number of extern "LANG" blocks we are nested within.  */
5491
5492 int
5493 current_lang_depth (void)
5494 {
5495   return VARRAY_ACTIVE_SIZE (current_lang_base);
5496 }
5497
5498 /* Set global variables CURRENT_LANG_NAME to appropriate value
5499    so that behavior of name-mangling machinery is correct.  */
5500
5501 void
5502 push_lang_context (tree name)
5503 {
5504   VARRAY_PUSH_TREE (current_lang_base, current_lang_name);
5505
5506   if (name == lang_name_cplusplus)
5507     {
5508       current_lang_name = name;
5509     }
5510   else if (name == lang_name_java)
5511     {
5512       current_lang_name = name;
5513       /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5514          (See record_builtin_java_type in decl.c.)  However, that causes
5515          incorrect debug entries if these types are actually used.
5516          So we re-enable debug output after extern "Java".  */
5517       DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
5518       DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
5519       DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
5520       DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
5521       DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
5522       DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
5523       DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
5524       DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
5525     }
5526   else if (name == lang_name_c)
5527     {
5528       current_lang_name = name;
5529     }
5530   else
5531     error ("language string %<\"%E\"%> not recognized", name);
5532 }
5533   
5534 /* Get out of the current language scope.  */
5535
5536 void
5537 pop_lang_context (void)
5538 {
5539   current_lang_name = VARRAY_TOP_TREE (current_lang_base);
5540   VARRAY_POP (current_lang_base);
5541 }
5542 \f
5543 /* Type instantiation routines.  */
5544
5545 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
5546    matches the TARGET_TYPE.  If there is no satisfactory match, return
5547    error_mark_node, and issue a error & warning messages under control
5548    of FLAGS.  Permit pointers to member function if FLAGS permits.  If
5549    TEMPLATE_ONLY, the name of the overloaded function was a
5550    template-id, and EXPLICIT_TARGS are the explicitly provided
5551    template arguments.  */
5552
5553 static tree
5554 resolve_address_of_overloaded_function (tree target_type, 
5555                                         tree overload,
5556                                         tsubst_flags_t flags,
5557                                         bool template_only,
5558                                         tree explicit_targs)
5559 {
5560   /* Here's what the standard says:
5561      
5562        [over.over]
5563
5564        If the name is a function template, template argument deduction
5565        is done, and if the argument deduction succeeds, the deduced
5566        arguments are used to generate a single template function, which
5567        is added to the set of overloaded functions considered.
5568
5569        Non-member functions and static member functions match targets of
5570        type "pointer-to-function" or "reference-to-function."  Nonstatic
5571        member functions match targets of type "pointer-to-member
5572        function;" the function type of the pointer to member is used to
5573        select the member function from the set of overloaded member
5574        functions.  If a nonstatic member function is selected, the
5575        reference to the overloaded function name is required to have the
5576        form of a pointer to member as described in 5.3.1.
5577
5578        If more than one function is selected, any template functions in
5579        the set are eliminated if the set also contains a non-template
5580        function, and any given template function is eliminated if the
5581        set contains a second template function that is more specialized
5582        than the first according to the partial ordering rules 14.5.5.2.
5583        After such eliminations, if any, there shall remain exactly one
5584        selected function.  */
5585
5586   int is_ptrmem = 0;
5587   int is_reference = 0;
5588   /* We store the matches in a TREE_LIST rooted here.  The functions
5589      are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
5590      interoperability with most_specialized_instantiation.  */
5591   tree matches = NULL_TREE;
5592   tree fn;
5593
5594   /* By the time we get here, we should be seeing only real
5595      pointer-to-member types, not the internal POINTER_TYPE to
5596      METHOD_TYPE representation.  */
5597   gcc_assert (TREE_CODE (target_type) != POINTER_TYPE
5598               || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
5599
5600   gcc_assert (is_overloaded_fn (overload));
5601   
5602   /* Check that the TARGET_TYPE is reasonable.  */
5603   if (TYPE_PTRFN_P (target_type))
5604     /* This is OK.  */;
5605   else if (TYPE_PTRMEMFUNC_P (target_type))
5606     /* This is OK, too.  */
5607     is_ptrmem = 1;
5608   else if (TREE_CODE (target_type) == FUNCTION_TYPE)
5609     {
5610       /* This is OK, too.  This comes from a conversion to reference
5611          type.  */
5612       target_type = build_reference_type (target_type);
5613       is_reference = 1;
5614     }
5615   else 
5616     {
5617       if (flags & tf_error)
5618         error ("cannot resolve overloaded function %qD based on"
5619                " conversion to type %qT", 
5620                DECL_NAME (OVL_FUNCTION (overload)), target_type);
5621       return error_mark_node;
5622     }
5623   
5624   /* If we can find a non-template function that matches, we can just
5625      use it.  There's no point in generating template instantiations
5626      if we're just going to throw them out anyhow.  But, of course, we
5627      can only do this when we don't *need* a template function.  */
5628   if (!template_only)
5629     {
5630       tree fns;
5631
5632       for (fns = overload; fns; fns = OVL_NEXT (fns))
5633         {
5634           tree fn = OVL_CURRENT (fns);
5635           tree fntype;
5636
5637           if (TREE_CODE (fn) == TEMPLATE_DECL)
5638             /* We're not looking for templates just yet.  */
5639             continue;
5640
5641           if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5642               != is_ptrmem)
5643             /* We're looking for a non-static member, and this isn't
5644                one, or vice versa.  */
5645             continue;
5646
5647           /* Ignore anticipated decls of undeclared builtins.  */
5648           if (DECL_ANTICIPATED (fn))
5649             continue;
5650
5651           /* See if there's a match.  */
5652           fntype = TREE_TYPE (fn);
5653           if (is_ptrmem)
5654             fntype = build_ptrmemfunc_type (build_pointer_type (fntype));
5655           else if (!is_reference)
5656             fntype = build_pointer_type (fntype);
5657
5658           if (can_convert_arg (target_type, fntype, fn))
5659             matches = tree_cons (fn, NULL_TREE, matches);
5660         }
5661     }
5662
5663   /* Now, if we've already got a match (or matches), there's no need
5664      to proceed to the template functions.  But, if we don't have a
5665      match we need to look at them, too.  */
5666   if (!matches) 
5667     {
5668       tree target_fn_type;
5669       tree target_arg_types;
5670       tree target_ret_type;
5671       tree fns;
5672
5673       if (is_ptrmem)
5674         target_fn_type
5675           = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (target_type));
5676       else
5677         target_fn_type = TREE_TYPE (target_type);
5678       target_arg_types = TYPE_ARG_TYPES (target_fn_type);
5679       target_ret_type = TREE_TYPE (target_fn_type);
5680
5681       /* Never do unification on the 'this' parameter.  */
5682       if (TREE_CODE (target_fn_type) == METHOD_TYPE)
5683         target_arg_types = TREE_CHAIN (target_arg_types);
5684           
5685       for (fns = overload; fns; fns = OVL_NEXT (fns))
5686         {
5687           tree fn = OVL_CURRENT (fns);
5688           tree instantiation;
5689           tree instantiation_type;
5690           tree targs;
5691
5692           if (TREE_CODE (fn) != TEMPLATE_DECL)
5693             /* We're only looking for templates.  */
5694             continue;
5695
5696           if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5697               != is_ptrmem)
5698             /* We're not looking for a non-static member, and this is
5699                one, or vice versa.  */
5700             continue;
5701
5702           /* Try to do argument deduction.  */
5703           targs = make_tree_vec (DECL_NTPARMS (fn));
5704           if (fn_type_unification (fn, explicit_targs, targs,
5705                                    target_arg_types, target_ret_type,
5706                                    DEDUCE_EXACT, -1) != 0)
5707             /* Argument deduction failed.  */
5708             continue;
5709
5710           /* Instantiate the template.  */
5711           instantiation = instantiate_template (fn, targs, flags);
5712           if (instantiation == error_mark_node)
5713             /* Instantiation failed.  */
5714             continue;
5715
5716           /* See if there's a match.  */
5717           instantiation_type = TREE_TYPE (instantiation);
5718           if (is_ptrmem)
5719             instantiation_type = 
5720               build_ptrmemfunc_type (build_pointer_type (instantiation_type));
5721           else if (!is_reference)
5722             instantiation_type = build_pointer_type (instantiation_type);
5723           if (can_convert_arg (target_type, instantiation_type, instantiation))
5724             matches = tree_cons (instantiation, fn, matches);
5725         }
5726
5727       /* Now, remove all but the most specialized of the matches.  */
5728       if (matches)
5729         {
5730           tree match = most_specialized_instantiation (matches);
5731
5732           if (match != error_mark_node)
5733             matches = tree_cons (match, NULL_TREE, NULL_TREE);
5734         }
5735     }
5736
5737   /* Now we should have exactly one function in MATCHES.  */
5738   if (matches == NULL_TREE)
5739     {
5740       /* There were *no* matches.  */
5741       if (flags & tf_error)
5742         {
5743           error ("no matches converting function %qD to type %q#T", 
5744                  DECL_NAME (OVL_FUNCTION (overload)),
5745                  target_type);
5746
5747           /* print_candidates expects a chain with the functions in
5748              TREE_VALUE slots, so we cons one up here (we're losing anyway,
5749              so why be clever?).  */
5750           for (; overload; overload = OVL_NEXT (overload))
5751             matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
5752                                  matches);
5753           
5754           print_candidates (matches);
5755         }
5756       return error_mark_node;
5757     }
5758   else if (TREE_CHAIN (matches))
5759     {
5760       /* There were too many matches.  */
5761
5762       if (flags & tf_error)
5763         {
5764           tree match;
5765
5766           error ("converting overloaded function %qD to type %q#T is ambiguous", 
5767                     DECL_NAME (OVL_FUNCTION (overload)),
5768                     target_type);
5769
5770           /* Since print_candidates expects the functions in the
5771              TREE_VALUE slot, we flip them here.  */
5772           for (match = matches; match; match = TREE_CHAIN (match))
5773             TREE_VALUE (match) = TREE_PURPOSE (match);
5774
5775           print_candidates (matches);
5776         }
5777       
5778       return error_mark_node;
5779     }
5780
5781   /* Good, exactly one match.  Now, convert it to the correct type.  */
5782   fn = TREE_PURPOSE (matches);
5783
5784   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
5785       && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
5786     {
5787       static int explained;
5788       
5789       if (!(flags & tf_error))
5790         return error_mark_node;
5791
5792       pedwarn ("assuming pointer to member %qD", fn);
5793       if (!explained)
5794         {
5795           pedwarn ("(a pointer to member can only be formed with %<&%E%>)", fn);
5796           explained = 1;
5797         }
5798     }
5799
5800   /* If we're doing overload resolution purely for the purpose of
5801      determining conversion sequences, we should not consider the
5802      function used.  If this conversion sequence is selected, the
5803      function will be marked as used at this point.  */
5804   if (!(flags & tf_conv))
5805     mark_used (fn);
5806
5807   if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
5808     return build_unary_op (ADDR_EXPR, fn, 0);
5809   else
5810     {
5811       /* The target must be a REFERENCE_TYPE.  Above, build_unary_op
5812          will mark the function as addressed, but here we must do it
5813          explicitly.  */
5814       cxx_mark_addressable (fn);
5815
5816       return fn;
5817     }
5818 }
5819
5820 /* This function will instantiate the type of the expression given in
5821    RHS to match the type of LHSTYPE.  If errors exist, then return
5822    error_mark_node. FLAGS is a bit mask.  If TF_ERROR is set, then
5823    we complain on errors.  If we are not complaining, never modify rhs,
5824    as overload resolution wants to try many possible instantiations, in
5825    the hope that at least one will work.
5826    
5827    For non-recursive calls, LHSTYPE should be a function, pointer to
5828    function, or a pointer to member function.  */
5829
5830 tree
5831 instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
5832 {
5833   tsubst_flags_t flags_in = flags;
5834   
5835   flags &= ~tf_ptrmem_ok;
5836   
5837   if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
5838     {
5839       if (flags & tf_error)
5840         error ("not enough type information");
5841       return error_mark_node;
5842     }
5843
5844   if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
5845     {
5846       if (same_type_p (lhstype, TREE_TYPE (rhs)))
5847         return rhs;
5848       if (flag_ms_extensions 
5849           && TYPE_PTRMEMFUNC_P (lhstype)
5850           && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
5851         /* Microsoft allows `A::f' to be resolved to a
5852            pointer-to-member.  */
5853         ;
5854       else
5855         {
5856           if (flags & tf_error)
5857             error ("argument of type %qT does not match %qT",
5858                    TREE_TYPE (rhs), lhstype);
5859           return error_mark_node;
5860         }
5861     }
5862
5863   if (TREE_CODE (rhs) == BASELINK)
5864     rhs = BASELINK_FUNCTIONS (rhs);
5865
5866   /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
5867      deduce any type information.  */
5868   if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
5869     {
5870       if (flags & tf_error)
5871         error ("not enough type information");
5872       return error_mark_node;
5873     }
5874
5875   /* We don't overwrite rhs if it is an overloaded function.
5876      Copying it would destroy the tree link.  */
5877   if (TREE_CODE (rhs) != OVERLOAD)
5878     rhs = copy_node (rhs);
5879
5880   /* This should really only be used when attempting to distinguish
5881      what sort of a pointer to function we have.  For now, any
5882      arithmetic operation which is not supported on pointers
5883      is rejected as an error.  */
5884
5885   switch (TREE_CODE (rhs))
5886     {
5887     case TYPE_EXPR:
5888     case CONVERT_EXPR:
5889     case SAVE_EXPR:
5890     case CONSTRUCTOR:
5891       gcc_unreachable ();
5892
5893     case INDIRECT_REF:
5894     case ARRAY_REF:
5895       {
5896         tree new_rhs;
5897
5898         new_rhs = instantiate_type (build_pointer_type (lhstype),
5899                                     TREE_OPERAND (rhs, 0), flags);
5900         if (new_rhs == error_mark_node)
5901           return error_mark_node;
5902
5903         TREE_TYPE (rhs) = lhstype;
5904         TREE_OPERAND (rhs, 0) = new_rhs;
5905         return rhs;
5906       }
5907
5908     case NOP_EXPR:
5909       rhs = copy_node (TREE_OPERAND (rhs, 0));
5910       TREE_TYPE (rhs) = unknown_type_node;
5911       return instantiate_type (lhstype, rhs, flags);
5912
5913     case COMPONENT_REF:
5914       {
5915         tree member = TREE_OPERAND (rhs, 1);
5916
5917         member = instantiate_type (lhstype, member, flags);
5918         if (member != error_mark_node
5919             && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
5920           /* Do not lose object's side effects.  */
5921           return build2 (COMPOUND_EXPR, TREE_TYPE (member),
5922                          TREE_OPERAND (rhs, 0), member);
5923         return member;
5924       }
5925
5926     case OFFSET_REF:
5927       rhs = TREE_OPERAND (rhs, 1);
5928       if (BASELINK_P (rhs))
5929         return instantiate_type (lhstype, BASELINK_FUNCTIONS (rhs), flags_in);
5930
5931       /* This can happen if we are forming a pointer-to-member for a
5932          member template.  */
5933       gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
5934
5935       /* Fall through.  */
5936
5937     case TEMPLATE_ID_EXPR:
5938       {
5939         tree fns = TREE_OPERAND (rhs, 0);
5940         tree args = TREE_OPERAND (rhs, 1);
5941
5942         return
5943           resolve_address_of_overloaded_function (lhstype, fns, flags_in,
5944                                                   /*template_only=*/true,
5945                                                   args);
5946       }
5947
5948     case OVERLOAD:
5949     case FUNCTION_DECL:
5950       return 
5951         resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
5952                                                 /*template_only=*/false,
5953                                                 /*explicit_targs=*/NULL_TREE);
5954
5955     case CALL_EXPR:
5956       /* This is too hard for now.  */
5957       gcc_unreachable ();
5958
5959     case PLUS_EXPR:
5960     case MINUS_EXPR:
5961     case COMPOUND_EXPR:
5962       TREE_OPERAND (rhs, 0)
5963         = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
5964       if (TREE_OPERAND (rhs, 0) == error_mark_node)
5965         return error_mark_node;
5966       TREE_OPERAND (rhs, 1)
5967         = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
5968       if (TREE_OPERAND (rhs, 1) == error_mark_node)
5969         return error_mark_node;
5970
5971       TREE_TYPE (rhs) = lhstype;
5972       return rhs;
5973
5974     case MULT_EXPR:
5975     case TRUNC_DIV_EXPR:
5976     case FLOOR_DIV_EXPR:
5977     case CEIL_DIV_EXPR:
5978     case ROUND_DIV_EXPR:
5979     case RDIV_EXPR:
5980     case TRUNC_MOD_EXPR:
5981     case FLOOR_MOD_EXPR:
5982     case CEIL_MOD_EXPR:
5983     case ROUND_MOD_EXPR:
5984     case FIX_ROUND_EXPR:
5985     case FIX_FLOOR_EXPR:
5986     case FIX_CEIL_EXPR:
5987     case FIX_TRUNC_EXPR:
5988     case FLOAT_EXPR:
5989     case NEGATE_EXPR:
5990     case ABS_EXPR:
5991     case MAX_EXPR:
5992     case MIN_EXPR:
5993
5994     case BIT_AND_EXPR:
5995     case BIT_IOR_EXPR:
5996     case BIT_XOR_EXPR:
5997     case LSHIFT_EXPR:
5998     case RSHIFT_EXPR:
5999     case LROTATE_EXPR:
6000     case RROTATE_EXPR:
6001
6002     case PREINCREMENT_EXPR:
6003     case PREDECREMENT_EXPR:
6004     case POSTINCREMENT_EXPR:
6005     case POSTDECREMENT_EXPR:
6006       if (flags & tf_error)
6007         error ("invalid operation on uninstantiated type");
6008       return error_mark_node;
6009
6010     case TRUTH_AND_EXPR:
6011     case TRUTH_OR_EXPR:
6012     case TRUTH_XOR_EXPR:
6013     case LT_EXPR:
6014     case LE_EXPR:
6015     case GT_EXPR:
6016     case GE_EXPR:
6017     case EQ_EXPR:
6018     case NE_EXPR:
6019     case TRUTH_ANDIF_EXPR:
6020     case TRUTH_ORIF_EXPR:
6021     case TRUTH_NOT_EXPR:
6022       if (flags & tf_error)
6023         error ("not enough type information");
6024       return error_mark_node;
6025
6026     case COND_EXPR:
6027       if (type_unknown_p (TREE_OPERAND (rhs, 0)))
6028         {
6029           if (flags & tf_error)
6030             error ("not enough type information");
6031           return error_mark_node;
6032         }
6033       TREE_OPERAND (rhs, 1)
6034         = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6035       if (TREE_OPERAND (rhs, 1) == error_mark_node)
6036         return error_mark_node;
6037       TREE_OPERAND (rhs, 2)
6038         = instantiate_type (lhstype, TREE_OPERAND (rhs, 2), flags);
6039       if (TREE_OPERAND (rhs, 2) == error_mark_node)
6040         return error_mark_node;
6041
6042       TREE_TYPE (rhs) = lhstype;
6043       return rhs;
6044
6045     case MODIFY_EXPR:
6046       TREE_OPERAND (rhs, 1)
6047         = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6048       if (TREE_OPERAND (rhs, 1) == error_mark_node)
6049         return error_mark_node;
6050
6051       TREE_TYPE (rhs) = lhstype;
6052       return rhs;
6053       
6054     case ADDR_EXPR:
6055     {
6056       if (PTRMEM_OK_P (rhs))
6057         flags |= tf_ptrmem_ok;
6058       
6059       return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6060     }
6061
6062     case ERROR_MARK:
6063       return error_mark_node;
6064
6065     default:
6066       gcc_unreachable ();
6067     }
6068   return error_mark_node;
6069 }
6070 \f
6071 /* Return the name of the virtual function pointer field
6072    (as an IDENTIFIER_NODE) for the given TYPE.  Note that
6073    this may have to look back through base types to find the
6074    ultimate field name.  (For single inheritance, these could
6075    all be the same name.  Who knows for multiple inheritance).  */
6076
6077 static tree
6078 get_vfield_name (tree type)
6079 {
6080   tree binfo, base_binfo;
6081   char *buf;
6082
6083   for (binfo = TYPE_BINFO (type);
6084        BINFO_N_BASE_BINFOS (binfo);
6085        binfo = base_binfo)
6086     {
6087       base_binfo = BINFO_BASE_BINFO (binfo, 0);
6088
6089       if (BINFO_VIRTUAL_P (base_binfo)
6090           || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
6091         break;
6092     }
6093   
6094   type = BINFO_TYPE (binfo);
6095   buf = alloca (sizeof (VFIELD_NAME_FORMAT) + TYPE_NAME_LENGTH (type) + 2);
6096   sprintf (buf, VFIELD_NAME_FORMAT,
6097            IDENTIFIER_POINTER (constructor_name (type)));
6098   return get_identifier (buf);
6099 }
6100
6101 void
6102 print_class_statistics (void)
6103 {
6104 #ifdef GATHER_STATISTICS
6105   fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6106   fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
6107   if (n_vtables)
6108     {
6109       fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6110                n_vtables, n_vtable_searches);
6111       fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6112                n_vtable_entries, n_vtable_elems);
6113     }
6114 #endif
6115 }
6116
6117 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6118    according to [class]:
6119                                           The class-name is also inserted
6120    into  the scope of the class itself.  For purposes of access checking,
6121    the inserted class name is treated as if it were a public member name.  */
6122
6123 void
6124 build_self_reference (void)
6125 {
6126   tree name = constructor_name (current_class_type);
6127   tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6128   tree saved_cas;
6129
6130   DECL_NONLOCAL (value) = 1;
6131   DECL_CONTEXT (value) = current_class_type;
6132   DECL_ARTIFICIAL (value) = 1;
6133   SET_DECL_SELF_REFERENCE_P (value);
6134
6135   if (processing_template_decl)
6136     value = push_template_decl (value);
6137
6138   saved_cas = current_access_specifier;
6139   current_access_specifier = access_public_node;
6140   finish_member_declaration (value);
6141   current_access_specifier = saved_cas;
6142 }
6143
6144 /* Returns 1 if TYPE contains only padding bytes.  */
6145
6146 int
6147 is_empty_class (tree type)
6148 {
6149   if (type == error_mark_node)
6150     return 0;
6151
6152   if (! IS_AGGR_TYPE (type))
6153     return 0;
6154
6155   /* In G++ 3.2, whether or not a class was empty was determined by
6156      looking at its size.  */
6157   if (abi_version_at_least (2))
6158     return CLASSTYPE_EMPTY_P (type);
6159   else
6160     return integer_zerop (CLASSTYPE_SIZE (type));
6161 }
6162
6163 /* Returns true if TYPE contains an empty class.  */
6164
6165 static bool
6166 contains_empty_class_p (tree type)
6167 {
6168   if (is_empty_class (type))
6169     return true;
6170   if (CLASS_TYPE_P (type))
6171     {
6172       tree field;
6173       tree binfo;
6174       tree base_binfo;
6175       int i;
6176
6177       for (binfo = TYPE_BINFO (type), i = 0;
6178            BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6179         if (contains_empty_class_p (BINFO_TYPE (base_binfo)))
6180           return true;
6181       for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
6182         if (TREE_CODE (field) == FIELD_DECL
6183             && !DECL_ARTIFICIAL (field)
6184             && is_empty_class (TREE_TYPE (field)))
6185           return true;
6186     }
6187   else if (TREE_CODE (type) == ARRAY_TYPE)
6188     return contains_empty_class_p (TREE_TYPE (type));
6189   return false;
6190 }
6191
6192 /* Find the enclosing class of the given NODE.  NODE can be a *_DECL or
6193    a *_TYPE node.  NODE can also be a local class.  */
6194
6195 tree
6196 get_enclosing_class (tree type)
6197 {
6198   tree node = type;
6199
6200   while (node && TREE_CODE (node) != NAMESPACE_DECL)
6201     {
6202       switch (TREE_CODE_CLASS (TREE_CODE (node)))
6203         {
6204         case tcc_declaration:
6205           node = DECL_CONTEXT (node);
6206           break;
6207
6208         case tcc_type:
6209           if (node != type)
6210             return node;
6211           node = TYPE_CONTEXT (node);
6212           break;
6213
6214         default:
6215           gcc_unreachable ();
6216         }
6217     }
6218   return NULL_TREE;
6219 }
6220
6221 /* Note that NAME was looked up while the current class was being
6222    defined and that the result of that lookup was DECL.  */
6223
6224 void
6225 maybe_note_name_used_in_class (tree name, tree decl)
6226 {
6227   splay_tree names_used;
6228
6229   /* If we're not defining a class, there's nothing to do.  */
6230   if (!(innermost_scope_kind() == sk_class
6231         && TYPE_BEING_DEFINED (current_class_type)))
6232     return;
6233   
6234   /* If there's already a binding for this NAME, then we don't have
6235      anything to worry about.  */
6236   if (lookup_member (current_class_type, name, 
6237                      /*protect=*/0, /*want_type=*/false))
6238     return;
6239
6240   if (!current_class_stack[current_class_depth - 1].names_used)
6241     current_class_stack[current_class_depth - 1].names_used
6242       = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6243   names_used = current_class_stack[current_class_depth - 1].names_used;
6244
6245   splay_tree_insert (names_used,
6246                      (splay_tree_key) name, 
6247                      (splay_tree_value) decl);
6248 }
6249
6250 /* Note that NAME was declared (as DECL) in the current class.  Check
6251    to see that the declaration is valid.  */
6252
6253 void
6254 note_name_declared_in_class (tree name, tree decl)
6255 {
6256   splay_tree names_used;
6257   splay_tree_node n;
6258
6259   /* Look to see if we ever used this name.  */
6260   names_used 
6261     = current_class_stack[current_class_depth - 1].names_used;
6262   if (!names_used)
6263     return;
6264
6265   n = splay_tree_lookup (names_used, (splay_tree_key) name);
6266   if (n)
6267     {
6268       /* [basic.scope.class]
6269          
6270          A name N used in a class S shall refer to the same declaration
6271          in its context and when re-evaluated in the completed scope of
6272          S.  */
6273       error ("declaration of %q#D", decl);
6274       cp_error_at ("changes meaning of %qD from %q+#D", 
6275                    DECL_NAME (OVL_CURRENT (decl)),
6276                    (tree) n->value);
6277     }
6278 }
6279
6280 /* Returns the VAR_DECL for the complete vtable associated with BINFO.
6281    Secondary vtables are merged with primary vtables; this function
6282    will return the VAR_DECL for the primary vtable.  */
6283
6284 tree
6285 get_vtbl_decl_for_binfo (tree binfo)
6286 {
6287   tree decl;
6288
6289   decl = BINFO_VTABLE (binfo);
6290   if (decl && TREE_CODE (decl) == PLUS_EXPR)
6291     {
6292       gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
6293       decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
6294     }
6295   if (decl)
6296     gcc_assert (TREE_CODE (decl) == VAR_DECL);
6297   return decl;
6298 }
6299
6300
6301 /* Returns the binfo for the primary base of BINFO.  If the resulting
6302    BINFO is a virtual base, and it is inherited elsewhere in the
6303    hierarchy, then the returned binfo might not be the primary base of
6304    BINFO in the complete object.  Check BINFO_PRIMARY_P or
6305    BINFO_LOST_PRIMARY_P to be sure.  */
6306
6307 tree
6308 get_primary_binfo (tree binfo)
6309 {
6310   tree primary_base;
6311   tree result;
6312   
6313   primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
6314   if (!primary_base)
6315     return NULL_TREE;
6316
6317   result = copied_binfo (primary_base, binfo);
6318   return result;
6319 }
6320
6321 /* If INDENTED_P is zero, indent to INDENT. Return nonzero.  */
6322
6323 static int
6324 maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
6325 {
6326   if (!indented_p)
6327     fprintf (stream, "%*s", indent, "");
6328   return 1;
6329 }
6330
6331 /* Dump the offsets of all the bases rooted at BINFO to STREAM.
6332    INDENT should be zero when called from the top level; it is
6333    incremented recursively.  IGO indicates the next expected BINFO in
6334    inheritance graph ordering.  */
6335
6336 static tree
6337 dump_class_hierarchy_r (FILE *stream,
6338                         int flags,
6339                         tree binfo,
6340                         tree igo,
6341                         int indent)
6342 {
6343   int indented = 0;
6344   tree base_binfo;
6345   int i;
6346   
6347   indented = maybe_indent_hierarchy (stream, indent, 0);
6348   fprintf (stream, "%s (0x%lx) ",
6349            type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
6350            (unsigned long) binfo);
6351   if (binfo != igo)
6352     {
6353       fprintf (stream, "alternative-path\n");
6354       return igo;
6355     }
6356   igo = TREE_CHAIN (binfo);
6357   
6358   fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
6359            tree_low_cst (BINFO_OFFSET (binfo), 0));
6360   if (is_empty_class (BINFO_TYPE (binfo)))
6361     fprintf (stream, " empty");
6362   else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
6363     fprintf (stream, " nearly-empty");
6364   if (BINFO_VIRTUAL_P (binfo))
6365     fprintf (stream, " virtual");
6366   fprintf (stream, "\n");
6367
6368   indented = 0;
6369   if (BINFO_PRIMARY_P (binfo))
6370     {
6371       indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6372       fprintf (stream, " primary-for %s (0x%lx)",
6373                type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
6374                                TFF_PLAIN_IDENTIFIER),
6375                (unsigned long)BINFO_INHERITANCE_CHAIN (binfo));
6376     }
6377   if (BINFO_LOST_PRIMARY_P (binfo))
6378     {
6379       indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6380       fprintf (stream, " lost-primary");
6381     }
6382   if (indented)
6383     fprintf (stream, "\n");
6384
6385   if (!(flags & TDF_SLIM))
6386     {
6387       int indented = 0;
6388       
6389       if (BINFO_SUBVTT_INDEX (binfo))
6390         {
6391           indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6392           fprintf (stream, " subvttidx=%s",
6393                    expr_as_string (BINFO_SUBVTT_INDEX (binfo),
6394                                    TFF_PLAIN_IDENTIFIER));
6395         }
6396       if (BINFO_VPTR_INDEX (binfo))
6397         {
6398           indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6399           fprintf (stream, " vptridx=%s",
6400                    expr_as_string (BINFO_VPTR_INDEX (binfo),
6401                                    TFF_PLAIN_IDENTIFIER));
6402         }
6403       if (BINFO_VPTR_FIELD (binfo))
6404         {
6405           indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6406           fprintf (stream, " vbaseoffset=%s",
6407                    expr_as_string (BINFO_VPTR_FIELD (binfo),
6408                                    TFF_PLAIN_IDENTIFIER));
6409         }
6410       if (BINFO_VTABLE (binfo))
6411         {
6412           indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6413           fprintf (stream, " vptr=%s",
6414                    expr_as_string (BINFO_VTABLE (binfo),
6415                                    TFF_PLAIN_IDENTIFIER));
6416         }
6417       
6418       if (indented)
6419         fprintf (stream, "\n");
6420     }
6421
6422   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
6423     igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
6424   
6425   return igo;
6426 }
6427
6428 /* Dump the BINFO hierarchy for T.  */
6429
6430 static void
6431 dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
6432 {
6433   fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6434   fprintf (stream, "   size=%lu align=%lu\n",
6435            (unsigned long)(tree_low_cst (TYPE_SIZE (t), 0) / BITS_PER_UNIT),
6436            (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
6437   fprintf (stream, "   base size=%lu base align=%lu\n",
6438            (unsigned long)(tree_low_cst (TYPE_SIZE (CLASSTYPE_AS_BASE (t)), 0)
6439                            / BITS_PER_UNIT),
6440            (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
6441                            / BITS_PER_UNIT));
6442   dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
6443   fprintf (stream, "\n");
6444 }
6445
6446 /* Debug interface to hierarchy dumping.  */
6447
6448 extern void
6449 debug_class (tree t)
6450 {
6451   dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
6452 }
6453
6454 static void
6455 dump_class_hierarchy (tree t)
6456 {
6457   int flags;
6458   FILE *stream = dump_begin (TDI_class, &flags);
6459
6460   if (stream)
6461     {
6462       dump_class_hierarchy_1 (stream, flags, t);
6463       dump_end (TDI_class, stream);
6464     }
6465 }
6466
6467 static void
6468 dump_array (FILE * stream, tree decl)
6469 {
6470   tree inits;
6471   int ix;
6472   HOST_WIDE_INT elt;
6473   tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
6474
6475   elt = (tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))), 0)
6476          / BITS_PER_UNIT);
6477   fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
6478   fprintf (stream, " %s entries",
6479            expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
6480                            TFF_PLAIN_IDENTIFIER));
6481   fprintf (stream, "\n");
6482
6483   for (ix = 0, inits = CONSTRUCTOR_ELTS (DECL_INITIAL (decl));
6484        inits; ix++, inits = TREE_CHAIN (inits))
6485     fprintf (stream, "%-4ld  %s\n", (long)(ix * elt),
6486              expr_as_string (TREE_VALUE (inits), TFF_PLAIN_IDENTIFIER));
6487 }
6488
6489 static void
6490 dump_vtable (tree t, tree binfo, tree vtable)
6491 {
6492   int flags;
6493   FILE *stream = dump_begin (TDI_class, &flags);
6494
6495   if (!stream)
6496     return;
6497
6498   if (!(flags & TDF_SLIM))
6499     {
6500       int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
6501       
6502       fprintf (stream, "%s for %s",
6503                ctor_vtbl_p ? "Construction vtable" : "Vtable",
6504                type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
6505       if (ctor_vtbl_p)
6506         {
6507           if (!BINFO_VIRTUAL_P (binfo))
6508             fprintf (stream, " (0x%lx instance)", (unsigned long)binfo);
6509           fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6510         }
6511       fprintf (stream, "\n");
6512       dump_array (stream, vtable);
6513       fprintf (stream, "\n");
6514     }
6515   
6516   dump_end (TDI_class, stream);
6517 }
6518
6519 static void
6520 dump_vtt (tree t, tree vtt)
6521 {
6522   int flags;
6523   FILE *stream = dump_begin (TDI_class, &flags);
6524
6525   if (!stream)
6526     return;
6527
6528   if (!(flags & TDF_SLIM))
6529     {
6530       fprintf (stream, "VTT for %s\n",
6531                type_as_string (t, TFF_PLAIN_IDENTIFIER));
6532       dump_array (stream, vtt);
6533       fprintf (stream, "\n");
6534     }
6535   
6536   dump_end (TDI_class, stream);
6537 }
6538
6539 /* Dump a function or thunk and its thunkees.  */
6540
6541 static void
6542 dump_thunk (FILE *stream, int indent, tree thunk)
6543 {
6544   static const char spaces[] = "        ";
6545   tree name = DECL_NAME (thunk);
6546   tree thunks;
6547       
6548   fprintf (stream, "%.*s%p %s %s", indent, spaces,
6549            (void *)thunk,
6550            !DECL_THUNK_P (thunk) ? "function"
6551            : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
6552            name ? IDENTIFIER_POINTER (name) : "<unset>");
6553   if (DECL_THUNK_P (thunk))
6554     {
6555       HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
6556       tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
6557
6558       fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
6559       if (!virtual_adjust)
6560         /*NOP*/;
6561       else if (DECL_THIS_THUNK_P (thunk))
6562         fprintf (stream, " vcall="  HOST_WIDE_INT_PRINT_DEC,
6563                  tree_low_cst (virtual_adjust, 0));
6564       else
6565         fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
6566                  tree_low_cst (BINFO_VPTR_FIELD (virtual_adjust), 0),
6567                  type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
6568       if (THUNK_ALIAS (thunk))
6569         fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
6570     }
6571   fprintf (stream, "\n");
6572   for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
6573     dump_thunk (stream, indent + 2, thunks);
6574 }
6575
6576 /* Dump the thunks for FN.  */
6577
6578 extern void
6579 debug_thunks (tree fn)
6580 {
6581   dump_thunk (stderr, 0, fn);
6582 }
6583
6584 /* Virtual function table initialization.  */
6585
6586 /* Create all the necessary vtables for T and its base classes.  */
6587
6588 static void
6589 finish_vtbls (tree t)
6590 {
6591   tree list;
6592   tree vbase;
6593
6594   /* We lay out the primary and secondary vtables in one contiguous
6595      vtable.  The primary vtable is first, followed by the non-virtual
6596      secondary vtables in inheritance graph order.  */
6597   list = build_tree_list (BINFO_VTABLE (TYPE_BINFO (t)), NULL_TREE);
6598   accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t),
6599                          TYPE_BINFO (t), t, list);
6600   
6601   /* Then come the virtual bases, also in inheritance graph order.  */
6602   for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
6603     {
6604       if (!BINFO_VIRTUAL_P (vbase))
6605         continue;
6606       accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), t, list);
6607     }
6608
6609   if (BINFO_VTABLE (TYPE_BINFO (t)))
6610     initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list));
6611 }
6612
6613 /* Initialize the vtable for BINFO with the INITS.  */
6614
6615 static void
6616 initialize_vtable (tree binfo, tree inits)
6617 {
6618   tree decl;
6619
6620   layout_vtable_decl (binfo, list_length (inits));
6621   decl = get_vtbl_decl_for_binfo (binfo);
6622   initialize_artificial_var (decl, inits);
6623   dump_vtable (BINFO_TYPE (binfo), binfo, decl);
6624 }
6625
6626 /* Build the VTT (virtual table table) for T.
6627    A class requires a VTT if it has virtual bases.
6628    
6629    This holds
6630    1 - primary virtual pointer for complete object T
6631    2 - secondary VTTs for each direct non-virtual base of T which requires a
6632        VTT
6633    3 - secondary virtual pointers for each direct or indirect base of T which
6634        has virtual bases or is reachable via a virtual path from T.
6635    4 - secondary VTTs for each direct or indirect virtual base of T.
6636    
6637    Secondary VTTs look like complete object VTTs without part 4.  */
6638
6639 static void
6640 build_vtt (tree t)
6641 {
6642   tree inits;
6643   tree type;
6644   tree vtt;
6645   tree index;
6646
6647   /* Build up the initializers for the VTT.  */
6648   inits = NULL_TREE;
6649   index = size_zero_node;
6650   build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
6651
6652   /* If we didn't need a VTT, we're done.  */
6653   if (!inits)
6654     return;
6655
6656   /* Figure out the type of the VTT.  */
6657   type = build_index_type (size_int (list_length (inits) - 1));
6658   type = build_cplus_array_type (const_ptr_type_node, type);
6659                                  
6660   /* Now, build the VTT object itself.  */
6661   vtt = build_vtable (t, get_vtt_name (t), type);
6662   initialize_artificial_var (vtt, inits);
6663   /* Add the VTT to the vtables list.  */
6664   TREE_CHAIN (vtt) = TREE_CHAIN (CLASSTYPE_VTABLES (t));
6665   TREE_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
6666
6667   dump_vtt (t, vtt);
6668 }
6669
6670 /* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
6671    PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
6672    and CHAIN the vtable pointer for this binfo after construction is
6673    complete.  VALUE can also be another BINFO, in which case we recurse.  */
6674
6675 static tree
6676 binfo_ctor_vtable (tree binfo)
6677 {
6678   tree vt;
6679
6680   while (1)
6681     {
6682       vt = BINFO_VTABLE (binfo);
6683       if (TREE_CODE (vt) == TREE_LIST)
6684         vt = TREE_VALUE (vt);
6685       if (TREE_CODE (vt) == TREE_BINFO)
6686         binfo = vt;
6687       else
6688         break;
6689     }
6690
6691   return vt;
6692 }
6693
6694 /* Data for secondary VTT initialization.  */
6695 typedef struct secondary_vptr_vtt_init_data_s
6696 {
6697   /* Is this the primary VTT? */
6698   bool top_level_p;
6699
6700   /* Current index into the VTT.  */
6701   tree index;
6702
6703   /* TREE_LIST of initializers built up.  */
6704   tree inits;
6705
6706   /* The type being constructed by this secondary VTT.  */
6707   tree type_being_constructed;
6708 } secondary_vptr_vtt_init_data;
6709
6710 /* Recursively build the VTT-initializer for BINFO (which is in the
6711    hierarchy dominated by T).  INITS points to the end of the initializer
6712    list to date.  INDEX is the VTT index where the next element will be
6713    replaced.  Iff BINFO is the binfo for T, this is the top level VTT (i.e.
6714    not a subvtt for some base of T).  When that is so, we emit the sub-VTTs
6715    for virtual bases of T. When it is not so, we build the constructor
6716    vtables for the BINFO-in-T variant.  */
6717
6718 static tree *
6719 build_vtt_inits (tree binfo, tree t, tree *inits, tree *index)
6720 {
6721   int i;
6722   tree b;
6723   tree init;
6724   tree secondary_vptrs;
6725   secondary_vptr_vtt_init_data data;
6726   int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
6727
6728   /* We only need VTTs for subobjects with virtual bases.  */
6729   if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
6730     return inits;
6731
6732   /* We need to use a construction vtable if this is not the primary
6733      VTT.  */
6734   if (!top_level_p)
6735     {
6736       build_ctor_vtbl_group (binfo, t);
6737
6738       /* Record the offset in the VTT where this sub-VTT can be found.  */
6739       BINFO_SUBVTT_INDEX (binfo) = *index;
6740     }
6741
6742   /* Add the address of the primary vtable for the complete object.  */
6743   init = binfo_ctor_vtable (binfo);
6744   *inits = build_tree_list (NULL_TREE, init);
6745   inits = &TREE_CHAIN (*inits);
6746   if (top_level_p)
6747     {
6748       gcc_assert (!BINFO_VPTR_INDEX (binfo));
6749       BINFO_VPTR_INDEX (binfo) = *index;
6750     }
6751   *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
6752                        
6753   /* Recursively add the secondary VTTs for non-virtual bases.  */
6754   for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
6755     if (!BINFO_VIRTUAL_P (b))
6756       inits = build_vtt_inits (b, t, inits, index);
6757       
6758   /* Add secondary virtual pointers for all subobjects of BINFO with
6759      either virtual bases or reachable along a virtual path, except
6760      subobjects that are non-virtual primary bases.  */
6761   data.top_level_p = top_level_p;
6762   data.index = *index;
6763   data.inits = NULL;
6764   data.type_being_constructed = BINFO_TYPE (binfo);
6765   
6766   dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
6767
6768   *index = data.index;
6769
6770   /* The secondary vptrs come back in reverse order.  After we reverse
6771      them, and add the INITS, the last init will be the first element
6772      of the chain.  */
6773   secondary_vptrs = data.inits;
6774   if (secondary_vptrs)
6775     {
6776       *inits = nreverse (secondary_vptrs);
6777       inits = &TREE_CHAIN (secondary_vptrs);
6778       gcc_assert (*inits == NULL_TREE);
6779     }
6780
6781   if (top_level_p)
6782     /* Add the secondary VTTs for virtual bases in inheritance graph
6783        order.  */
6784     for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
6785       {
6786         if (!BINFO_VIRTUAL_P (b))
6787           continue;
6788         
6789         inits = build_vtt_inits (b, t, inits, index);
6790       }
6791   else
6792     /* Remove the ctor vtables we created.  */
6793     dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
6794
6795   return inits;
6796 }
6797
6798 /* Called from build_vtt_inits via dfs_walk.  BINFO is the binfo for the base
6799    in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure.  */
6800
6801 static tree
6802 dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
6803 {
6804   secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
6805
6806   /* We don't care about bases that don't have vtables.  */
6807   if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
6808     return dfs_skip_bases;
6809
6810   /* We're only interested in proper subobjects of the type being
6811      constructed.  */
6812   if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
6813     return NULL_TREE;
6814
6815   /* We're only interested in bases with virtual bases or reachable
6816      via a virtual path from the type being constructed.  */
6817   if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
6818         || binfo_via_virtual (binfo, data->type_being_constructed)))
6819     return dfs_skip_bases;
6820   
6821   /* We're not interested in non-virtual primary bases.  */
6822   if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
6823     return NULL_TREE;
6824   
6825   /* Record the index where this secondary vptr can be found.  */
6826   if (data->top_level_p)
6827     {
6828       gcc_assert (!BINFO_VPTR_INDEX (binfo));
6829       BINFO_VPTR_INDEX (binfo) = data->index;
6830
6831       if (BINFO_VIRTUAL_P (binfo))
6832         {
6833           /* It's a primary virtual base, and this is not a
6834              construction vtable.  Find the base this is primary of in
6835              the inheritance graph, and use that base's vtable
6836              now.  */
6837           while (BINFO_PRIMARY_P (binfo))
6838             binfo = BINFO_INHERITANCE_CHAIN (binfo);
6839         }
6840     }
6841   
6842   /* Add the initializer for the secondary vptr itself.  */
6843   data->inits = tree_cons (NULL_TREE, binfo_ctor_vtable (binfo), data->inits);
6844
6845   /* Advance the vtt index.  */
6846   data->index = size_binop (PLUS_EXPR, data->index,
6847                             TYPE_SIZE_UNIT (ptr_type_node));
6848
6849   return NULL_TREE;
6850 }
6851
6852 /* Called from build_vtt_inits via dfs_walk. After building
6853    constructor vtables and generating the sub-vtt from them, we need
6854    to restore the BINFO_VTABLES that were scribbled on.  DATA is the
6855    binfo of the base whose sub vtt was generated.  */
6856
6857 static tree
6858 dfs_fixup_binfo_vtbls (tree binfo, void* data)
6859 {
6860   tree vtable = BINFO_VTABLE (binfo);
6861
6862   if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
6863     /* If this class has no vtable, none of its bases do.  */
6864     return dfs_skip_bases;
6865   
6866   if (!vtable)
6867     /* This might be a primary base, so have no vtable in this
6868        hierarchy.  */
6869     return NULL_TREE;
6870   
6871   /* If we scribbled the construction vtable vptr into BINFO, clear it
6872      out now.  */
6873   if (TREE_CODE (vtable) == TREE_LIST
6874       && (TREE_PURPOSE (vtable) == (tree) data))
6875     BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
6876
6877   return NULL_TREE;
6878 }
6879
6880 /* Build the construction vtable group for BINFO which is in the
6881    hierarchy dominated by T.  */
6882
6883 static void
6884 build_ctor_vtbl_group (tree binfo, tree t)
6885 {
6886   tree list;
6887   tree type;
6888   tree vtbl;
6889   tree inits;
6890   tree id;
6891   tree vbase;
6892
6893   /* See if we've already created this construction vtable group.  */
6894   id = mangle_ctor_vtbl_for_type (t, binfo);
6895   if (IDENTIFIER_GLOBAL_VALUE (id))
6896     return;
6897
6898   gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
6899   /* Build a version of VTBL (with the wrong type) for use in
6900      constructing the addresses of secondary vtables in the
6901      construction vtable group.  */
6902   vtbl = build_vtable (t, id, ptr_type_node);
6903   DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
6904   list = build_tree_list (vtbl, NULL_TREE);
6905   accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
6906                          binfo, t, list);
6907
6908   /* Add the vtables for each of our virtual bases using the vbase in T
6909      binfo.  */
6910   for (vbase = TYPE_BINFO (BINFO_TYPE (binfo)); 
6911        vbase; 
6912        vbase = TREE_CHAIN (vbase))
6913     {
6914       tree b;
6915
6916       if (!BINFO_VIRTUAL_P (vbase))
6917         continue;
6918       b = copied_binfo (vbase, binfo);
6919       
6920       accumulate_vtbl_inits (b, vbase, binfo, t, list);
6921     }
6922   inits = TREE_VALUE (list);
6923
6924   /* Figure out the type of the construction vtable.  */
6925   type = build_index_type (size_int (list_length (inits) - 1));
6926   type = build_cplus_array_type (vtable_entry_type, type);
6927   TREE_TYPE (vtbl) = type;
6928
6929   /* Initialize the construction vtable.  */
6930   CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
6931   initialize_artificial_var (vtbl, inits);
6932   dump_vtable (t, binfo, vtbl);
6933 }
6934
6935 /* Add the vtbl initializers for BINFO (and its bases other than
6936    non-virtual primaries) to the list of INITS.  BINFO is in the
6937    hierarchy dominated by T.  RTTI_BINFO is the binfo within T of
6938    the constructor the vtbl inits should be accumulated for. (If this
6939    is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
6940    ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
6941    BINFO is the active base equivalent of ORIG_BINFO in the inheritance
6942    graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
6943    but are not necessarily the same in terms of layout.  */
6944
6945 static void
6946 accumulate_vtbl_inits (tree binfo,
6947                        tree orig_binfo,
6948                        tree rtti_binfo,
6949                        tree t,
6950                        tree inits)
6951 {
6952   int i;
6953   tree base_binfo;
6954   int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
6955
6956   gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
6957
6958   /* If it doesn't have a vptr, we don't do anything.  */
6959   if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
6960     return;
6961   
6962   /* If we're building a construction vtable, we're not interested in
6963      subobjects that don't require construction vtables.  */
6964   if (ctor_vtbl_p 
6965       && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
6966       && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
6967     return;
6968
6969   /* Build the initializers for the BINFO-in-T vtable.  */
6970   TREE_VALUE (inits) 
6971     = chainon (TREE_VALUE (inits),
6972                dfs_accumulate_vtbl_inits (binfo, orig_binfo,
6973                                           rtti_binfo, t, inits));
6974                       
6975   /* Walk the BINFO and its bases.  We walk in preorder so that as we
6976      initialize each vtable we can figure out at what offset the
6977      secondary vtable lies from the primary vtable.  We can't use
6978      dfs_walk here because we need to iterate through bases of BINFO
6979      and RTTI_BINFO simultaneously.  */
6980   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6981     {
6982       /* Skip virtual bases.  */
6983       if (BINFO_VIRTUAL_P (base_binfo))
6984         continue;
6985       accumulate_vtbl_inits (base_binfo,
6986                              BINFO_BASE_BINFO (orig_binfo, i),
6987                              rtti_binfo, t,
6988                              inits);
6989     }
6990 }
6991
6992 /* Called from accumulate_vtbl_inits.  Returns the initializers for
6993    the BINFO vtable.  */
6994
6995 static tree
6996 dfs_accumulate_vtbl_inits (tree binfo,
6997                            tree orig_binfo,
6998                            tree rtti_binfo,
6999                            tree t,
7000                            tree l)
7001 {
7002   tree inits = NULL_TREE;
7003   tree vtbl = NULL_TREE;
7004   int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7005
7006   if (ctor_vtbl_p
7007       && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
7008     {
7009       /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
7010          primary virtual base.  If it is not the same primary in
7011          the hierarchy of T, we'll need to generate a ctor vtable
7012          for it, to place at its location in T.  If it is the same
7013          primary, we still need a VTT entry for the vtable, but it
7014          should point to the ctor vtable for the base it is a
7015          primary for within the sub-hierarchy of RTTI_BINFO.
7016               
7017          There are three possible cases:
7018               
7019          1) We are in the same place.
7020          2) We are a primary base within a lost primary virtual base of
7021          RTTI_BINFO.
7022          3) We are primary to something not a base of RTTI_BINFO.  */
7023           
7024       tree b;
7025       tree last = NULL_TREE;
7026
7027       /* First, look through the bases we are primary to for RTTI_BINFO
7028          or a virtual base.  */
7029       b = binfo;
7030       while (BINFO_PRIMARY_P (b))
7031         {
7032           b = BINFO_INHERITANCE_CHAIN (b);
7033           last = b;
7034           if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7035             goto found;
7036         }
7037       /* If we run out of primary links, keep looking down our
7038          inheritance chain; we might be an indirect primary.  */
7039       for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
7040         if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7041           break;
7042     found:
7043       
7044       /* If we found RTTI_BINFO, this is case 1.  If we found a virtual
7045          base B and it is a base of RTTI_BINFO, this is case 2.  In
7046          either case, we share our vtable with LAST, i.e. the
7047          derived-most base within B of which we are a primary.  */
7048       if (b == rtti_binfo
7049           || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
7050         /* Just set our BINFO_VTABLE to point to LAST, as we may not have
7051            set LAST's BINFO_VTABLE yet.  We'll extract the actual vptr in
7052            binfo_ctor_vtable after everything's been set up.  */
7053         vtbl = last;
7054
7055       /* Otherwise, this is case 3 and we get our own.  */
7056     }
7057   else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
7058     return inits;
7059
7060   if (!vtbl)
7061     {
7062       tree index;
7063       int non_fn_entries;
7064
7065       /* Compute the initializer for this vtable.  */
7066       inits = build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
7067                                       &non_fn_entries);
7068
7069       /* Figure out the position to which the VPTR should point.  */
7070       vtbl = TREE_PURPOSE (l);
7071       vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, vtbl);
7072       index = size_binop (PLUS_EXPR,
7073                           size_int (non_fn_entries),
7074                           size_int (list_length (TREE_VALUE (l))));
7075       index = size_binop (MULT_EXPR,
7076                           TYPE_SIZE_UNIT (vtable_entry_type),
7077                           index);
7078       vtbl = build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, index);
7079     }
7080
7081   if (ctor_vtbl_p)
7082     /* For a construction vtable, we can't overwrite BINFO_VTABLE.
7083        So, we make a TREE_LIST.  Later, dfs_fixup_binfo_vtbls will
7084        straighten this out.  */
7085     BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
7086   else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
7087     inits = NULL_TREE;
7088   else
7089      /* For an ordinary vtable, set BINFO_VTABLE.  */
7090     BINFO_VTABLE (binfo) = vtbl;
7091
7092   return inits;
7093 }
7094
7095 /* Construct the initializer for BINFO's virtual function table.  BINFO
7096    is part of the hierarchy dominated by T.  If we're building a
7097    construction vtable, the ORIG_BINFO is the binfo we should use to
7098    find the actual function pointers to put in the vtable - but they
7099    can be overridden on the path to most-derived in the graph that
7100    ORIG_BINFO belongs.  Otherwise,
7101    ORIG_BINFO should be the same as BINFO.  The RTTI_BINFO is the
7102    BINFO that should be indicated by the RTTI information in the
7103    vtable; it will be a base class of T, rather than T itself, if we
7104    are building a construction vtable.
7105
7106    The value returned is a TREE_LIST suitable for wrapping in a
7107    CONSTRUCTOR to use as the DECL_INITIAL for a vtable.  If
7108    NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
7109    number of non-function entries in the vtable.  
7110
7111    It might seem that this function should never be called with a
7112    BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
7113    base is always subsumed by a derived class vtable.  However, when
7114    we are building construction vtables, we do build vtables for
7115    primary bases; we need these while the primary base is being
7116    constructed.  */
7117
7118 static tree
7119 build_vtbl_initializer (tree binfo,
7120                         tree orig_binfo,
7121                         tree t,
7122                         tree rtti_binfo,
7123                         int* non_fn_entries_p)
7124 {
7125   tree v, b;
7126   tree vfun_inits;
7127   vtbl_init_data vid;
7128   unsigned ix;
7129   tree vbinfo;
7130   VEC (tree) *vbases;
7131   
7132   /* Initialize VID.  */
7133   memset (&vid, 0, sizeof (vid));
7134   vid.binfo = binfo;
7135   vid.derived = t;
7136   vid.rtti_binfo = rtti_binfo;
7137   vid.last_init = &vid.inits;
7138   vid.primary_vtbl_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
7139   vid.ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7140   vid.generate_vcall_entries = true;
7141   /* The first vbase or vcall offset is at index -3 in the vtable.  */
7142   vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
7143
7144   /* Add entries to the vtable for RTTI.  */
7145   build_rtti_vtbl_entries (binfo, &vid);
7146
7147   /* Create an array for keeping track of the functions we've
7148      processed.  When we see multiple functions with the same
7149      signature, we share the vcall offsets.  */
7150   VARRAY_TREE_INIT (vid.fns, 32, "fns");
7151   /* Add the vcall and vbase offset entries.  */
7152   build_vcall_and_vbase_vtbl_entries (binfo, &vid);
7153   
7154   /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
7155      build_vbase_offset_vtbl_entries.  */
7156   for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
7157        VEC_iterate (tree, vbases, ix, vbinfo); ix++)
7158     BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
7159
7160   /* If the target requires padding between data entries, add that now.  */
7161   if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
7162     {
7163       tree cur, *prev;
7164
7165       for (prev = &vid.inits; (cur = *prev); prev = &TREE_CHAIN (cur))
7166         {
7167           tree add = cur;
7168           int i;
7169
7170           for (i = 1; i < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++i)
7171             add = tree_cons (NULL_TREE,
7172                              build1 (NOP_EXPR, vtable_entry_type,
7173                                      null_pointer_node),
7174                              add);
7175           *prev = add;
7176         }
7177     }
7178
7179   if (non_fn_entries_p)
7180     *non_fn_entries_p = list_length (vid.inits);
7181
7182   /* Go through all the ordinary virtual functions, building up
7183      initializers.  */
7184   vfun_inits = NULL_TREE;
7185   for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
7186     {
7187       tree delta;
7188       tree vcall_index;
7189       tree fn, fn_original;
7190       tree init = NULL_TREE;
7191       
7192       fn = BV_FN (v);
7193       fn_original = fn;
7194       if (DECL_THUNK_P (fn))
7195         {
7196           if (!DECL_NAME (fn))
7197             finish_thunk (fn);
7198           if (THUNK_ALIAS (fn))
7199             {
7200               fn = THUNK_ALIAS (fn);
7201               BV_FN (v) = fn;
7202             }
7203           fn_original = THUNK_TARGET (fn);
7204         }
7205       
7206       /* If the only definition of this function signature along our
7207          primary base chain is from a lost primary, this vtable slot will
7208          never be used, so just zero it out.  This is important to avoid
7209          requiring extra thunks which cannot be generated with the function.
7210
7211          We first check this in update_vtable_entry_for_fn, so we handle
7212          restored primary bases properly; we also need to do it here so we
7213          zero out unused slots in ctor vtables, rather than filling themff
7214          with erroneous values (though harmless, apart from relocation
7215          costs).  */
7216       for (b = binfo; ; b = get_primary_binfo (b))
7217         {
7218           /* We found a defn before a lost primary; go ahead as normal.  */
7219           if (look_for_overrides_here (BINFO_TYPE (b), fn_original))
7220             break;
7221
7222           /* The nearest definition is from a lost primary; clear the
7223              slot.  */
7224           if (BINFO_LOST_PRIMARY_P (b))
7225             {
7226               init = size_zero_node;
7227               break;
7228             }
7229         }
7230
7231       if (! init)
7232         {
7233           /* Pull the offset for `this', and the function to call, out of
7234              the list.  */
7235           delta = BV_DELTA (v);
7236           vcall_index = BV_VCALL_INDEX (v);
7237
7238           gcc_assert (TREE_CODE (delta) == INTEGER_CST);
7239           gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
7240
7241           /* You can't call an abstract virtual function; it's abstract.
7242              So, we replace these functions with __pure_virtual.  */
7243           if (DECL_PURE_VIRTUAL_P (fn_original))
7244             fn = abort_fndecl;
7245           else if (!integer_zerop (delta) || vcall_index)
7246             {
7247               fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
7248               if (!DECL_NAME (fn))
7249                 finish_thunk (fn);
7250             }
7251           /* Take the address of the function, considering it to be of an
7252              appropriate generic type.  */
7253           init = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7254         }
7255
7256       /* And add it to the chain of initializers.  */
7257       if (TARGET_VTABLE_USES_DESCRIPTORS)
7258         {
7259           int i;
7260           if (init == size_zero_node)
7261             for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7262               vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7263           else
7264             for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7265               {
7266                 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
7267                                      TREE_OPERAND (init, 0),
7268                                      build_int_cst (NULL_TREE, i));
7269                 TREE_CONSTANT (fdesc) = 1;
7270                 TREE_INVARIANT (fdesc) = 1;
7271
7272                 vfun_inits = tree_cons (NULL_TREE, fdesc, vfun_inits);
7273               }
7274         }
7275       else
7276         vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7277     }
7278
7279   /* The initializers for virtual functions were built up in reverse
7280      order; straighten them out now.  */
7281   vfun_inits = nreverse (vfun_inits);
7282   
7283   /* The negative offset initializers are also in reverse order.  */
7284   vid.inits = nreverse (vid.inits);
7285
7286   /* Chain the two together.  */
7287   return chainon (vid.inits, vfun_inits);
7288 }
7289
7290 /* Adds to vid->inits the initializers for the vbase and vcall
7291    offsets in BINFO, which is in the hierarchy dominated by T.  */
7292
7293 static void
7294 build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
7295 {
7296   tree b;
7297
7298   /* If this is a derived class, we must first create entries
7299      corresponding to the primary base class.  */
7300   b = get_primary_binfo (binfo);
7301   if (b)
7302     build_vcall_and_vbase_vtbl_entries (b, vid);
7303
7304   /* Add the vbase entries for this base.  */
7305   build_vbase_offset_vtbl_entries (binfo, vid);
7306   /* Add the vcall entries for this base.  */
7307   build_vcall_offset_vtbl_entries (binfo, vid);
7308 }
7309
7310 /* Returns the initializers for the vbase offset entries in the vtable
7311    for BINFO (which is part of the class hierarchy dominated by T), in
7312    reverse order.  VBASE_OFFSET_INDEX gives the vtable index
7313    where the next vbase offset will go.  */
7314
7315 static void
7316 build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7317 {
7318   tree vbase;
7319   tree t;
7320   tree non_primary_binfo;
7321
7322   /* If there are no virtual baseclasses, then there is nothing to
7323      do.  */
7324   if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
7325     return;
7326
7327   t = vid->derived;
7328   
7329   /* We might be a primary base class.  Go up the inheritance hierarchy
7330      until we find the most derived class of which we are a primary base:
7331      it is the offset of that which we need to use.  */
7332   non_primary_binfo = binfo;
7333   while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7334     {
7335       tree b;
7336
7337       /* If we have reached a virtual base, then it must be a primary
7338          base (possibly multi-level) of vid->binfo, or we wouldn't
7339          have called build_vcall_and_vbase_vtbl_entries for it.  But it
7340          might be a lost primary, so just skip down to vid->binfo.  */
7341       if (BINFO_VIRTUAL_P (non_primary_binfo))
7342         {
7343           non_primary_binfo = vid->binfo;
7344           break;
7345         }
7346
7347       b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7348       if (get_primary_binfo (b) != non_primary_binfo)
7349         break;
7350       non_primary_binfo = b;
7351     }
7352
7353   /* Go through the virtual bases, adding the offsets.  */
7354   for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7355        vbase;
7356        vbase = TREE_CHAIN (vbase))
7357     {
7358       tree b;
7359       tree delta;
7360       
7361       if (!BINFO_VIRTUAL_P (vbase))
7362         continue;
7363
7364       /* Find the instance of this virtual base in the complete
7365          object.  */
7366       b = copied_binfo (vbase, binfo);
7367
7368       /* If we've already got an offset for this virtual base, we
7369          don't need another one.  */
7370       if (BINFO_VTABLE_PATH_MARKED (b))
7371         continue;
7372       BINFO_VTABLE_PATH_MARKED (b) = 1;
7373
7374       /* Figure out where we can find this vbase offset.  */
7375       delta = size_binop (MULT_EXPR, 
7376                           vid->index,
7377                           convert (ssizetype,
7378                                    TYPE_SIZE_UNIT (vtable_entry_type)));
7379       if (vid->primary_vtbl_p)
7380         BINFO_VPTR_FIELD (b) = delta;
7381
7382       if (binfo != TYPE_BINFO (t))
7383         /* The vbase offset had better be the same.  */
7384         gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
7385
7386       /* The next vbase will come at a more negative offset.  */
7387       vid->index = size_binop (MINUS_EXPR, vid->index,
7388                                ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7389
7390       /* The initializer is the delta from BINFO to this virtual base.
7391          The vbase offsets go in reverse inheritance-graph order, and
7392          we are walking in inheritance graph order so these end up in
7393          the right order.  */
7394       delta = size_diffop (BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
7395       
7396       *vid->last_init 
7397         = build_tree_list (NULL_TREE,
7398                            fold (build1 (NOP_EXPR, 
7399                                          vtable_entry_type,
7400                                          delta)));
7401       vid->last_init = &TREE_CHAIN (*vid->last_init);
7402     }
7403 }
7404
7405 /* Adds the initializers for the vcall offset entries in the vtable
7406    for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
7407    to VID->INITS.  */
7408
7409 static void
7410 build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7411 {
7412   /* We only need these entries if this base is a virtual base.  We
7413      compute the indices -- but do not add to the vtable -- when
7414      building the main vtable for a class.  */
7415   if (BINFO_VIRTUAL_P (binfo) || binfo == TYPE_BINFO (vid->derived))
7416     {
7417       /* We need a vcall offset for each of the virtual functions in this
7418          vtable.  For example:
7419
7420            class A { virtual void f (); };
7421            class B1 : virtual public A { virtual void f (); };
7422            class B2 : virtual public A { virtual void f (); };
7423            class C: public B1, public B2 { virtual void f (); };
7424
7425          A C object has a primary base of B1, which has a primary base of A.  A
7426          C also has a secondary base of B2, which no longer has a primary base
7427          of A.  So the B2-in-C construction vtable needs a secondary vtable for
7428          A, which will adjust the A* to a B2* to call f.  We have no way of
7429          knowing what (or even whether) this offset will be when we define B2,
7430          so we store this "vcall offset" in the A sub-vtable and look it up in
7431          a "virtual thunk" for B2::f.
7432
7433          We need entries for all the functions in our primary vtable and
7434          in our non-virtual bases' secondary vtables.  */
7435       vid->vbase = binfo;
7436       /* If we are just computing the vcall indices -- but do not need
7437          the actual entries -- not that.  */
7438       if (!BINFO_VIRTUAL_P (binfo))
7439         vid->generate_vcall_entries = false;
7440       /* Now, walk through the non-virtual bases, adding vcall offsets.  */
7441       add_vcall_offset_vtbl_entries_r (binfo, vid);
7442     }
7443 }
7444
7445 /* Build vcall offsets, starting with those for BINFO.  */
7446
7447 static void
7448 add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
7449 {
7450   int i;
7451   tree primary_binfo;
7452   tree base_binfo;
7453
7454   /* Don't walk into virtual bases -- except, of course, for the
7455      virtual base for which we are building vcall offsets.  Any
7456      primary virtual base will have already had its offsets generated
7457      through the recursion in build_vcall_and_vbase_vtbl_entries.  */
7458   if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
7459     return;
7460   
7461   /* If BINFO has a primary base, process it first.  */
7462   primary_binfo = get_primary_binfo (binfo);
7463   if (primary_binfo)
7464     add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
7465
7466   /* Add BINFO itself to the list.  */
7467   add_vcall_offset_vtbl_entries_1 (binfo, vid);
7468
7469   /* Scan the non-primary bases of BINFO.  */
7470   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7471     if (base_binfo != primary_binfo)
7472       add_vcall_offset_vtbl_entries_r (base_binfo, vid);
7473 }
7474
7475 /* Called from build_vcall_offset_vtbl_entries_r.  */
7476
7477 static void
7478 add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
7479 {
7480   /* Make entries for the rest of the virtuals.  */
7481   if (abi_version_at_least (2))
7482     {
7483       tree orig_fn;
7484
7485       /* The ABI requires that the methods be processed in declaration
7486          order.  G++ 3.2 used the order in the vtable.  */
7487       for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
7488            orig_fn;
7489            orig_fn = TREE_CHAIN (orig_fn))
7490         if (DECL_VINDEX (orig_fn))
7491           add_vcall_offset (orig_fn, binfo, vid);
7492     }
7493   else
7494     {
7495       tree derived_virtuals;
7496       tree base_virtuals;
7497       tree orig_virtuals;
7498       /* If BINFO is a primary base, the most derived class which has
7499          BINFO as a primary base; otherwise, just BINFO.  */
7500       tree non_primary_binfo;
7501
7502       /* We might be a primary base class.  Go up the inheritance hierarchy
7503          until we find the most derived class of which we are a primary base:
7504          it is the BINFO_VIRTUALS there that we need to consider.  */
7505       non_primary_binfo = binfo;
7506       while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7507         {
7508           tree b;
7509
7510           /* If we have reached a virtual base, then it must be vid->vbase,
7511              because we ignore other virtual bases in
7512              add_vcall_offset_vtbl_entries_r.  In turn, it must be a primary
7513              base (possibly multi-level) of vid->binfo, or we wouldn't
7514              have called build_vcall_and_vbase_vtbl_entries for it.  But it
7515              might be a lost primary, so just skip down to vid->binfo.  */
7516           if (BINFO_VIRTUAL_P (non_primary_binfo))
7517             {
7518               gcc_assert (non_primary_binfo == vid->vbase);
7519               non_primary_binfo = vid->binfo;
7520               break;
7521             }
7522
7523           b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7524           if (get_primary_binfo (b) != non_primary_binfo)
7525             break;
7526           non_primary_binfo = b;
7527         }
7528
7529       if (vid->ctor_vtbl_p)
7530         /* For a ctor vtable we need the equivalent binfo within the hierarchy
7531            where rtti_binfo is the most derived type.  */
7532         non_primary_binfo
7533           = original_binfo (non_primary_binfo, vid->rtti_binfo);
7534       
7535       for (base_virtuals = BINFO_VIRTUALS (binfo),
7536              derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
7537              orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
7538            base_virtuals;
7539            base_virtuals = TREE_CHAIN (base_virtuals),
7540              derived_virtuals = TREE_CHAIN (derived_virtuals),
7541              orig_virtuals = TREE_CHAIN (orig_virtuals))
7542         {
7543           tree orig_fn;
7544
7545           /* Find the declaration that originally caused this function to
7546              be present in BINFO_TYPE (binfo).  */
7547           orig_fn = BV_FN (orig_virtuals);
7548
7549           /* When processing BINFO, we only want to generate vcall slots for
7550              function slots introduced in BINFO.  So don't try to generate
7551              one if the function isn't even defined in BINFO.  */
7552           if (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), DECL_CONTEXT (orig_fn)))
7553             continue;
7554
7555           add_vcall_offset (orig_fn, binfo, vid);
7556         }
7557     }
7558 }
7559
7560 /* Add a vcall offset entry for ORIG_FN to the vtable.  */
7561
7562 static void
7563 add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
7564 {
7565   size_t i;
7566   tree vcall_offset;
7567
7568   /* If there is already an entry for a function with the same
7569      signature as FN, then we do not need a second vcall offset.
7570      Check the list of functions already present in the derived
7571      class vtable.  */
7572   for (i = 0; i < VARRAY_ACTIVE_SIZE (vid->fns); ++i) 
7573     {
7574       tree derived_entry;
7575
7576       derived_entry = VARRAY_TREE (vid->fns, i);
7577       if (same_signature_p (derived_entry, orig_fn)
7578           /* We only use one vcall offset for virtual destructors,
7579              even though there are two virtual table entries.  */
7580           || (DECL_DESTRUCTOR_P (derived_entry)
7581               && DECL_DESTRUCTOR_P (orig_fn)))
7582         return;
7583     }
7584
7585   /* If we are building these vcall offsets as part of building
7586      the vtable for the most derived class, remember the vcall
7587      offset.  */
7588   if (vid->binfo == TYPE_BINFO (vid->derived))
7589     {
7590       tree_pair_p elt = VEC_safe_push (tree_pair_s,
7591                                        CLASSTYPE_VCALL_INDICES (vid->derived),
7592                                        NULL);
7593       elt->purpose = orig_fn;
7594       elt->value = vid->index;
7595     }
7596   
7597   /* The next vcall offset will be found at a more negative
7598      offset.  */
7599   vid->index = size_binop (MINUS_EXPR, vid->index,
7600                            ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7601
7602   /* Keep track of this function.  */
7603   VARRAY_PUSH_TREE (vid->fns, orig_fn);
7604
7605   if (vid->generate_vcall_entries)
7606     {
7607       tree base;
7608       tree fn;
7609
7610       /* Find the overriding function.  */
7611       fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
7612       if (fn == error_mark_node)
7613         vcall_offset = build1 (NOP_EXPR, vtable_entry_type,
7614                                integer_zero_node);
7615       else
7616         {
7617           base = TREE_VALUE (fn);
7618
7619           /* The vbase we're working on is a primary base of
7620              vid->binfo.  But it might be a lost primary, so its
7621              BINFO_OFFSET might be wrong, so we just use the
7622              BINFO_OFFSET from vid->binfo.  */
7623           vcall_offset = size_diffop (BINFO_OFFSET (base),
7624                                       BINFO_OFFSET (vid->binfo));
7625           vcall_offset = fold (build1 (NOP_EXPR, vtable_entry_type,
7626                                        vcall_offset));
7627         }
7628       /* Add the initializer to the vtable.  */
7629       *vid->last_init = build_tree_list (NULL_TREE, vcall_offset);
7630       vid->last_init = &TREE_CHAIN (*vid->last_init);
7631     }
7632 }
7633
7634 /* Return vtbl initializers for the RTTI entries corresponding to the
7635    BINFO's vtable.  The RTTI entries should indicate the object given
7636    by VID->rtti_binfo.  */
7637
7638 static void
7639 build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
7640 {
7641   tree b;
7642   tree t;
7643   tree basetype;
7644   tree offset;
7645   tree decl;
7646   tree init;
7647
7648   basetype = BINFO_TYPE (binfo);
7649   t = BINFO_TYPE (vid->rtti_binfo);
7650
7651   /* To find the complete object, we will first convert to our most
7652      primary base, and then add the offset in the vtbl to that value.  */
7653   b = binfo;
7654   while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
7655          && !BINFO_LOST_PRIMARY_P (b))
7656     {
7657       tree primary_base;
7658
7659       primary_base = get_primary_binfo (b);
7660       gcc_assert (BINFO_PRIMARY_P (primary_base)
7661                   && BINFO_INHERITANCE_CHAIN (primary_base) == b);
7662       b = primary_base;
7663     }
7664   offset = size_diffop (BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
7665
7666   /* The second entry is the address of the typeinfo object.  */
7667   if (flag_rtti)
7668     decl = build_address (get_tinfo_decl (t));
7669   else
7670     decl = integer_zero_node;
7671   
7672   /* Convert the declaration to a type that can be stored in the
7673      vtable.  */
7674   init = build_nop (vfunc_ptr_type_node, decl);
7675   *vid->last_init = build_tree_list (NULL_TREE, init);
7676   vid->last_init = &TREE_CHAIN (*vid->last_init);
7677
7678   /* Add the offset-to-top entry.  It comes earlier in the vtable that
7679      the the typeinfo entry.  Convert the offset to look like a
7680      function pointer, so that we can put it in the vtable.  */
7681   init = build_nop (vfunc_ptr_type_node, offset);
7682   *vid->last_init = build_tree_list (NULL_TREE, init);
7683   vid->last_init = &TREE_CHAIN (*vid->last_init);
7684 }
7685
7686 /* Fold a OBJ_TYPE_REF expression to the address of a function.
7687    KNOWN_TYPE carries the true type of OBJ_TYPE_REF_OBJECT(REF).  */
7688
7689 tree
7690 cp_fold_obj_type_ref (tree ref, tree known_type)
7691 {
7692   HOST_WIDE_INT index = tree_low_cst (OBJ_TYPE_REF_TOKEN (ref), 1);
7693   HOST_WIDE_INT i = 0;
7694   tree v = BINFO_VIRTUALS (TYPE_BINFO (known_type));
7695   tree fndecl;
7696
7697   while (i != index)
7698     {
7699       i += (TARGET_VTABLE_USES_DESCRIPTORS
7700             ? TARGET_VTABLE_USES_DESCRIPTORS : 1);
7701       v = TREE_CHAIN (v);
7702     }
7703
7704   fndecl = BV_FN (v);
7705
7706 #ifdef ENABLE_CHECKING
7707   gcc_assert (tree_int_cst_equal (OBJ_TYPE_REF_TOKEN (ref),
7708                                   DECL_VINDEX (fndecl)));
7709 #endif
7710
7711   return build_address (fndecl);
7712 }
7713