OSDN Git Service

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