OSDN Git Service

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