OSDN Git Service

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