OSDN Git Service

PR c++/38796, Core issue 906
[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   /* Currently only lambdas get a lazy move ctor.  */
2681   if (LAMBDA_TYPE_P (t))
2682     CLASSTYPE_LAZY_MOVE_CTOR (t) = 1;
2683
2684   /* If there is no assignment operator, one will be created if and
2685      when it is needed.  For now, just record whether or not the type
2686      of the parameter to the assignment operator will be a const or
2687      non-const reference.  */
2688   if (!TYPE_HAS_ASSIGN_REF (t) && !TYPE_FOR_JAVA (t))
2689     {
2690       TYPE_HAS_ASSIGN_REF (t) = 1;
2691       TYPE_HAS_CONST_ASSIGN_REF (t) = !cant_have_const_assignment;
2692       CLASSTYPE_LAZY_ASSIGNMENT_OP (t) = 1;
2693     }
2694 }
2695
2696 /* Subroutine of finish_struct_1.  Recursively count the number of fields
2697    in TYPE, including anonymous union members.  */
2698
2699 static int
2700 count_fields (tree fields)
2701 {
2702   tree x;
2703   int n_fields = 0;
2704   for (x = fields; x; x = TREE_CHAIN (x))
2705     {
2706       if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2707         n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
2708       else
2709         n_fields += 1;
2710     }
2711   return n_fields;
2712 }
2713
2714 /* Subroutine of finish_struct_1.  Recursively add all the fields in the
2715    TREE_LIST FIELDS to the SORTED_FIELDS_TYPE elts, starting at offset IDX.  */
2716
2717 static int
2718 add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
2719 {
2720   tree x;
2721   for (x = fields; x; x = TREE_CHAIN (x))
2722     {
2723       if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2724         idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
2725       else
2726         field_vec->elts[idx++] = x;
2727     }
2728   return idx;
2729 }
2730
2731 /* FIELD is a bit-field.  We are finishing the processing for its
2732    enclosing type.  Issue any appropriate messages and set appropriate
2733    flags.  Returns false if an error has been diagnosed.  */
2734
2735 static bool
2736 check_bitfield_decl (tree field)
2737 {
2738   tree type = TREE_TYPE (field);
2739   tree w;
2740
2741   /* Extract the declared width of the bitfield, which has been
2742      temporarily stashed in DECL_INITIAL.  */
2743   w = DECL_INITIAL (field);
2744   gcc_assert (w != NULL_TREE);
2745   /* Remove the bit-field width indicator so that the rest of the
2746      compiler does not treat that value as an initializer.  */
2747   DECL_INITIAL (field) = NULL_TREE;
2748
2749   /* Detect invalid bit-field type.  */
2750   if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
2751     {
2752       error ("bit-field %q+#D with non-integral type", field);
2753       w = error_mark_node;
2754     }
2755   else
2756     {
2757       /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs.  */
2758       STRIP_NOPS (w);
2759
2760       /* detect invalid field size.  */
2761       w = integral_constant_value (w);
2762
2763       if (TREE_CODE (w) != INTEGER_CST)
2764         {
2765           error ("bit-field %q+D width not an integer constant", field);
2766           w = error_mark_node;
2767         }
2768       else if (tree_int_cst_sgn (w) < 0)
2769         {
2770           error ("negative width in bit-field %q+D", field);
2771           w = error_mark_node;
2772         }
2773       else if (integer_zerop (w) && DECL_NAME (field) != 0)
2774         {
2775           error ("zero width for bit-field %q+D", field);
2776           w = error_mark_node;
2777         }
2778       else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
2779                && TREE_CODE (type) != ENUMERAL_TYPE
2780                && TREE_CODE (type) != BOOLEAN_TYPE)
2781         warning (0, "width of %q+D exceeds its type", field);
2782       else if (TREE_CODE (type) == ENUMERAL_TYPE
2783                && (0 > compare_tree_int (w,
2784                                          tree_int_cst_min_precision
2785                                          (TYPE_MIN_VALUE (type),
2786                                           TYPE_UNSIGNED (type)))
2787                    ||  0 > compare_tree_int (w,
2788                                              tree_int_cst_min_precision
2789                                              (TYPE_MAX_VALUE (type),
2790                                               TYPE_UNSIGNED (type)))))
2791         warning (0, "%q+D is too small to hold all values of %q#T", field, type);
2792     }
2793
2794   if (w != error_mark_node)
2795     {
2796       DECL_SIZE (field) = convert (bitsizetype, w);
2797       DECL_BIT_FIELD (field) = 1;
2798       return true;
2799     }
2800   else
2801     {
2802       /* Non-bit-fields are aligned for their type.  */
2803       DECL_BIT_FIELD (field) = 0;
2804       CLEAR_DECL_C_BIT_FIELD (field);
2805       return false;
2806     }
2807 }
2808
2809 /* FIELD is a non bit-field.  We are finishing the processing for its
2810    enclosing type T.  Issue any appropriate messages and set appropriate
2811    flags.  */
2812
2813 static void
2814 check_field_decl (tree field,
2815                   tree t,
2816                   int* cant_have_const_ctor,
2817                   int* no_const_asn_ref,
2818                   int* any_default_members)
2819 {
2820   tree type = strip_array_types (TREE_TYPE (field));
2821
2822   /* An anonymous union cannot contain any fields which would change
2823      the settings of CANT_HAVE_CONST_CTOR and friends.  */
2824   if (ANON_UNION_TYPE_P (type))
2825     ;
2826   /* And, we don't set TYPE_HAS_CONST_INIT_REF, etc., for anonymous
2827      structs.  So, we recurse through their fields here.  */
2828   else if (ANON_AGGR_TYPE_P (type))
2829     {
2830       tree fields;
2831
2832       for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
2833         if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
2834           check_field_decl (fields, t, cant_have_const_ctor,
2835                             no_const_asn_ref, any_default_members);
2836     }
2837   /* Check members with class type for constructors, destructors,
2838      etc.  */
2839   else if (CLASS_TYPE_P (type))
2840     {
2841       /* Never let anything with uninheritable virtuals
2842          make it through without complaint.  */
2843       abstract_virtuals_error (field, type);
2844
2845       if (TREE_CODE (t) == UNION_TYPE)
2846         {
2847           if (TYPE_NEEDS_CONSTRUCTING (type))
2848             error ("member %q+#D with constructor not allowed in union",
2849                    field);
2850           if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2851             error ("member %q+#D with destructor not allowed in union", field);
2852           if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
2853             error ("member %q+#D with copy assignment operator not allowed in union",
2854                    field);
2855         }
2856       else
2857         {
2858           TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
2859           TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
2860             |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
2861           TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_HAS_COMPLEX_ASSIGN_REF (type);
2862           TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (type);
2863           TYPE_HAS_COMPLEX_DFLT (t) |= TYPE_HAS_COMPLEX_DFLT (type);
2864         }
2865
2866       if (!TYPE_HAS_CONST_INIT_REF (type))
2867         *cant_have_const_ctor = 1;
2868
2869       if (!TYPE_HAS_CONST_ASSIGN_REF (type))
2870         *no_const_asn_ref = 1;
2871     }
2872   if (DECL_INITIAL (field) != NULL_TREE)
2873     {
2874       /* `build_class_init_list' does not recognize
2875          non-FIELD_DECLs.  */
2876       if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
2877         error ("multiple fields in union %qT initialized", t);
2878       *any_default_members = 1;
2879     }
2880 }
2881
2882 /* Check the data members (both static and non-static), class-scoped
2883    typedefs, etc., appearing in the declaration of T.  Issue
2884    appropriate diagnostics.  Sets ACCESS_DECLS to a list (in
2885    declaration order) of access declarations; each TREE_VALUE in this
2886    list is a USING_DECL.
2887
2888    In addition, set the following flags:
2889
2890      EMPTY_P
2891        The class is empty, i.e., contains no non-static data members.
2892
2893      CANT_HAVE_CONST_CTOR_P
2894        This class cannot have an implicitly generated copy constructor
2895        taking a const reference.
2896
2897      CANT_HAVE_CONST_ASN_REF
2898        This class cannot have an implicitly generated assignment
2899        operator taking a const reference.
2900
2901    All of these flags should be initialized before calling this
2902    function.
2903
2904    Returns a pointer to the end of the TYPE_FIELDs chain; additional
2905    fields can be added by adding to this chain.  */
2906
2907 static void
2908 check_field_decls (tree t, tree *access_decls,
2909                    int *cant_have_const_ctor_p,
2910                    int *no_const_asn_ref_p)
2911 {
2912   tree *field;
2913   tree *next;
2914   bool has_pointers;
2915   int any_default_members;
2916   int cant_pack = 0;
2917   int field_access = -1;
2918
2919   /* Assume there are no access declarations.  */
2920   *access_decls = NULL_TREE;
2921   /* Assume this class has no pointer members.  */
2922   has_pointers = false;
2923   /* Assume none of the members of this class have default
2924      initializations.  */
2925   any_default_members = 0;
2926
2927   for (field = &TYPE_FIELDS (t); *field; field = next)
2928     {
2929       tree x = *field;
2930       tree type = TREE_TYPE (x);
2931       int this_field_access;
2932
2933       next = &TREE_CHAIN (x);
2934
2935       if (TREE_CODE (x) == USING_DECL)
2936         {
2937           /* Prune the access declaration from the list of fields.  */
2938           *field = TREE_CHAIN (x);
2939
2940           /* Save the access declarations for our caller.  */
2941           *access_decls = tree_cons (NULL_TREE, x, *access_decls);
2942
2943           /* Since we've reset *FIELD there's no reason to skip to the
2944              next field.  */
2945           next = field;
2946           continue;
2947         }
2948
2949       if (TREE_CODE (x) == TYPE_DECL
2950           || TREE_CODE (x) == TEMPLATE_DECL)
2951         continue;
2952
2953       /* If we've gotten this far, it's a data member, possibly static,
2954          or an enumerator.  */
2955       DECL_CONTEXT (x) = t;
2956
2957       /* When this goes into scope, it will be a non-local reference.  */
2958       DECL_NONLOCAL (x) = 1;
2959
2960       if (TREE_CODE (t) == UNION_TYPE)
2961         {
2962           /* [class.union]
2963
2964              If a union contains a static data member, or a member of
2965              reference type, the program is ill-formed.  */
2966           if (TREE_CODE (x) == VAR_DECL)
2967             {
2968               error ("%q+D may not be static because it is a member of a union", x);
2969               continue;
2970             }
2971           if (TREE_CODE (type) == REFERENCE_TYPE)
2972             {
2973               error ("%q+D may not have reference type %qT because"
2974                      " it is a member of a union",
2975                      x, type);
2976               continue;
2977             }
2978         }
2979
2980       /* Perform error checking that did not get done in
2981          grokdeclarator.  */
2982       if (TREE_CODE (type) == FUNCTION_TYPE)
2983         {
2984           error ("field %q+D invalidly declared function type", x);
2985           type = build_pointer_type (type);
2986           TREE_TYPE (x) = type;
2987         }
2988       else if (TREE_CODE (type) == METHOD_TYPE)
2989         {
2990           error ("field %q+D invalidly declared method type", x);
2991           type = build_pointer_type (type);
2992           TREE_TYPE (x) = type;
2993         }
2994
2995       if (type == error_mark_node)
2996         continue;
2997
2998       if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL)
2999         continue;
3000
3001       /* Now it can only be a FIELD_DECL.  */
3002
3003       if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
3004         CLASSTYPE_NON_AGGREGATE (t) = 1;
3005
3006       /* A standard-layout class is a class that:
3007          ...
3008          has the same access control (Clause 11) for all non-static data members,
3009          ...  */
3010       this_field_access = TREE_PROTECTED (x) ? 1 : TREE_PRIVATE (x) ? 2 : 0;
3011       if (field_access == -1)
3012         field_access = this_field_access;
3013       else if (this_field_access != field_access)
3014         CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3015
3016       /* If this is of reference type, check if it needs an init.  */
3017       if (TREE_CODE (type) == REFERENCE_TYPE)
3018         {
3019           CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3020           CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3021           if (DECL_INITIAL (x) == NULL_TREE)
3022             SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3023
3024           /* ARM $12.6.2: [A member initializer list] (or, for an
3025              aggregate, initialization by a brace-enclosed list) is the
3026              only way to initialize nonstatic const and reference
3027              members.  */
3028           TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
3029         }
3030
3031       type = strip_array_types (type);
3032
3033       if (TYPE_PACKED (t))
3034         {
3035           if (!layout_pod_type_p (type) && !TYPE_PACKED (type))
3036             {
3037               warning
3038                 (0,
3039                  "ignoring packed attribute because of unpacked non-POD field %q+#D",
3040                  x);
3041               cant_pack = 1;
3042             }
3043           else if (DECL_C_BIT_FIELD (x)
3044                    || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
3045             DECL_PACKED (x) = 1;
3046         }
3047
3048       if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
3049         /* We don't treat zero-width bitfields as making a class
3050            non-empty.  */
3051         ;
3052       else
3053         {
3054           /* The class is non-empty.  */
3055           CLASSTYPE_EMPTY_P (t) = 0;
3056           /* The class is not even nearly empty.  */
3057           CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3058           /* If one of the data members contains an empty class,
3059              so does T.  */
3060           if (CLASS_TYPE_P (type)
3061               && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3062             CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
3063         }
3064
3065       /* This is used by -Weffc++ (see below). Warn only for pointers
3066          to members which might hold dynamic memory. So do not warn
3067          for pointers to functions or pointers to members.  */
3068       if (TYPE_PTR_P (type)
3069           && !TYPE_PTRFN_P (type)
3070           && !TYPE_PTR_TO_MEMBER_P (type))
3071         has_pointers = true;
3072
3073       if (CLASS_TYPE_P (type))
3074         {
3075           if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
3076             SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3077           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
3078             SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3079         }
3080
3081       if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
3082         CLASSTYPE_HAS_MUTABLE (t) = 1;
3083
3084       if (! layout_pod_type_p (type))
3085         /* DR 148 now allows pointers to members (which are POD themselves),
3086            to be allowed in POD structs.  */
3087         CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3088
3089       if (!std_layout_type_p (type))
3090         CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3091
3092       if (! zero_init_p (type))
3093         CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
3094
3095       /* If any field is const, the structure type is pseudo-const.  */
3096       if (CP_TYPE_CONST_P (type))
3097         {
3098           C_TYPE_FIELDS_READONLY (t) = 1;
3099           if (DECL_INITIAL (x) == NULL_TREE)
3100             SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3101
3102           /* ARM $12.6.2: [A member initializer list] (or, for an
3103              aggregate, initialization by a brace-enclosed list) is the
3104              only way to initialize nonstatic const and reference
3105              members.  */
3106           TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
3107         }
3108       /* A field that is pseudo-const makes the structure likewise.  */
3109       else if (CLASS_TYPE_P (type))
3110         {
3111           C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
3112           SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
3113             CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
3114             | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
3115         }
3116
3117       /* Core issue 80: A nonstatic data member is required to have a
3118          different name from the class iff the class has a
3119          user-declared constructor.  */
3120       if (constructor_name_p (DECL_NAME (x), t)
3121           && TYPE_HAS_USER_CONSTRUCTOR (t))
3122         permerror (input_location, "field %q+#D with same name as class", x);
3123
3124       /* We set DECL_C_BIT_FIELD in grokbitfield.
3125          If the type and width are valid, we'll also set DECL_BIT_FIELD.  */
3126       if (! DECL_C_BIT_FIELD (x) || ! check_bitfield_decl (x))
3127         check_field_decl (x, t,
3128                           cant_have_const_ctor_p,
3129                           no_const_asn_ref_p,
3130                           &any_default_members);
3131     }
3132
3133   /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
3134      it should also define a copy constructor and an assignment operator to
3135      implement the correct copy semantic (deep vs shallow, etc.). As it is
3136      not feasible to check whether the constructors do allocate dynamic memory
3137      and store it within members, we approximate the warning like this:
3138
3139      -- Warn only if there are members which are pointers
3140      -- Warn only if there is a non-trivial constructor (otherwise,
3141         there cannot be memory allocated).
3142      -- Warn only if there is a non-trivial destructor. We assume that the
3143         user at least implemented the cleanup correctly, and a destructor
3144         is needed to free dynamic memory.
3145
3146      This seems enough for practical purposes.  */
3147   if (warn_ecpp
3148       && has_pointers
3149       && TYPE_HAS_USER_CONSTRUCTOR (t)
3150       && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3151       && !(TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
3152     {
3153       warning (OPT_Weffc__, "%q#T has pointer data members", t);
3154
3155       if (! TYPE_HAS_INIT_REF (t))
3156         {
3157           warning (OPT_Weffc__,
3158                    "  but does not override %<%T(const %T&)%>", t, t);
3159           if (!TYPE_HAS_ASSIGN_REF (t))
3160             warning (OPT_Weffc__, "  or %<operator=(const %T&)%>", t);
3161         }
3162       else if (! TYPE_HAS_ASSIGN_REF (t))
3163         warning (OPT_Weffc__,
3164                  "  but does not override %<operator=(const %T&)%>", t);
3165     }
3166
3167   /* If any of the fields couldn't be packed, unset TYPE_PACKED.  */
3168   if (cant_pack)
3169     TYPE_PACKED (t) = 0;
3170
3171   /* Check anonymous struct/anonymous union fields.  */
3172   finish_struct_anon (t);
3173
3174   /* We've built up the list of access declarations in reverse order.
3175      Fix that now.  */
3176   *access_decls = nreverse (*access_decls);
3177 }
3178
3179 /* If TYPE is an empty class type, records its OFFSET in the table of
3180    OFFSETS.  */
3181
3182 static int
3183 record_subobject_offset (tree type, tree offset, splay_tree offsets)
3184 {
3185   splay_tree_node n;
3186
3187   if (!is_empty_class (type))
3188     return 0;
3189
3190   /* Record the location of this empty object in OFFSETS.  */
3191   n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3192   if (!n)
3193     n = splay_tree_insert (offsets,
3194                            (splay_tree_key) offset,
3195                            (splay_tree_value) NULL_TREE);
3196   n->value = ((splay_tree_value)
3197               tree_cons (NULL_TREE,
3198                          type,
3199                          (tree) n->value));
3200
3201   return 0;
3202 }
3203
3204 /* Returns nonzero if TYPE is an empty class type and there is
3205    already an entry in OFFSETS for the same TYPE as the same OFFSET.  */
3206
3207 static int
3208 check_subobject_offset (tree type, tree offset, splay_tree offsets)
3209 {
3210   splay_tree_node n;
3211   tree t;
3212
3213   if (!is_empty_class (type))
3214     return 0;
3215
3216   /* Record the location of this empty object in OFFSETS.  */
3217   n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3218   if (!n)
3219     return 0;
3220
3221   for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3222     if (same_type_p (TREE_VALUE (t), type))
3223       return 1;
3224
3225   return 0;
3226 }
3227
3228 /* Walk through all the subobjects of TYPE (located at OFFSET).  Call
3229    F for every subobject, passing it the type, offset, and table of
3230    OFFSETS.  If VBASES_P is one, then virtual non-primary bases should
3231    be traversed.
3232
3233    If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3234    than MAX_OFFSET will not be walked.
3235
3236    If F returns a nonzero value, the traversal ceases, and that value
3237    is returned.  Otherwise, returns zero.  */
3238
3239 static int
3240 walk_subobject_offsets (tree type,
3241                         subobject_offset_fn f,
3242                         tree offset,
3243                         splay_tree offsets,
3244                         tree max_offset,
3245                         int vbases_p)
3246 {
3247   int r = 0;
3248   tree type_binfo = NULL_TREE;
3249
3250   /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3251      stop.  */
3252   if (max_offset && INT_CST_LT (max_offset, offset))
3253     return 0;
3254
3255   if (type == error_mark_node)
3256     return 0;
3257
3258   if (!TYPE_P (type))
3259     {
3260       if (abi_version_at_least (2))
3261         type_binfo = type;
3262       type = BINFO_TYPE (type);
3263     }
3264
3265   if (CLASS_TYPE_P (type))
3266     {
3267       tree field;
3268       tree binfo;
3269       int i;
3270
3271       /* Avoid recursing into objects that are not interesting.  */
3272       if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3273         return 0;
3274
3275       /* Record the location of TYPE.  */
3276       r = (*f) (type, offset, offsets);
3277       if (r)
3278         return r;
3279
3280       /* Iterate through the direct base classes of TYPE.  */
3281       if (!type_binfo)
3282         type_binfo = TYPE_BINFO (type);
3283       for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
3284         {
3285           tree binfo_offset;
3286
3287           if (abi_version_at_least (2)
3288               && BINFO_VIRTUAL_P (binfo))
3289             continue;
3290
3291           if (!vbases_p
3292               && BINFO_VIRTUAL_P (binfo)
3293               && !BINFO_PRIMARY_P (binfo))
3294             continue;
3295
3296           if (!abi_version_at_least (2))
3297             binfo_offset = size_binop (PLUS_EXPR,
3298                                        offset,
3299                                        BINFO_OFFSET (binfo));
3300           else
3301             {
3302               tree orig_binfo;
3303               /* We cannot rely on BINFO_OFFSET being set for the base
3304                  class yet, but the offsets for direct non-virtual
3305                  bases can be calculated by going back to the TYPE.  */
3306               orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
3307               binfo_offset = size_binop (PLUS_EXPR,
3308                                          offset,
3309                                          BINFO_OFFSET (orig_binfo));
3310             }
3311
3312           r = walk_subobject_offsets (binfo,
3313                                       f,
3314                                       binfo_offset,
3315                                       offsets,
3316                                       max_offset,
3317                                       (abi_version_at_least (2)
3318                                        ? /*vbases_p=*/0 : vbases_p));
3319           if (r)
3320             return r;
3321         }
3322
3323       if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
3324         {
3325           unsigned ix;
3326           VEC(tree,gc) *vbases;
3327
3328           /* Iterate through the virtual base classes of TYPE.  In G++
3329              3.2, we included virtual bases in the direct base class
3330              loop above, which results in incorrect results; the
3331              correct offsets for virtual bases are only known when
3332              working with the most derived type.  */
3333           if (vbases_p)
3334             for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
3335                  VEC_iterate (tree, vbases, ix, binfo); ix++)
3336               {
3337                 r = walk_subobject_offsets (binfo,
3338                                             f,
3339                                             size_binop (PLUS_EXPR,
3340                                                         offset,
3341                                                         BINFO_OFFSET (binfo)),
3342                                             offsets,
3343                                             max_offset,
3344                                             /*vbases_p=*/0);
3345                 if (r)
3346                   return r;
3347               }
3348           else
3349             {
3350               /* We still have to walk the primary base, if it is
3351                  virtual.  (If it is non-virtual, then it was walked
3352                  above.)  */
3353               tree vbase = get_primary_binfo (type_binfo);
3354
3355               if (vbase && BINFO_VIRTUAL_P (vbase)
3356                   && BINFO_PRIMARY_P (vbase)
3357                   && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
3358                 {
3359                   r = (walk_subobject_offsets
3360                        (vbase, f, offset,
3361                         offsets, max_offset, /*vbases_p=*/0));
3362                   if (r)
3363                     return r;
3364                 }
3365             }
3366         }
3367
3368       /* Iterate through the fields of TYPE.  */
3369       for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3370         if (TREE_CODE (field) == FIELD_DECL && !DECL_ARTIFICIAL (field))
3371           {
3372             tree field_offset;
3373
3374             if (abi_version_at_least (2))
3375               field_offset = byte_position (field);
3376             else
3377               /* In G++ 3.2, DECL_FIELD_OFFSET was used.  */
3378               field_offset = DECL_FIELD_OFFSET (field);
3379
3380             r = walk_subobject_offsets (TREE_TYPE (field),
3381                                         f,
3382                                         size_binop (PLUS_EXPR,
3383                                                     offset,
3384                                                     field_offset),
3385                                         offsets,
3386                                         max_offset,
3387                                         /*vbases_p=*/1);
3388             if (r)
3389               return r;
3390           }
3391     }
3392   else if (TREE_CODE (type) == ARRAY_TYPE)
3393     {
3394       tree element_type = strip_array_types (type);
3395       tree domain = TYPE_DOMAIN (type);
3396       tree index;
3397
3398       /* Avoid recursing into objects that are not interesting.  */
3399       if (!CLASS_TYPE_P (element_type)
3400           || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3401         return 0;
3402
3403       /* Step through each of the elements in the array.  */
3404       for (index = size_zero_node;
3405            /* G++ 3.2 had an off-by-one error here.  */
3406            (abi_version_at_least (2)
3407             ? !INT_CST_LT (TYPE_MAX_VALUE (domain), index)
3408             : INT_CST_LT (index, TYPE_MAX_VALUE (domain)));
3409            index = size_binop (PLUS_EXPR, index, size_one_node))
3410         {
3411           r = walk_subobject_offsets (TREE_TYPE (type),
3412                                       f,
3413                                       offset,
3414                                       offsets,
3415                                       max_offset,
3416                                       /*vbases_p=*/1);
3417           if (r)
3418             return r;
3419           offset = size_binop (PLUS_EXPR, offset,
3420                                TYPE_SIZE_UNIT (TREE_TYPE (type)));
3421           /* If this new OFFSET is bigger than the MAX_OFFSET, then
3422              there's no point in iterating through the remaining
3423              elements of the array.  */
3424           if (max_offset && INT_CST_LT (max_offset, offset))
3425             break;
3426         }
3427     }
3428
3429   return 0;
3430 }
3431
3432 /* Record all of the empty subobjects of TYPE (either a type or a
3433    binfo).  If IS_DATA_MEMBER is true, then a non-static data member
3434    is being placed at OFFSET; otherwise, it is a base class that is
3435    being placed at OFFSET.  */
3436
3437 static void
3438 record_subobject_offsets (tree type,
3439                           tree offset,
3440                           splay_tree offsets,
3441                           bool is_data_member)
3442 {
3443   tree max_offset;
3444   /* If recording subobjects for a non-static data member or a
3445      non-empty base class , we do not need to record offsets beyond
3446      the size of the biggest empty class.  Additional data members
3447      will go at the end of the class.  Additional base classes will go
3448      either at offset zero (if empty, in which case they cannot
3449      overlap with offsets past the size of the biggest empty class) or
3450      at the end of the class.
3451
3452      However, if we are placing an empty base class, then we must record
3453      all offsets, as either the empty class is at offset zero (where
3454      other empty classes might later be placed) or at the end of the
3455      class (where other objects might then be placed, so other empty
3456      subobjects might later overlap).  */
3457   if (is_data_member
3458       || !is_empty_class (BINFO_TYPE (type)))
3459     max_offset = sizeof_biggest_empty_class;
3460   else
3461     max_offset = NULL_TREE;
3462   walk_subobject_offsets (type, record_subobject_offset, offset,
3463                           offsets, max_offset, is_data_member);
3464 }
3465
3466 /* Returns nonzero if any of the empty subobjects of TYPE (located at
3467    OFFSET) conflict with entries in OFFSETS.  If VBASES_P is nonzero,
3468    virtual bases of TYPE are examined.  */
3469
3470 static int
3471 layout_conflict_p (tree type,
3472                    tree offset,
3473                    splay_tree offsets,
3474                    int vbases_p)
3475 {
3476   splay_tree_node max_node;
3477
3478   /* Get the node in OFFSETS that indicates the maximum offset where
3479      an empty subobject is located.  */
3480   max_node = splay_tree_max (offsets);
3481   /* If there aren't any empty subobjects, then there's no point in
3482      performing this check.  */
3483   if (!max_node)
3484     return 0;
3485
3486   return walk_subobject_offsets (type, check_subobject_offset, offset,
3487                                  offsets, (tree) (max_node->key),
3488                                  vbases_p);
3489 }
3490
3491 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
3492    non-static data member of the type indicated by RLI.  BINFO is the
3493    binfo corresponding to the base subobject, OFFSETS maps offsets to
3494    types already located at those offsets.  This function determines
3495    the position of the DECL.  */
3496
3497 static void
3498 layout_nonempty_base_or_field (record_layout_info rli,
3499                                tree decl,
3500                                tree binfo,
3501                                splay_tree offsets)
3502 {
3503   tree offset = NULL_TREE;
3504   bool field_p;
3505   tree type;
3506
3507   if (binfo)
3508     {
3509       /* For the purposes of determining layout conflicts, we want to
3510          use the class type of BINFO; TREE_TYPE (DECL) will be the
3511          CLASSTYPE_AS_BASE version, which does not contain entries for
3512          zero-sized bases.  */
3513       type = TREE_TYPE (binfo);
3514       field_p = false;
3515     }
3516   else
3517     {
3518       type = TREE_TYPE (decl);
3519       field_p = true;
3520     }
3521
3522   /* Try to place the field.  It may take more than one try if we have
3523      a hard time placing the field without putting two objects of the
3524      same type at the same address.  */
3525   while (1)
3526     {
3527       struct record_layout_info_s old_rli = *rli;
3528
3529       /* Place this field.  */
3530       place_field (rli, decl);
3531       offset = byte_position (decl);
3532
3533       /* We have to check to see whether or not there is already
3534          something of the same type at the offset we're about to use.
3535          For example, consider:
3536
3537            struct S {};
3538            struct T : public S { int i; };
3539            struct U : public S, public T {};
3540
3541          Here, we put S at offset zero in U.  Then, we can't put T at
3542          offset zero -- its S component would be at the same address
3543          as the S we already allocated.  So, we have to skip ahead.
3544          Since all data members, including those whose type is an
3545          empty class, have nonzero size, any overlap can happen only
3546          with a direct or indirect base-class -- it can't happen with
3547          a data member.  */
3548       /* In a union, overlap is permitted; all members are placed at
3549          offset zero.  */
3550       if (TREE_CODE (rli->t) == UNION_TYPE)
3551         break;
3552       /* G++ 3.2 did not check for overlaps when placing a non-empty
3553          virtual base.  */
3554       if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
3555         break;
3556       if (layout_conflict_p (field_p ? type : binfo, offset,
3557                              offsets, field_p))
3558         {
3559           /* Strip off the size allocated to this field.  That puts us
3560              at the first place we could have put the field with
3561              proper alignment.  */
3562           *rli = old_rli;
3563
3564           /* Bump up by the alignment required for the type.  */
3565           rli->bitpos
3566             = size_binop (PLUS_EXPR, rli->bitpos,
3567                           bitsize_int (binfo
3568                                        ? CLASSTYPE_ALIGN (type)
3569                                        : TYPE_ALIGN (type)));
3570           normalize_rli (rli);
3571         }
3572       else
3573         /* There was no conflict.  We're done laying out this field.  */
3574         break;
3575     }
3576
3577   /* Now that we know where it will be placed, update its
3578      BINFO_OFFSET.  */
3579   if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
3580     /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
3581        this point because their BINFO_OFFSET is copied from another
3582        hierarchy.  Therefore, we may not need to add the entire
3583        OFFSET.  */
3584     propagate_binfo_offsets (binfo,
3585                              size_diffop_loc (input_location,
3586                                           convert (ssizetype, offset),
3587                                           convert (ssizetype,
3588                                                    BINFO_OFFSET (binfo))));
3589 }
3590
3591 /* Returns true if TYPE is empty and OFFSET is nonzero.  */
3592
3593 static int
3594 empty_base_at_nonzero_offset_p (tree type,
3595                                 tree offset,
3596                                 splay_tree offsets ATTRIBUTE_UNUSED)
3597 {
3598   return is_empty_class (type) && !integer_zerop (offset);
3599 }
3600
3601 /* Layout the empty base BINFO.  EOC indicates the byte currently just
3602    past the end of the class, and should be correctly aligned for a
3603    class of the type indicated by BINFO; OFFSETS gives the offsets of
3604    the empty bases allocated so far. T is the most derived
3605    type.  Return nonzero iff we added it at the end.  */
3606
3607 static bool
3608 layout_empty_base (record_layout_info rli, tree binfo,
3609                    tree eoc, splay_tree offsets)
3610 {
3611   tree alignment;
3612   tree basetype = BINFO_TYPE (binfo);
3613   bool atend = false;
3614
3615   /* This routine should only be used for empty classes.  */
3616   gcc_assert (is_empty_class (basetype));
3617   alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
3618
3619   if (!integer_zerop (BINFO_OFFSET (binfo)))
3620     {
3621       if (abi_version_at_least (2))
3622         propagate_binfo_offsets
3623           (binfo, size_diffop_loc (input_location,
3624                                size_zero_node, BINFO_OFFSET (binfo)));
3625       else
3626         warning (OPT_Wabi,
3627                  "offset of empty base %qT may not be ABI-compliant and may"
3628                  "change in a future version of GCC",
3629                  BINFO_TYPE (binfo));
3630     }
3631
3632   /* This is an empty base class.  We first try to put it at offset
3633      zero.  */
3634   if (layout_conflict_p (binfo,
3635                          BINFO_OFFSET (binfo),
3636                          offsets,
3637                          /*vbases_p=*/0))
3638     {
3639       /* That didn't work.  Now, we move forward from the next
3640          available spot in the class.  */
3641       atend = true;
3642       propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
3643       while (1)
3644         {
3645           if (!layout_conflict_p (binfo,
3646                                   BINFO_OFFSET (binfo),
3647                                   offsets,
3648                                   /*vbases_p=*/0))
3649             /* We finally found a spot where there's no overlap.  */
3650             break;
3651
3652           /* There's overlap here, too.  Bump along to the next spot.  */
3653           propagate_binfo_offsets (binfo, alignment);
3654         }
3655     }
3656
3657   if (CLASSTYPE_USER_ALIGN (basetype))
3658     {
3659       rli->record_align = MAX (rli->record_align, CLASSTYPE_ALIGN (basetype));
3660       if (warn_packed)
3661         rli->unpacked_align = MAX (rli->unpacked_align, CLASSTYPE_ALIGN (basetype));
3662       TYPE_USER_ALIGN (rli->t) = 1;
3663     }
3664
3665   return atend;
3666 }
3667
3668 /* Layout the base given by BINFO in the class indicated by RLI.
3669    *BASE_ALIGN is a running maximum of the alignments of
3670    any base class.  OFFSETS gives the location of empty base
3671    subobjects.  T is the most derived type.  Return nonzero if the new
3672    object cannot be nearly-empty.  A new FIELD_DECL is inserted at
3673    *NEXT_FIELD, unless BINFO is for an empty base class.
3674
3675    Returns the location at which the next field should be inserted.  */
3676
3677 static tree *
3678 build_base_field (record_layout_info rli, tree binfo,
3679                   splay_tree offsets, tree *next_field)
3680 {
3681   tree t = rli->t;
3682   tree basetype = BINFO_TYPE (binfo);
3683
3684   if (!COMPLETE_TYPE_P (basetype))
3685     /* This error is now reported in xref_tag, thus giving better
3686        location information.  */
3687     return next_field;
3688
3689   /* Place the base class.  */
3690   if (!is_empty_class (basetype))
3691     {
3692       tree decl;
3693
3694       /* The containing class is non-empty because it has a non-empty
3695          base class.  */
3696       CLASSTYPE_EMPTY_P (t) = 0;
3697
3698       /* Create the FIELD_DECL.  */
3699       decl = build_decl (input_location,
3700                          FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
3701       DECL_ARTIFICIAL (decl) = 1;
3702       DECL_IGNORED_P (decl) = 1;
3703       DECL_FIELD_CONTEXT (decl) = t;
3704       if (CLASSTYPE_AS_BASE (basetype))
3705         {
3706           DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3707           DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3708           DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3709           DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
3710           DECL_MODE (decl) = TYPE_MODE (basetype);
3711           DECL_FIELD_IS_BASE (decl) = 1;
3712
3713           /* Try to place the field.  It may take more than one try if we
3714              have a hard time placing the field without putting two
3715              objects of the same type at the same address.  */
3716           layout_nonempty_base_or_field (rli, decl, binfo, offsets);
3717           /* Add the new FIELD_DECL to the list of fields for T.  */
3718           TREE_CHAIN (decl) = *next_field;
3719           *next_field = decl;
3720           next_field = &TREE_CHAIN (decl);
3721         }
3722     }
3723   else
3724     {
3725       tree eoc;
3726       bool atend;
3727
3728       /* On some platforms (ARM), even empty classes will not be
3729          byte-aligned.  */
3730       eoc = round_up_loc (input_location,
3731                       rli_size_unit_so_far (rli),
3732                       CLASSTYPE_ALIGN_UNIT (basetype));
3733       atend = layout_empty_base (rli, binfo, eoc, offsets);
3734       /* A nearly-empty class "has no proper base class that is empty,
3735          not morally virtual, and at an offset other than zero."  */
3736       if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
3737         {
3738           if (atend)
3739             CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3740           /* The check above (used in G++ 3.2) is insufficient because
3741              an empty class placed at offset zero might itself have an
3742              empty base at a nonzero offset.  */
3743           else if (walk_subobject_offsets (basetype,
3744                                            empty_base_at_nonzero_offset_p,
3745                                            size_zero_node,
3746                                            /*offsets=*/NULL,
3747                                            /*max_offset=*/NULL_TREE,
3748                                            /*vbases_p=*/true))
3749             {
3750               if (abi_version_at_least (2))
3751                 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3752               else
3753                 warning (OPT_Wabi,
3754                          "class %qT will be considered nearly empty in a "
3755                          "future version of GCC", t);
3756             }
3757         }
3758
3759       /* We do not create a FIELD_DECL for empty base classes because
3760          it might overlap some other field.  We want to be able to
3761          create CONSTRUCTORs for the class by iterating over the
3762          FIELD_DECLs, and the back end does not handle overlapping
3763          FIELD_DECLs.  */
3764
3765       /* An empty virtual base causes a class to be non-empty
3766          -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
3767          here because that was already done when the virtual table
3768          pointer was created.  */
3769     }
3770
3771   /* Record the offsets of BINFO and its base subobjects.  */
3772   record_subobject_offsets (binfo,
3773                             BINFO_OFFSET (binfo),
3774                             offsets,
3775                             /*is_data_member=*/false);
3776
3777   return next_field;
3778 }
3779
3780 /* Layout all of the non-virtual base classes.  Record empty
3781    subobjects in OFFSETS.  T is the most derived type.  Return nonzero
3782    if the type cannot be nearly empty.  The fields created
3783    corresponding to the base classes will be inserted at
3784    *NEXT_FIELD.  */
3785
3786 static void
3787 build_base_fields (record_layout_info rli,
3788                    splay_tree offsets, tree *next_field)
3789 {
3790   /* Chain to hold all the new FIELD_DECLs which stand in for base class
3791      subobjects.  */
3792   tree t = rli->t;
3793   int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
3794   int i;
3795
3796   /* The primary base class is always allocated first.  */
3797   if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
3798     next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
3799                                    offsets, next_field);
3800
3801   /* Now allocate the rest of the bases.  */
3802   for (i = 0; i < n_baseclasses; ++i)
3803     {
3804       tree base_binfo;
3805
3806       base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
3807
3808       /* The primary base was already allocated above, so we don't
3809          need to allocate it again here.  */
3810       if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
3811         continue;
3812
3813       /* Virtual bases are added at the end (a primary virtual base
3814          will have already been added).  */
3815       if (BINFO_VIRTUAL_P (base_binfo))
3816         continue;
3817
3818       next_field = build_base_field (rli, base_binfo,
3819                                      offsets, next_field);
3820     }
3821 }
3822
3823 /* Go through the TYPE_METHODS of T issuing any appropriate
3824    diagnostics, figuring out which methods override which other
3825    methods, and so forth.  */
3826
3827 static void
3828 check_methods (tree t)
3829 {
3830   tree x;
3831
3832   for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
3833     {
3834       check_for_override (x, t);
3835       if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
3836         error ("initializer specified for non-virtual method %q+D", x);
3837       /* The name of the field is the original field name
3838          Save this in auxiliary field for later overloading.  */
3839       if (DECL_VINDEX (x))
3840         {
3841           TYPE_POLYMORPHIC_P (t) = 1;
3842           if (DECL_PURE_VIRTUAL_P (x))
3843             VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
3844         }
3845       /* All user-provided destructors are non-trivial.  */
3846       if (DECL_DESTRUCTOR_P (x) && user_provided_p (x))
3847         TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
3848     }
3849 }
3850
3851 /* FN is a constructor or destructor.  Clone the declaration to create
3852    a specialized in-charge or not-in-charge version, as indicated by
3853    NAME.  */
3854
3855 static tree
3856 build_clone (tree fn, tree name)
3857 {
3858   tree parms;
3859   tree clone;
3860
3861   /* Copy the function.  */
3862   clone = copy_decl (fn);
3863   /* Reset the function name.  */
3864   DECL_NAME (clone) = name;
3865   SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
3866   /* Remember where this function came from.  */
3867   DECL_ABSTRACT_ORIGIN (clone) = fn;
3868   /* Make it easy to find the CLONE given the FN.  */
3869   TREE_CHAIN (clone) = TREE_CHAIN (fn);
3870   TREE_CHAIN (fn) = clone;
3871
3872   /* If this is a template, do the rest on the DECL_TEMPLATE_RESULT.  */
3873   if (TREE_CODE (clone) == TEMPLATE_DECL)
3874     {
3875       tree result = build_clone (DECL_TEMPLATE_RESULT (clone), name);
3876       DECL_TEMPLATE_RESULT (clone) = result;
3877       DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
3878       DECL_TI_TEMPLATE (result) = clone;
3879       TREE_TYPE (clone) = TREE_TYPE (result);
3880       return clone;
3881     }
3882
3883   DECL_CLONED_FUNCTION (clone) = fn;
3884   /* There's no pending inline data for this function.  */
3885   DECL_PENDING_INLINE_INFO (clone) = NULL;
3886   DECL_PENDING_INLINE_P (clone) = 0;
3887
3888   /* The base-class destructor is not virtual.  */
3889   if (name == base_dtor_identifier)
3890     {
3891       DECL_VIRTUAL_P (clone) = 0;
3892       if (TREE_CODE (clone) != TEMPLATE_DECL)
3893         DECL_VINDEX (clone) = NULL_TREE;
3894     }
3895
3896   /* If there was an in-charge parameter, drop it from the function
3897      type.  */
3898   if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3899     {
3900       tree basetype;
3901       tree parmtypes;
3902       tree exceptions;
3903
3904       exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3905       basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3906       parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
3907       /* Skip the `this' parameter.  */
3908       parmtypes = TREE_CHAIN (parmtypes);
3909       /* Skip the in-charge parameter.  */
3910       parmtypes = TREE_CHAIN (parmtypes);
3911       /* And the VTT parm, in a complete [cd]tor.  */
3912       if (DECL_HAS_VTT_PARM_P (fn)
3913           && ! DECL_NEEDS_VTT_PARM_P (clone))
3914         parmtypes = TREE_CHAIN (parmtypes);
3915        /* If this is subobject constructor or destructor, add the vtt
3916          parameter.  */
3917       TREE_TYPE (clone)
3918         = build_method_type_directly (basetype,
3919                                       TREE_TYPE (TREE_TYPE (clone)),
3920                                       parmtypes);
3921       if (exceptions)
3922         TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
3923                                                      exceptions);
3924       TREE_TYPE (clone)
3925         = cp_build_type_attribute_variant (TREE_TYPE (clone),
3926                                            TYPE_ATTRIBUTES (TREE_TYPE (fn)));
3927     }
3928
3929   /* Copy the function parameters.  */
3930   DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
3931   /* Remove the in-charge parameter.  */
3932   if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3933     {
3934       TREE_CHAIN (DECL_ARGUMENTS (clone))
3935         = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3936       DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
3937     }
3938   /* And the VTT parm, in a complete [cd]tor.  */
3939   if (DECL_HAS_VTT_PARM_P (fn))
3940     {
3941       if (DECL_NEEDS_VTT_PARM_P (clone))
3942         DECL_HAS_VTT_PARM_P (clone) = 1;
3943       else
3944         {
3945           TREE_CHAIN (DECL_ARGUMENTS (clone))
3946             = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3947           DECL_HAS_VTT_PARM_P (clone) = 0;
3948         }
3949     }
3950
3951   for (parms = DECL_ARGUMENTS (clone); parms; parms = TREE_CHAIN (parms))
3952     {
3953       DECL_CONTEXT (parms) = clone;
3954       cxx_dup_lang_specific_decl (parms);
3955     }
3956
3957   /* Create the RTL for this function.  */
3958   SET_DECL_RTL (clone, NULL_RTX);
3959   rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
3960
3961   if (pch_file)
3962     note_decl_for_pch (clone);
3963
3964   return clone;
3965 }
3966
3967 /* Implementation of DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P, do
3968    not invoke this function directly.
3969
3970    For a non-thunk function, returns the address of the slot for storing
3971    the function it is a clone of.  Otherwise returns NULL_TREE.
3972
3973    If JUST_TESTING, looks through TEMPLATE_DECL and returns NULL if
3974    cloned_function is unset.  This is to support the separate
3975    DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P modes; using the latter
3976    on a template makes sense, but not the former.  */
3977
3978 tree *
3979 decl_cloned_function_p (const_tree decl, bool just_testing)
3980 {
3981   tree *ptr;
3982   if (just_testing)
3983     decl = STRIP_TEMPLATE (decl);
3984
3985   if (TREE_CODE (decl) != FUNCTION_DECL
3986       || !DECL_LANG_SPECIFIC (decl)
3987       || DECL_LANG_SPECIFIC (decl)->u.fn.thunk_p)
3988     {
3989 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
3990       if (!just_testing)
3991         lang_check_failed (__FILE__, __LINE__, __FUNCTION__);
3992       else
3993 #endif
3994         return NULL;
3995     }
3996
3997   ptr = &DECL_LANG_SPECIFIC (decl)->u.fn.u5.cloned_function;
3998   if (just_testing && *ptr == NULL_TREE)
3999     return NULL;
4000   else
4001     return ptr;
4002 }
4003
4004 /* Produce declarations for all appropriate clones of FN.  If
4005    UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
4006    CLASTYPE_METHOD_VEC as well.  */
4007
4008 void
4009 clone_function_decl (tree fn, int update_method_vec_p)
4010 {
4011   tree clone;
4012
4013   /* Avoid inappropriate cloning.  */
4014   if (TREE_CHAIN (fn)
4015       && DECL_CLONED_FUNCTION_P (TREE_CHAIN (fn)))
4016     return;
4017
4018   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
4019     {
4020       /* For each constructor, we need two variants: an in-charge version
4021          and a not-in-charge version.  */
4022       clone = build_clone (fn, complete_ctor_identifier);
4023       if (update_method_vec_p)
4024         add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4025       clone = build_clone (fn, base_ctor_identifier);
4026       if (update_method_vec_p)
4027         add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4028     }
4029   else
4030     {
4031       gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
4032
4033       /* For each destructor, we need three variants: an in-charge
4034          version, a not-in-charge version, and an in-charge deleting
4035          version.  We clone the deleting version first because that
4036          means it will go second on the TYPE_METHODS list -- and that
4037          corresponds to the correct layout order in the virtual
4038          function table.
4039
4040          For a non-virtual destructor, we do not build a deleting
4041          destructor.  */
4042       if (DECL_VIRTUAL_P (fn))
4043         {
4044           clone = build_clone (fn, deleting_dtor_identifier);
4045           if (update_method_vec_p)
4046             add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4047         }
4048       clone = build_clone (fn, complete_dtor_identifier);
4049       if (update_method_vec_p)
4050         add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4051       clone = build_clone (fn, base_dtor_identifier);
4052       if (update_method_vec_p)
4053         add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4054     }
4055
4056   /* Note that this is an abstract function that is never emitted.  */
4057   DECL_ABSTRACT (fn) = 1;
4058 }
4059
4060 /* DECL is an in charge constructor, which is being defined. This will
4061    have had an in class declaration, from whence clones were
4062    declared. An out-of-class definition can specify additional default
4063    arguments. As it is the clones that are involved in overload
4064    resolution, we must propagate the information from the DECL to its
4065    clones.  */
4066
4067 void
4068 adjust_clone_args (tree decl)
4069 {
4070   tree clone;
4071
4072   for (clone = TREE_CHAIN (decl); clone && DECL_CLONED_FUNCTION_P (clone);
4073        clone = TREE_CHAIN (clone))
4074     {
4075       tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
4076       tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
4077       tree decl_parms, clone_parms;
4078
4079       clone_parms = orig_clone_parms;
4080
4081       /* Skip the 'this' parameter.  */
4082       orig_clone_parms = TREE_CHAIN (orig_clone_parms);
4083       orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4084
4085       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
4086         orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4087       if (DECL_HAS_VTT_PARM_P (decl))
4088         orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4089
4090       clone_parms = orig_clone_parms;
4091       if (DECL_HAS_VTT_PARM_P (clone))
4092         clone_parms = TREE_CHAIN (clone_parms);
4093
4094       for (decl_parms = orig_decl_parms; decl_parms;
4095            decl_parms = TREE_CHAIN (decl_parms),
4096              clone_parms = TREE_CHAIN (clone_parms))
4097         {
4098           gcc_assert (same_type_p (TREE_TYPE (decl_parms),
4099                                    TREE_TYPE (clone_parms)));
4100
4101           if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
4102             {
4103               /* A default parameter has been added. Adjust the
4104                  clone's parameters.  */
4105               tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
4106               tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4107               tree type;
4108
4109               clone_parms = orig_decl_parms;
4110
4111               if (DECL_HAS_VTT_PARM_P (clone))
4112                 {
4113                   clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
4114                                            TREE_VALUE (orig_clone_parms),
4115                                            clone_parms);
4116                   TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
4117                 }
4118               type = build_method_type_directly (basetype,
4119                                                  TREE_TYPE (TREE_TYPE (clone)),
4120                                                  clone_parms);
4121               if (exceptions)
4122                 type = build_exception_variant (type, exceptions);
4123               TREE_TYPE (clone) = type;
4124
4125               clone_parms = NULL_TREE;
4126               break;
4127             }
4128         }
4129       gcc_assert (!clone_parms);
4130     }
4131 }
4132
4133 /* For each of the constructors and destructors in T, create an
4134    in-charge and not-in-charge variant.  */
4135
4136 static void
4137 clone_constructors_and_destructors (tree t)
4138 {
4139   tree fns;
4140
4141   /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4142      out now.  */
4143   if (!CLASSTYPE_METHOD_VEC (t))
4144     return;
4145
4146   for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4147     clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4148   for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4149     clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4150 }
4151
4152 /* Returns true iff class T has a user-defined constructor other than
4153    the default constructor.  */
4154
4155 bool
4156 type_has_user_nondefault_constructor (tree t)
4157 {
4158   tree fns;
4159
4160   if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4161     return false;
4162
4163   for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4164     {
4165       tree fn = OVL_CURRENT (fns);
4166       if (!DECL_ARTIFICIAL (fn)
4167           && (TREE_CODE (fn) == TEMPLATE_DECL
4168               || (skip_artificial_parms_for (fn, DECL_ARGUMENTS (fn))
4169                   != NULL_TREE)))
4170         return true;
4171     }
4172
4173   return false;
4174 }
4175
4176 /* Returns true iff FN is a user-provided function, i.e. user-declared
4177    and not defaulted at its first declaration; or explicit, private,
4178    protected, or non-const.  */
4179
4180 bool
4181 user_provided_p (tree fn)
4182 {
4183   if (TREE_CODE (fn) == TEMPLATE_DECL)
4184     return true;
4185   else
4186     return (!DECL_ARTIFICIAL (fn)
4187             && !DECL_DEFAULTED_IN_CLASS_P (fn));
4188 }
4189
4190 /* Returns true iff class T has a user-provided constructor.  */
4191
4192 bool
4193 type_has_user_provided_constructor (tree t)
4194 {
4195   tree fns;
4196
4197   if (!CLASS_TYPE_P (t))
4198     return false;
4199
4200   if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4201     return false;
4202
4203   /* This can happen in error cases; avoid crashing.  */
4204   if (!CLASSTYPE_METHOD_VEC (t))
4205     return false;
4206
4207   for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4208     if (user_provided_p (OVL_CURRENT (fns)))
4209       return true;
4210
4211   return false;
4212 }
4213
4214 /* Returns true iff class T has a user-provided default constructor.  */
4215
4216 bool
4217 type_has_user_provided_default_constructor (tree t)
4218 {
4219   tree fns, args;
4220
4221   if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4222     return false;
4223
4224   for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4225     {
4226       tree fn = OVL_CURRENT (fns);
4227       if (TREE_CODE (fn) == FUNCTION_DECL
4228           && user_provided_p (fn))
4229         {
4230           args = FUNCTION_FIRST_USER_PARMTYPE (fn);
4231           while (args && TREE_PURPOSE (args))
4232             args = TREE_CHAIN (args);
4233           if (!args || args == void_list_node)
4234             return true;
4235         }
4236     }
4237
4238   return false;
4239 }
4240
4241 /* Remove all zero-width bit-fields from T.  */
4242
4243 static void
4244 remove_zero_width_bit_fields (tree t)
4245 {
4246   tree *fieldsp;
4247
4248   fieldsp = &TYPE_FIELDS (t);
4249   while (*fieldsp)
4250     {
4251       if (TREE_CODE (*fieldsp) == FIELD_DECL
4252           && DECL_C_BIT_FIELD (*fieldsp)
4253           && DECL_INITIAL (*fieldsp))
4254         *fieldsp = TREE_CHAIN (*fieldsp);
4255       else
4256         fieldsp = &TREE_CHAIN (*fieldsp);
4257     }
4258 }
4259
4260 /* Returns TRUE iff we need a cookie when dynamically allocating an
4261    array whose elements have the indicated class TYPE.  */
4262
4263 static bool
4264 type_requires_array_cookie (tree type)
4265 {
4266   tree fns;
4267   bool has_two_argument_delete_p = false;
4268
4269   gcc_assert (CLASS_TYPE_P (type));
4270
4271   /* If there's a non-trivial destructor, we need a cookie.  In order
4272      to iterate through the array calling the destructor for each
4273      element, we'll have to know how many elements there are.  */
4274   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4275     return true;
4276
4277   /* If the usual deallocation function is a two-argument whose second
4278      argument is of type `size_t', then we have to pass the size of
4279      the array to the deallocation function, so we will need to store
4280      a cookie.  */
4281   fns = lookup_fnfields (TYPE_BINFO (type),
4282                          ansi_opname (VEC_DELETE_EXPR),
4283                          /*protect=*/0);
4284   /* If there are no `operator []' members, or the lookup is
4285      ambiguous, then we don't need a cookie.  */
4286   if (!fns || fns == error_mark_node)
4287     return false;
4288   /* Loop through all of the functions.  */
4289   for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
4290     {
4291       tree fn;
4292       tree second_parm;
4293
4294       /* Select the current function.  */
4295       fn = OVL_CURRENT (fns);
4296       /* See if this function is a one-argument delete function.  If
4297          it is, then it will be the usual deallocation function.  */
4298       second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
4299       if (second_parm == void_list_node)
4300         return false;
4301       /* Do not consider this function if its second argument is an
4302          ellipsis.  */
4303       if (!second_parm)
4304         continue;
4305       /* Otherwise, if we have a two-argument function and the second
4306          argument is `size_t', it will be the usual deallocation
4307          function -- unless there is one-argument function, too.  */
4308       if (TREE_CHAIN (second_parm) == void_list_node
4309           && same_type_p (TREE_VALUE (second_parm), size_type_node))
4310         has_two_argument_delete_p = true;
4311     }
4312
4313   return has_two_argument_delete_p;
4314 }
4315
4316 /* Check the validity of the bases and members declared in T.  Add any
4317    implicitly-generated functions (like copy-constructors and
4318    assignment operators).  Compute various flag bits (like
4319    CLASSTYPE_NON_LAYOUT_POD_T) for T.  This routine works purely at the C++
4320    level: i.e., independently of the ABI in use.  */
4321
4322 static void
4323 check_bases_and_members (tree t)
4324 {
4325   /* Nonzero if the implicitly generated copy constructor should take
4326      a non-const reference argument.  */
4327   int cant_have_const_ctor;
4328   /* Nonzero if the implicitly generated assignment operator
4329      should take a non-const reference argument.  */
4330   int no_const_asn_ref;
4331   tree access_decls;
4332   bool saved_complex_asn_ref;
4333   bool saved_nontrivial_dtor;
4334   tree fn;
4335
4336   /* By default, we use const reference arguments and generate default
4337      constructors.  */
4338   cant_have_const_ctor = 0;
4339   no_const_asn_ref = 0;
4340
4341   /* Check all the base-classes.  */
4342   check_bases (t, &cant_have_const_ctor,
4343                &no_const_asn_ref);
4344
4345   /* Check all the method declarations.  */
4346   check_methods (t);
4347
4348   /* Save the initial values of these flags which only indicate whether
4349      or not the class has user-provided functions.  As we analyze the
4350      bases and members we can set these flags for other reasons.  */
4351   saved_complex_asn_ref = TYPE_HAS_COMPLEX_ASSIGN_REF (t);
4352   saved_nontrivial_dtor = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
4353
4354   /* Check all the data member declarations.  We cannot call
4355      check_field_decls until we have called check_bases check_methods,
4356      as check_field_decls depends on TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4357      being set appropriately.  */
4358   check_field_decls (t, &access_decls,
4359                      &cant_have_const_ctor,
4360                      &no_const_asn_ref);
4361
4362   /* A nearly-empty class has to be vptr-containing; a nearly empty
4363      class contains just a vptr.  */
4364   if (!TYPE_CONTAINS_VPTR_P (t))
4365     CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4366
4367   /* Do some bookkeeping that will guide the generation of implicitly
4368      declared member functions.  */
4369   TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_CONTAINS_VPTR_P (t);
4370   /* We need to call a constructor for this class if it has a
4371      user-provided constructor, or if the default constructor is going
4372      to initialize the vptr.  (This is not an if-and-only-if;
4373      TYPE_NEEDS_CONSTRUCTING is set elsewhere if bases or members
4374      themselves need constructing.)  */
4375   TYPE_NEEDS_CONSTRUCTING (t)
4376     |= (type_has_user_provided_constructor (t) || TYPE_CONTAINS_VPTR_P (t));
4377   /* [dcl.init.aggr]
4378
4379      An aggregate is an array or a class with no user-provided
4380      constructors ... and no virtual functions.  
4381
4382      Again, other conditions for being an aggregate are checked
4383      elsewhere.  */
4384   CLASSTYPE_NON_AGGREGATE (t)
4385     |= (type_has_user_provided_constructor (t) || TYPE_POLYMORPHIC_P (t));
4386   /* This is the C++98/03 definition of POD; it changed in C++0x, but we
4387      retain the old definition internally for ABI reasons.  */
4388   CLASSTYPE_NON_LAYOUT_POD_P (t)
4389     |= (CLASSTYPE_NON_AGGREGATE (t)
4390         || saved_nontrivial_dtor || saved_complex_asn_ref);
4391   CLASSTYPE_NON_STD_LAYOUT (t) |= TYPE_CONTAINS_VPTR_P (t);
4392   TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_CONTAINS_VPTR_P (t);
4393   TYPE_HAS_COMPLEX_DFLT (t) |= TYPE_CONTAINS_VPTR_P (t);
4394
4395   /* If the class has no user-declared constructor, but does have
4396      non-static const or reference data members that can never be
4397      initialized, issue a warning.  */
4398   if (warn_uninitialized
4399       /* Classes with user-declared constructors are presumed to
4400          initialize these members.  */
4401       && !TYPE_HAS_USER_CONSTRUCTOR (t)
4402       /* Aggregates can be initialized with brace-enclosed
4403          initializers.  */
4404       && CLASSTYPE_NON_AGGREGATE (t))
4405     {
4406       tree field;
4407
4408       for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4409         {
4410           tree type;
4411
4412           if (TREE_CODE (field) != FIELD_DECL)
4413             continue;
4414
4415           type = TREE_TYPE (field);
4416           if (TREE_CODE (type) == REFERENCE_TYPE)
4417             warning (OPT_Wuninitialized, "non-static reference %q+#D "
4418                      "in class without a constructor", field);
4419           else if (CP_TYPE_CONST_P (type)
4420                    && (!CLASS_TYPE_P (type)
4421                        || !TYPE_HAS_DEFAULT_CONSTRUCTOR (type)))
4422             warning (OPT_Wuninitialized, "non-static const member %q+#D "
4423                      "in class without a constructor", field);
4424         }
4425     }
4426
4427   /* Synthesize any needed methods.  */
4428   add_implicitly_declared_members (t,
4429                                    cant_have_const_ctor,
4430                                    no_const_asn_ref);
4431
4432   /* Check defaulted declarations here so we have cant_have_const_ctor
4433      and don't need to worry about clones.  */
4434   for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
4435     if (DECL_DEFAULTED_IN_CLASS_P (fn))
4436       {
4437         int copy = copy_fn_p (fn);
4438         if (copy > 0)
4439           {
4440             bool imp_const_p
4441               = (DECL_CONSTRUCTOR_P (fn) ? !cant_have_const_ctor
4442                  : !no_const_asn_ref);
4443             bool fn_const_p = (copy == 2);
4444
4445             if (fn_const_p && !imp_const_p)
4446               /* If the function is defaulted outside the class, we just
4447                  give the synthesis error.  */
4448               error ("%q+D declared to take const reference, but implicit "
4449                      "declaration would take non-const", fn);
4450             else if (imp_const_p && !fn_const_p)
4451               error ("%q+D declared to take non-const reference cannot be "
4452                      "defaulted in the class body", fn);
4453           }
4454         defaulted_late_check (fn);
4455       }
4456
4457   if (LAMBDA_TYPE_P (t))
4458     {
4459       /* "The closure type associated with a lambda-expression has a deleted
4460          default constructor and a deleted copy assignment operator."  */
4461       TYPE_NEEDS_CONSTRUCTING (t) = 1;
4462       TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4463       CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 0;
4464       TYPE_HAS_ASSIGN_REF (t) = 0;
4465       CLASSTYPE_LAZY_ASSIGNMENT_OP (t) = 0;
4466
4467       /* "This class type is not an aggregate."  */
4468       CLASSTYPE_NON_AGGREGATE (t) = 1;
4469     }
4470
4471   /* Create the in-charge and not-in-charge variants of constructors
4472      and destructors.  */
4473   clone_constructors_and_destructors (t);
4474
4475   /* Process the using-declarations.  */
4476   for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4477     handle_using_decl (TREE_VALUE (access_decls), t);
4478
4479   /* Build and sort the CLASSTYPE_METHOD_VEC.  */
4480   finish_struct_methods (t);
4481
4482   /* Figure out whether or not we will need a cookie when dynamically
4483      allocating an array of this type.  */
4484   TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
4485     = type_requires_array_cookie (t);
4486 }
4487
4488 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
4489    accordingly.  If a new vfield was created (because T doesn't have a
4490    primary base class), then the newly created field is returned.  It
4491    is not added to the TYPE_FIELDS list; it is the caller's
4492    responsibility to do that.  Accumulate declared virtual functions
4493    on VIRTUALS_P.  */
4494
4495 static tree
4496 create_vtable_ptr (tree t, tree* virtuals_p)
4497 {
4498   tree fn;
4499
4500   /* Collect the virtual functions declared in T.  */
4501   for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
4502     if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
4503         && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
4504       {
4505         tree new_virtual = make_node (TREE_LIST);
4506
4507         BV_FN (new_virtual) = fn;
4508         BV_DELTA (new_virtual) = integer_zero_node;
4509         BV_VCALL_INDEX (new_virtual) = NULL_TREE;
4510
4511         TREE_CHAIN (new_virtual) = *virtuals_p;
4512         *virtuals_p = new_virtual;
4513       }
4514
4515   /* If we couldn't find an appropriate base class, create a new field
4516      here.  Even if there weren't any new virtual functions, we might need a
4517      new virtual function table if we're supposed to include vptrs in
4518      all classes that need them.  */
4519   if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
4520     {
4521       /* We build this decl with vtbl_ptr_type_node, which is a
4522          `vtable_entry_type*'.  It might seem more precise to use
4523          `vtable_entry_type (*)[N]' where N is the number of virtual
4524          functions.  However, that would require the vtable pointer in
4525          base classes to have a different type than the vtable pointer
4526          in derived classes.  We could make that happen, but that
4527          still wouldn't solve all the problems.  In particular, the
4528          type-based alias analysis code would decide that assignments
4529          to the base class vtable pointer can't alias assignments to
4530          the derived class vtable pointer, since they have different
4531          types.  Thus, in a derived class destructor, where the base
4532          class constructor was inlined, we could generate bad code for
4533          setting up the vtable pointer.
4534
4535          Therefore, we use one type for all vtable pointers.  We still
4536          use a type-correct type; it's just doesn't indicate the array
4537          bounds.  That's better than using `void*' or some such; it's
4538          cleaner, and it let's the alias analysis code know that these
4539          stores cannot alias stores to void*!  */
4540       tree field;
4541
4542       field = build_decl (input_location, 
4543                           FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
4544       DECL_VIRTUAL_P (field) = 1;
4545       DECL_ARTIFICIAL (field) = 1;
4546       DECL_FIELD_CONTEXT (field) = t;
4547       DECL_FCONTEXT (field) = t;
4548
4549       TYPE_VFIELD (t) = field;
4550
4551       /* This class is non-empty.  */
4552       CLASSTYPE_EMPTY_P (t) = 0;
4553
4554       return field;
4555     }
4556
4557   return NULL_TREE;
4558 }
4559
4560 /* Add OFFSET to all base types of BINFO which is a base in the
4561    hierarchy dominated by T.
4562
4563    OFFSET, which is a type offset, is number of bytes.  */
4564
4565 static void
4566 propagate_binfo_offsets (tree binfo, tree offset)
4567 {
4568   int i;
4569   tree primary_binfo;
4570   tree base_binfo;
4571
4572   /* Update BINFO's offset.  */
4573   BINFO_OFFSET (binfo)
4574     = convert (sizetype,
4575                size_binop (PLUS_EXPR,
4576                            convert (ssizetype, BINFO_OFFSET (binfo)),
4577                            offset));
4578
4579   /* Find the primary base class.  */
4580   primary_binfo = get_primary_binfo (binfo);
4581
4582   if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
4583     propagate_binfo_offsets (primary_binfo, offset);
4584
4585   /* Scan all of the bases, pushing the BINFO_OFFSET adjust
4586      downwards.  */
4587   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4588     {
4589       /* Don't do the primary base twice.  */
4590       if (base_binfo == primary_binfo)
4591         continue;
4592
4593       if (BINFO_VIRTUAL_P (base_binfo))
4594         continue;
4595
4596       propagate_binfo_offsets (base_binfo, offset);
4597     }
4598 }
4599
4600 /* Set BINFO_OFFSET for all of the virtual bases for RLI->T.  Update
4601    TYPE_ALIGN and TYPE_SIZE for T.  OFFSETS gives the location of
4602    empty subobjects of T.  */
4603
4604 static void
4605 layout_virtual_bases (record_layout_info rli, splay_tree offsets)
4606 {
4607   tree vbase;
4608   tree t = rli->t;
4609   bool first_vbase = true;
4610   tree *next_field;
4611
4612   if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
4613     return;
4614
4615   if (!abi_version_at_least(2))
4616     {
4617       /* In G++ 3.2, we incorrectly rounded the size before laying out
4618          the virtual bases.  */
4619       finish_record_layout (rli, /*free_p=*/false);
4620 #ifdef STRUCTURE_SIZE_BOUNDARY
4621       /* Packed structures don't need to have minimum size.  */
4622       if (! TYPE_PACKED (t))
4623         TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
4624 #endif
4625       rli->offset = TYPE_SIZE_UNIT (t);
4626       rli->bitpos = bitsize_zero_node;
4627       rli->record_align = TYPE_ALIGN (t);
4628     }
4629
4630   /* Find the last field.  The artificial fields created for virtual
4631      bases will go after the last extant field to date.  */
4632   next_field = &TYPE_FIELDS (t);
4633   while (*next_field)
4634     next_field = &TREE_CHAIN (*next_field);
4635
4636   /* Go through the virtual bases, allocating space for each virtual
4637      base that is not already a primary base class.  These are
4638      allocated in inheritance graph order.  */
4639   for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
4640     {
4641       if (!BINFO_VIRTUAL_P (vbase))
4642         continue;
4643
4644       if (!BINFO_PRIMARY_P (vbase))
4645         {
4646           tree basetype = TREE_TYPE (vbase);
4647
4648           /* This virtual base is not a primary base of any class in the
4649              hierarchy, so we have to add space for it.  */
4650           next_field = build_base_field (rli, vbase,
4651                                          offsets, next_field);
4652
4653           /* If the first virtual base might have been placed at a
4654              lower address, had we started from CLASSTYPE_SIZE, rather
4655              than TYPE_SIZE, issue a warning.  There can be both false
4656              positives and false negatives from this warning in rare
4657              cases; to deal with all the possibilities would probably
4658              require performing both layout algorithms and comparing
4659              the results which is not particularly tractable.  */
4660           if (warn_abi
4661               && first_vbase
4662               && (tree_int_cst_lt
4663                   (size_binop (CEIL_DIV_EXPR,
4664                                round_up_loc (input_location,
4665                                          CLASSTYPE_SIZE (t),
4666                                          CLASSTYPE_ALIGN (basetype)),
4667                                bitsize_unit_node),
4668                    BINFO_OFFSET (vbase))))
4669             warning (OPT_Wabi,
4670                      "offset of virtual base %qT is not ABI-compliant and "
4671                      "may change in a future version of GCC",
4672                      basetype);
4673
4674           first_vbase = false;
4675         }
4676     }
4677 }
4678
4679 /* Returns the offset of the byte just past the end of the base class
4680    BINFO.  */
4681
4682 static tree
4683 end_of_base (tree binfo)
4684 {
4685   tree size;
4686
4687   if (!CLASSTYPE_AS_BASE (BINFO_TYPE (binfo)))
4688     size = TYPE_SIZE_UNIT (char_type_node);
4689   else if (is_empty_class (BINFO_TYPE (binfo)))
4690     /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
4691        allocate some space for it. It cannot have virtual bases, so
4692        TYPE_SIZE_UNIT is fine.  */
4693     size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4694   else
4695     size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4696
4697   return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
4698 }
4699
4700 /* Returns the offset of the byte just past the end of the base class
4701    with the highest offset in T.  If INCLUDE_VIRTUALS_P is zero, then
4702    only non-virtual bases are included.  */
4703
4704 static tree
4705 end_of_class (tree t, int include_virtuals_p)
4706 {
4707   tree result = size_zero_node;
4708   VEC(tree,gc) *vbases;
4709   tree binfo;
4710   tree base_binfo;
4711   tree offset;
4712   int i;
4713
4714   for (binfo = TYPE_BINFO (t), i = 0;
4715        BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4716     {
4717       if (!include_virtuals_p
4718           && BINFO_VIRTUAL_P (base_binfo)
4719           && (!BINFO_PRIMARY_P (base_binfo)
4720               || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
4721         continue;
4722
4723       offset = end_of_base (base_binfo);
4724       if (INT_CST_LT_UNSIGNED (result, offset))
4725         result = offset;
4726     }
4727
4728   /* G++ 3.2 did not check indirect virtual bases.  */
4729   if (abi_version_at_least (2) && include_virtuals_p)
4730     for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4731          VEC_iterate (tree, vbases, i, base_binfo); i++)
4732       {
4733         offset = end_of_base (base_binfo);
4734         if (INT_CST_LT_UNSIGNED (result, offset))
4735           result = offset;
4736       }
4737
4738   return result;
4739 }
4740
4741 /* Warn about bases of T that are inaccessible because they are
4742    ambiguous.  For example:
4743
4744      struct S {};
4745      struct T : public S {};
4746      struct U : public S, public T {};
4747
4748    Here, `(S*) new U' is not allowed because there are two `S'
4749    subobjects of U.  */
4750
4751 static void
4752 warn_about_ambiguous_bases (tree t)
4753 {
4754   int i;
4755   VEC(tree,gc) *vbases;
4756   tree basetype;
4757   tree binfo;
4758   tree base_binfo;
4759
4760   /* If there are no repeated bases, nothing can be ambiguous.  */
4761   if (!CLASSTYPE_REPEATED_BASE_P (t))
4762     return;
4763
4764   /* Check direct bases.  */
4765   for (binfo = TYPE_BINFO (t), i = 0;
4766        BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4767     {
4768       basetype = BINFO_TYPE (base_binfo);
4769
4770       if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
4771         warning (0, "direct base %qT inaccessible in %qT due to ambiguity",
4772                  basetype, t);
4773     }
4774
4775   /* Check for ambiguous virtual bases.  */
4776   if (extra_warnings)
4777     for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4778          VEC_iterate (tree, vbases, i, binfo); i++)
4779       {
4780         basetype = BINFO_TYPE (binfo);
4781
4782         if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
4783           warning (OPT_Wextra, "virtual base %qT inaccessible in %qT due to ambiguity",
4784                    basetype, t);
4785       }
4786 }
4787
4788 /* Compare two INTEGER_CSTs K1 and K2.  */
4789
4790 static int
4791 splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
4792 {
4793   return tree_int_cst_compare ((tree) k1, (tree) k2);
4794 }
4795
4796 /* Increase the size indicated in RLI to account for empty classes
4797    that are "off the end" of the class.  */
4798
4799 static void
4800 include_empty_classes (record_layout_info rli)
4801 {
4802   tree eoc;
4803   tree rli_size;
4804
4805   /* It might be the case that we grew the class to allocate a
4806      zero-sized base class.  That won't be reflected in RLI, yet,
4807      because we are willing to overlay multiple bases at the same
4808      offset.  However, now we need to make sure that RLI is big enough
4809      to reflect the entire class.  */
4810   eoc = end_of_class (rli->t,
4811                       CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
4812   rli_size = rli_size_unit_so_far (rli);
4813   if (TREE_CODE (rli_size) == INTEGER_CST
4814       && INT_CST_LT_UNSIGNED (rli_size, eoc))
4815     {
4816       if (!abi_version_at_least (2))
4817         /* In version 1 of the ABI, the size of a class that ends with
4818            a bitfield was not rounded up to a whole multiple of a
4819            byte.  Because rli_size_unit_so_far returns only the number
4820            of fully allocated bytes, any extra bits were not included
4821            in the size.  */
4822         rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
4823       else
4824         /* The size should have been rounded to a whole byte.  */
4825         gcc_assert (tree_int_cst_equal
4826                     (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
4827       rli->bitpos
4828         = size_binop (PLUS_EXPR,
4829                       rli->bitpos,
4830                       size_binop (MULT_EXPR,
4831                                   convert (bitsizetype,
4832                                            size_binop (MINUS_EXPR,
4833                                                        eoc, rli_size)),
4834                                   bitsize_int (BITS_PER_UNIT)));
4835       normalize_rli (rli);
4836     }
4837 }
4838
4839 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T.  Calculate
4840    BINFO_OFFSETs for all of the base-classes.  Position the vtable
4841    pointer.  Accumulate declared virtual functions on VIRTUALS_P.  */
4842
4843 static void
4844 layout_class_type (tree t, tree *virtuals_p)
4845 {
4846   tree non_static_data_members;
4847   tree field;
4848   tree vptr;
4849   record_layout_info rli;
4850   /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
4851      types that appear at that offset.  */
4852   splay_tree empty_base_offsets;
4853   /* True if the last field layed out was a bit-field.  */
4854   bool last_field_was_bitfield = false;
4855   /* The location at which the next field should be inserted.  */
4856   tree *next_field;
4857   /* T, as a base class.  */
4858   tree base_t;
4859
4860   /* Keep track of the first non-static data member.  */
4861   non_static_data_members = TYPE_FIELDS (t);
4862
4863   /* Start laying out the record.  */
4864   rli = start_record_layout (t);
4865
4866   /* Mark all the primary bases in the hierarchy.  */
4867   determine_primary_bases (t);
4868
4869   /* Create a pointer to our virtual function table.  */
4870   vptr = create_vtable_ptr (t, virtuals_p);
4871
4872   /* The vptr is always the first thing in the class.  */
4873   if (vptr)
4874     {
4875       TREE_CHAIN (vptr) = TYPE_FIELDS (t);
4876       TYPE_FIELDS (t) = vptr;
4877       next_field = &TREE_CHAIN (vptr);
4878       place_field (rli, vptr);
4879     }
4880   else
4881     next_field = &TYPE_FIELDS (t);
4882
4883   /* Build FIELD_DECLs for all of the non-virtual base-types.  */
4884   empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
4885                                        NULL, NULL);
4886   build_base_fields (rli, empty_base_offsets, next_field);
4887
4888   /* Layout the non-static data members.  */
4889   for (field = non_static_data_members; field; field = TREE_CHAIN (field))
4890     {
4891       tree type;
4892       tree padding;
4893
4894       /* We still pass things that aren't non-static data members to
4895          the back end, in case it wants to do something with them.  */
4896       if (TREE_CODE (field) != FIELD_DECL)
4897         {
4898           place_field (rli, field);
4899           /* If the static data member has incomplete type, keep track
4900              of it so that it can be completed later.  (The handling
4901              of pending statics in finish_record_layout is
4902              insufficient; consider:
4903
4904                struct S1;
4905                struct S2 { static S1 s1; };
4906
4907              At this point, finish_record_layout will be called, but
4908              S1 is still incomplete.)  */
4909           if (TREE_CODE (field) == VAR_DECL)
4910             {
4911               maybe_register_incomplete_var (field);
4912               /* The visibility of static data members is determined
4913                  at their point of declaration, not their point of
4914                  definition.  */
4915               determine_visibility (field);
4916             }
4917           continue;
4918         }
4919
4920       type = TREE_TYPE (field);
4921       if (type == error_mark_node)
4922         continue;
4923
4924       padding = NULL_TREE;
4925
4926       /* If this field is a bit-field whose width is greater than its
4927          type, then there are some special rules for allocating
4928          it.  */
4929       if (DECL_C_BIT_FIELD (field)
4930           && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
4931         {
4932           unsigned int itk;
4933           tree integer_type;
4934           bool was_unnamed_p = false;
4935           /* We must allocate the bits as if suitably aligned for the
4936              longest integer type that fits in this many bits.  type
4937              of the field.  Then, we are supposed to use the left over
4938              bits as additional padding.  */
4939           for (itk = itk_char; itk != itk_none; ++itk)
4940             if (INT_CST_LT (DECL_SIZE (field),
4941                             TYPE_SIZE (integer_types[itk])))
4942               break;
4943
4944           /* ITK now indicates a type that is too large for the
4945              field.  We have to back up by one to find the largest
4946              type that fits.  */
4947           integer_type = integer_types[itk - 1];
4948
4949           /* Figure out how much additional padding is required.  GCC
4950              3.2 always created a padding field, even if it had zero
4951              width.  */
4952           if (!abi_version_at_least (2)
4953               || INT_CST_LT (TYPE_SIZE (integer_type), DECL_SIZE (field)))
4954             {
4955               if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
4956                 /* In a union, the padding field must have the full width
4957                    of the bit-field; all fields start at offset zero.  */
4958                 padding = DECL_SIZE (field);
4959               else
4960                 {
4961                   if (TREE_CODE (t) == UNION_TYPE)
4962                     warning (OPT_Wabi, "size assigned to %qT may not be "
4963                              "ABI-compliant and may change in a future "
4964                              "version of GCC",
4965                              t);
4966                   padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
4967                                         TYPE_SIZE (integer_type));
4968                 }
4969             }
4970 #ifdef PCC_BITFIELD_TYPE_MATTERS
4971           /* An unnamed bitfield does not normally affect the
4972              alignment of the containing class on a target where
4973              PCC_BITFIELD_TYPE_MATTERS.  But, the C++ ABI does not
4974              make any exceptions for unnamed bitfields when the
4975              bitfields are longer than their types.  Therefore, we
4976              temporarily give the field a name.  */
4977           if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
4978             {
4979               was_unnamed_p = true;
4980               DECL_NAME (field) = make_anon_name ();
4981             }
4982 #endif
4983           DECL_SIZE (field) = TYPE_SIZE (integer_type);
4984           DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
4985           DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
4986           layout_nonempty_base_or_field (rli, field, NULL_TREE,
4987                                          empty_base_offsets);
4988           if (was_unnamed_p)
4989             DECL_NAME (field) = NULL_TREE;
4990           /* Now that layout has been performed, set the size of the
4991              field to the size of its declared type; the rest of the
4992              field is effectively invisible.  */
4993           DECL_SIZE (field) = TYPE_SIZE (type);
4994           /* We must also reset the DECL_MODE of the field.  */
4995           if (abi_version_at_least (2))
4996             DECL_MODE (field) = TYPE_MODE (type);
4997           else if (warn_abi
4998                    && DECL_MODE (field) != TYPE_MODE (type))
4999             /* Versions of G++ before G++ 3.4 did not reset the
5000                DECL_MODE.  */
5001             warning (OPT_Wabi,
5002                      "the offset of %qD may not be ABI-compliant and may "
5003                      "change in a future version of GCC", field);
5004         }
5005       else
5006         layout_nonempty_base_or_field (rli, field, NULL_TREE,
5007                                        empty_base_offsets);
5008
5009       /* Remember the location of any empty classes in FIELD.  */
5010       if (abi_version_at_least (2))
5011         record_subobject_offsets (TREE_TYPE (field),
5012                                   byte_position(field),
5013                                   empty_base_offsets,
5014                                   /*is_data_member=*/true);
5015
5016       /* If a bit-field does not immediately follow another bit-field,
5017          and yet it starts in the middle of a byte, we have failed to
5018          comply with the ABI.  */
5019       if (warn_abi
5020           && DECL_C_BIT_FIELD (field)
5021           /* The TREE_NO_WARNING flag gets set by Objective-C when
5022              laying out an Objective-C class.  The ObjC ABI differs
5023              from the C++ ABI, and so we do not want a warning
5024              here.  */
5025           && !TREE_NO_WARNING (field)
5026           && !last_field_was_bitfield
5027           && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
5028                                          DECL_FIELD_BIT_OFFSET (field),
5029                                          bitsize_unit_node)))
5030         warning (OPT_Wabi, "offset of %q+D is not ABI-compliant and may "
5031                  "change in a future version of GCC", field);
5032
5033       /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
5034          offset of the field.  */
5035       if (warn_abi
5036           && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
5037                                   byte_position (field))
5038           && contains_empty_class_p (TREE_TYPE (field)))
5039         warning (OPT_Wabi, "%q+D contains empty classes which may cause base "
5040                  "classes to be placed at different locations in a "
5041                  "future version of GCC", field);
5042
5043       /* The middle end uses the type of expressions to determine the
5044          possible range of expression values.  In order to optimize
5045          "x.i > 7" to "false" for a 2-bit bitfield "i", the middle end
5046          must be made aware of the width of "i", via its type.
5047
5048          Because C++ does not have integer types of arbitrary width,
5049          we must (for the purposes of the front end) convert from the
5050          type assigned here to the declared type of the bitfield
5051          whenever a bitfield expression is used as an rvalue.
5052          Similarly, when assigning a value to a bitfield, the value
5053          must be converted to the type given the bitfield here.  */
5054       if (DECL_C_BIT_FIELD (field))
5055         {
5056           unsigned HOST_WIDE_INT width;
5057           tree ftype = TREE_TYPE (field);
5058           width = tree_low_cst (DECL_SIZE (field), /*unsignedp=*/1);
5059           if (width != TYPE_PRECISION (ftype))
5060             {
5061               TREE_TYPE (field)
5062                 = c_build_bitfield_integer_type (width,
5063                                                  TYPE_UNSIGNED (ftype));
5064               TREE_TYPE (field)
5065                 = cp_build_qualified_type (TREE_TYPE (field),
5066                                            TYPE_QUALS (ftype));
5067             }
5068         }
5069
5070       /* If we needed additional padding after this field, add it
5071          now.  */
5072       if (padding)
5073         {
5074           tree padding_field;
5075
5076           padding_field = build_decl (input_location,
5077                                       FIELD_DECL,
5078                                       NULL_TREE,
5079                                       char_type_node);
5080           DECL_BIT_FIELD (padding_field) = 1;
5081           DECL_SIZE (padding_field) = padding;
5082           DECL_CONTEXT (padding_field) = t;
5083           DECL_ARTIFICIAL (padding_field) = 1;
5084           DECL_IGNORED_P (padding_field) = 1;
5085           layout_nonempty_base_or_field (rli, padding_field,
5086                                          NULL_TREE,
5087                                          empty_base_offsets);
5088         }
5089
5090       last_field_was_bitfield = DECL_C_BIT_FIELD (field);
5091     }
5092
5093   if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
5094     {
5095       /* Make sure that we are on a byte boundary so that the size of
5096          the class without virtual bases will always be a round number
5097          of bytes.  */
5098       rli->bitpos = round_up_loc (input_location, rli->bitpos, BITS_PER_UNIT);
5099       normalize_rli (rli);
5100     }
5101
5102   /* G++ 3.2 does not allow virtual bases to be overlaid with tail
5103      padding.  */
5104   if (!abi_version_at_least (2))
5105     include_empty_classes(rli);
5106
5107   /* Delete all zero-width bit-fields from the list of fields.  Now
5108      that the type is laid out they are no longer important.  */
5109   remove_zero_width_bit_fields (t);
5110
5111   /* Create the version of T used for virtual bases.  We do not use
5112      make_class_type for this version; this is an artificial type.  For
5113      a POD type, we just reuse T.  */
5114   if (CLASSTYPE_NON_LAYOUT_POD_P (t) || CLASSTYPE_EMPTY_P (t))
5115     {
5116       base_t = make_node (TREE_CODE (t));
5117
5118       /* Set the size and alignment for the new type.  In G++ 3.2, all
5119          empty classes were considered to have size zero when used as
5120          base classes.  */
5121       if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
5122         {
5123           TYPE_SIZE (base_t) = bitsize_zero_node;
5124           TYPE_SIZE_UNIT (base_t) = size_zero_node;
5125           if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
5126             warning (OPT_Wabi,
5127                      "layout of classes derived from empty class %qT "
5128                      "may change in a future version of GCC",
5129                      t);
5130         }
5131       else
5132         {
5133           tree eoc;
5134
5135           /* If the ABI version is not at least two, and the last
5136              field was a bit-field, RLI may not be on a byte
5137              boundary.  In particular, rli_size_unit_so_far might
5138              indicate the last complete byte, while rli_size_so_far
5139              indicates the total number of bits used.  Therefore,
5140              rli_size_so_far, rather than rli_size_unit_so_far, is
5141              used to compute TYPE_SIZE_UNIT.  */
5142           eoc = end_of_class (t, /*include_virtuals_p=*/0);
5143           TYPE_SIZE_UNIT (base_t)
5144             = size_binop (MAX_EXPR,
5145                           convert (sizetype,
5146                                    size_binop (CEIL_DIV_EXPR,
5147                                                rli_size_so_far (rli),
5148                                                bitsize_int (BITS_PER_UNIT))),
5149                           eoc);
5150           TYPE_SIZE (base_t)
5151             = size_binop (MAX_EXPR,
5152                           rli_size_so_far (rli),
5153                           size_binop (MULT_EXPR,
5154                                       convert (bitsizetype, eoc),
5155                                       bitsize_int (BITS_PER_UNIT)));
5156         }
5157       TYPE_ALIGN (base_t) = rli->record_align;
5158       TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
5159
5160       /* Copy the fields from T.  */
5161       next_field = &TYPE_FIELDS (base_t);
5162       for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
5163         if (TREE_CODE (field) == FIELD_DECL)
5164           {
5165             *next_field = build_decl (input_location,
5166                                       FIELD_DECL,
5167                                       DECL_NAME (field),
5168                                       TREE_TYPE (field));
5169             DECL_CONTEXT (*next_field) = base_t;
5170             DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
5171             DECL_FIELD_BIT_OFFSET (*next_field)
5172               = DECL_FIELD_BIT_OFFSET (field);
5173             DECL_SIZE (*next_field) = DECL_SIZE (field);
5174             DECL_MODE (*next_field) = DECL_MODE (field);
5175             next_field = &TREE_CHAIN (*next_field);
5176           }
5177
5178       /* Record the base version of the type.  */
5179       CLASSTYPE_AS_BASE (t) = base_t;
5180       TYPE_CONTEXT (base_t) = t;
5181     }
5182   else
5183     CLASSTYPE_AS_BASE (t) = t;
5184
5185   /* Every empty class contains an empty class.  */
5186   if (CLASSTYPE_EMPTY_P (t))
5187     CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
5188
5189   /* Set the TYPE_DECL for this type to contain the right
5190      value for DECL_OFFSET, so that we can use it as part
5191      of a COMPONENT_REF for multiple inheritance.  */
5192   layout_decl (TYPE_MAIN_DECL (t), 0);
5193
5194   /* Now fix up any virtual base class types that we left lying
5195      around.  We must get these done before we try to lay out the
5196      virtual function table.  As a side-effect, this will remove the
5197      base subobject fields.  */
5198   layout_virtual_bases (rli, empty_base_offsets);
5199
5200   /* Make sure that empty classes are reflected in RLI at this
5201      point.  */
5202   include_empty_classes(rli);
5203
5204   /* Make sure not to create any structures with zero size.  */
5205   if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
5206     place_field (rli,
5207                  build_decl (input_location,
5208                              FIELD_DECL, NULL_TREE, char_type_node));
5209
5210   /* Let the back end lay out the type.  */
5211   finish_record_layout (rli, /*free_p=*/true);
5212
5213   /* Warn about bases that can't be talked about due to ambiguity.  */
5214   warn_about_ambiguous_bases (t);
5215
5216   /* Now that we're done with layout, give the base fields the real types.  */
5217   for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
5218     if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
5219       TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
5220
5221   /* Clean up.  */
5222   splay_tree_delete (empty_base_offsets);
5223
5224   if (CLASSTYPE_EMPTY_P (t)
5225       && tree_int_cst_lt (sizeof_biggest_empty_class,
5226                           TYPE_SIZE_UNIT (t)))
5227     sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t);
5228 }
5229
5230 /* Determine the "key method" for the class type indicated by TYPE,
5231    and set CLASSTYPE_KEY_METHOD accordingly.  */
5232
5233 void
5234 determine_key_method (tree type)
5235 {
5236   tree method;
5237
5238   if (TYPE_FOR_JAVA (type)
5239       || processing_template_decl
5240       || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
5241       || CLASSTYPE_INTERFACE_KNOWN (type))
5242     return;
5243
5244   /* The key method is the first non-pure virtual function that is not
5245      inline at the point of class definition.  On some targets the
5246      key function may not be inline; those targets should not call
5247      this function until the end of the translation unit.  */
5248   for (method = TYPE_METHODS (type); method != NULL_TREE;
5249        method = TREE_CHAIN (method))
5250     if (DECL_VINDEX (method) != NULL_TREE
5251         && ! DECL_DECLARED_INLINE_P (method)
5252         && ! DECL_PURE_VIRTUAL_P (method))
5253       {
5254         CLASSTYPE_KEY_METHOD (type) = method;
5255         break;
5256       }
5257
5258   return;
5259 }
5260
5261 /* Perform processing required when the definition of T (a class type)
5262    is complete.  */
5263
5264 void
5265 finish_struct_1 (tree t)
5266 {
5267   tree x;
5268   /* A TREE_LIST.  The TREE_VALUE of each node is a FUNCTION_DECL.  */
5269   tree virtuals = NULL_TREE;
5270   int n_fields = 0;
5271
5272   if (COMPLETE_TYPE_P (t))
5273     {
5274       gcc_assert (MAYBE_CLASS_TYPE_P (t));
5275       error ("redefinition of %q#T", t);
5276       popclass ();
5277       return;
5278     }
5279
5280   /* If this type was previously laid out as a forward reference,
5281      make sure we lay it out again.  */
5282   TYPE_SIZE (t) = NULL_TREE;
5283   CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
5284
5285   /* Make assumptions about the class; we'll reset the flags if
5286      necessary.  */
5287   CLASSTYPE_EMPTY_P (t) = 1;
5288   CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
5289   CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
5290
5291   /* Do end-of-class semantic processing: checking the validity of the
5292      bases and members and add implicitly generated methods.  */
5293   check_bases_and_members (t);
5294
5295   /* Find the key method.  */
5296   if (TYPE_CONTAINS_VPTR_P (t))
5297     {
5298       /* The Itanium C++ ABI permits the key method to be chosen when
5299          the class is defined -- even though the key method so
5300          selected may later turn out to be an inline function.  On
5301          some systems (such as ARM Symbian OS) the key method cannot
5302          be determined until the end of the translation unit.  On such
5303          systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
5304          will cause the class to be added to KEYED_CLASSES.  Then, in
5305          finish_file we will determine the key method.  */
5306       if (targetm.cxx.key_method_may_be_inline ())
5307         determine_key_method (t);
5308
5309       /* If a polymorphic class has no key method, we may emit the vtable
5310          in every translation unit where the class definition appears.  */
5311       if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
5312         keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
5313     }
5314
5315   /* Layout the class itself.  */
5316   layout_class_type (t, &virtuals);
5317   if (CLASSTYPE_AS_BASE (t) != t)
5318     /* We use the base type for trivial assignments, and hence it
5319        needs a mode.  */
5320     compute_record_mode (CLASSTYPE_AS_BASE (t));
5321
5322   virtuals = modify_all_vtables (t, nreverse (virtuals));
5323
5324   /* If necessary, create the primary vtable for this class.  */
5325   if (virtuals || TYPE_CONTAINS_VPTR_P (t))
5326     {
5327       /* We must enter these virtuals into the table.  */
5328       if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5329         build_primary_vtable (NULL_TREE, t);
5330       else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
5331         /* Here we know enough to change the type of our virtual
5332            function table, but we will wait until later this function.  */
5333         build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
5334     }
5335
5336   if (TYPE_CONTAINS_VPTR_P (t))
5337     {
5338       int vindex;
5339       tree fn;
5340
5341       if (BINFO_VTABLE (TYPE_BINFO (t)))
5342         gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
5343       if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5344         gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
5345
5346       /* Add entries for virtual functions introduced by this class.  */
5347       BINFO_VIRTUALS (TYPE_BINFO (t))
5348         = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
5349
5350       /* Set DECL_VINDEX for all functions declared in this class.  */
5351       for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
5352            fn;
5353            fn = TREE_CHAIN (fn),
5354              vindex += (TARGET_VTABLE_USES_DESCRIPTORS
5355                         ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
5356         {
5357           tree fndecl = BV_FN (fn);
5358
5359           if (DECL_THUNK_P (fndecl))
5360             /* A thunk. We should never be calling this entry directly
5361                from this vtable -- we'd use the entry for the non
5362                thunk base function.  */
5363             DECL_VINDEX (fndecl) = NULL_TREE;
5364           else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
5365             DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
5366         }
5367     }
5368
5369   finish_struct_bits (t);
5370
5371   /* Complete the rtl for any static member objects of the type we're
5372      working on.  */
5373   for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
5374     if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
5375         && TREE_TYPE (x) != error_mark_node
5376         && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
5377       DECL_MODE (x) = TYPE_MODE (t);
5378
5379   /* Done with FIELDS...now decide whether to sort these for
5380      faster lookups later.
5381
5382      We use a small number because most searches fail (succeeding
5383      ultimately as the search bores through the inheritance
5384      hierarchy), and we want this failure to occur quickly.  */
5385
5386   n_fields = count_fields (TYPE_FIELDS (t));
5387   if (n_fields > 7)
5388     {
5389       struct sorted_fields_type *field_vec = GGC_NEWVAR
5390          (struct sorted_fields_type,
5391           sizeof (struct sorted_fields_type) + n_fields * sizeof (tree));
5392       field_vec->len = n_fields;
5393       add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
5394       qsort (field_vec->elts, n_fields, sizeof (tree),
5395              field_decl_cmp);
5396       CLASSTYPE_SORTED_FIELDS (t) = field_vec;
5397     }
5398
5399   /* Complain if one of the field types requires lower visibility.  */
5400   constrain_class_visibility (t);
5401
5402   /* Make the rtl for any new vtables we have created, and unmark
5403      the base types we marked.  */
5404   finish_vtbls (t);
5405
5406   /* Build the VTT for T.  */
5407   build_vtt (t);
5408
5409   /* This warning does not make sense for Java classes, since they
5410      cannot have destructors.  */
5411   if (!TYPE_FOR_JAVA (t) && warn_nonvdtor && TYPE_POLYMORPHIC_P (t))
5412     {
5413       tree dtor;
5414
5415       dtor = CLASSTYPE_DESTRUCTORS (t);
5416       if (/* An implicitly declared destructor is always public.  And,
5417              if it were virtual, we would have created it by now.  */
5418           !dtor
5419           || (!DECL_VINDEX (dtor)
5420               && (/* public non-virtual */
5421                   (!TREE_PRIVATE (dtor) && !TREE_PROTECTED (dtor))
5422                    || (/* non-public non-virtual with friends */
5423                        (TREE_PRIVATE (dtor) || TREE_PROTECTED (dtor))
5424                         && (CLASSTYPE_FRIEND_CLASSES (t)
5425                         || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))))))
5426         warning (OPT_Wnon_virtual_dtor,
5427                  "%q#T has virtual functions and accessible"
5428                  " non-virtual destructor", t);
5429     }
5430
5431   complete_vars (t);
5432
5433   if (warn_overloaded_virtual)
5434     warn_hidden (t);
5435
5436   /* Class layout, assignment of virtual table slots, etc., is now
5437      complete.  Give the back end a chance to tweak the visibility of
5438      the class or perform any other required target modifications.  */
5439   targetm.cxx.adjust_class_at_definition (t);
5440
5441   maybe_suppress_debug_info (t);
5442
5443   dump_class_hierarchy (t);
5444
5445   /* Finish debugging output for this type.  */
5446   rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
5447 }
5448
5449 /* When T was built up, the member declarations were added in reverse
5450    order.  Rearrange them to declaration order.  */
5451
5452 void
5453 unreverse_member_declarations (tree t)
5454 {
5455   tree next;
5456   tree prev;
5457   tree x;
5458
5459   /* The following lists are all in reverse order.  Put them in
5460      declaration order now.  */
5461   TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
5462   CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
5463
5464   /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5465      reverse order, so we can't just use nreverse.  */
5466   prev = NULL_TREE;
5467   for (x = TYPE_FIELDS (t);
5468        x && TREE_CODE (x) != TYPE_DECL;
5469        x = next)
5470     {
5471       next = TREE_CHAIN (x);
5472       TREE_CHAIN (x) = prev;
5473       prev = x;
5474     }
5475   if (prev)
5476     {
5477       TREE_CHAIN (TYPE_FIELDS (t)) = x;
5478       if (prev)
5479         TYPE_FIELDS (t) = prev;
5480     }
5481 }
5482
5483 tree
5484 finish_struct (tree t, tree attributes)
5485 {
5486   location_t saved_loc = input_location;
5487
5488   /* Now that we've got all the field declarations, reverse everything
5489      as necessary.  */
5490   unreverse_member_declarations (t);
5491
5492   cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5493
5494   /* Nadger the current location so that diagnostics point to the start of
5495      the struct, not the end.  */
5496   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
5497
5498   if (processing_template_decl)
5499     {
5500       tree x;
5501
5502       finish_struct_methods (t);
5503       TYPE_SIZE (t) = bitsize_zero_node;
5504       TYPE_SIZE_UNIT (t) = size_zero_node;
5505
5506       /* We need to emit an error message if this type was used as a parameter
5507          and it is an abstract type, even if it is a template. We construct
5508          a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
5509          account and we call complete_vars with this type, which will check
5510          the PARM_DECLS. Note that while the type is being defined,
5511          CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
5512          (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it.  */
5513       CLASSTYPE_PURE_VIRTUALS (t) = NULL;
5514       for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
5515         if (DECL_PURE_VIRTUAL_P (x))
5516           VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
5517       complete_vars (t);
5518     }
5519   else
5520     finish_struct_1 (t);
5521
5522   input_location = saved_loc;
5523
5524   TYPE_BEING_DEFINED (t) = 0;
5525
5526   if (current_class_type)
5527     popclass ();
5528   else
5529     error ("trying to finish struct, but kicked out due to previous parse errors");
5530
5531   if (processing_template_decl && at_function_scope_p ())
5532     add_stmt (build_min (TAG_DEFN, t));
5533
5534   return t;
5535 }
5536 \f
5537 /* Return the dynamic type of INSTANCE, if known.
5538    Used to determine whether the virtual function table is needed
5539    or not.
5540
5541    *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5542    of our knowledge of its type.  *NONNULL should be initialized
5543    before this function is called.  */
5544
5545 static tree
5546 fixed_type_or_null (tree instance, int *nonnull, int *cdtorp)
5547 {
5548 #define RECUR(T) fixed_type_or_null((T), nonnull, cdtorp)
5549
5550   switch (TREE_CODE (instance))
5551     {
5552     case INDIRECT_REF:
5553       if (POINTER_TYPE_P (TREE_TYPE (instance)))
5554         return NULL_TREE;
5555       else
5556         return RECUR (TREE_OPERAND (instance, 0));
5557
5558     case CALL_EXPR:
5559       /* This is a call to a constructor, hence it's never zero.  */
5560       if (TREE_HAS_CONSTRUCTOR (instance))
5561         {
5562           if (nonnull)
5563             *nonnull = 1;
5564           return TREE_TYPE (instance);
5565         }
5566       return NULL_TREE;
5567
5568     case SAVE_EXPR:
5569       /* This is a call to a constructor, hence it's never zero.  */
5570       if (TREE_HAS_CONSTRUCTOR (instance))
5571         {
5572           if (nonnull)
5573             *nonnull = 1;
5574           return TREE_TYPE (instance);
5575         }
5576       return RECUR (TREE_OPERAND (instance, 0));
5577
5578     case POINTER_PLUS_EXPR:
5579     case PLUS_EXPR:
5580     case MINUS_EXPR:
5581       if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5582         return RECUR (TREE_OPERAND (instance, 0));
5583       if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5584         /* Propagate nonnull.  */
5585         return RECUR (TREE_OPERAND (instance, 0));
5586
5587       return NULL_TREE;
5588
5589     CASE_CONVERT:
5590       return RECUR (TREE_OPERAND (instance, 0));
5591
5592     case ADDR_EXPR:
5593       instance = TREE_OPERAND (instance, 0);
5594       if (nonnull)
5595         {
5596           /* Just because we see an ADDR_EXPR doesn't mean we're dealing
5597              with a real object -- given &p->f, p can still be null.  */
5598           tree t = get_base_address (instance);
5599           /* ??? Probably should check DECL_WEAK here.  */
5600           if (t && DECL_P (t))
5601             *nonnull = 1;
5602         }
5603       return RECUR (instance);
5604
5605     case COMPONENT_REF:
5606       /* If this component is really a base class reference, then the field
5607          itself isn't definitive.  */
5608       if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
5609         return RECUR (TREE_OPERAND (instance, 0));
5610       return RECUR (TREE_OPERAND (instance, 1));
5611
5612     case VAR_DECL:
5613     case FIELD_DECL:
5614       if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5615           && MAYBE_CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (instance))))
5616         {
5617           if (nonnull)
5618             *nonnull = 1;
5619           return TREE_TYPE (TREE_TYPE (instance));
5620         }
5621       /* fall through...  */
5622     case TARGET_EXPR:
5623     case PARM_DECL:
5624     case RESULT_DECL:
5625       if (MAYBE_CLASS_TYPE_P (TREE_TYPE (instance)))
5626         {
5627           if (nonnull)
5628             *nonnull = 1;
5629           return TREE_TYPE (instance);
5630         }
5631       else if (instance == current_class_ptr)
5632         {
5633           if (nonnull)
5634             *nonnull = 1;
5635
5636           /* if we're in a ctor or dtor, we know our type.  */
5637           if (DECL_LANG_SPECIFIC (current_function_decl)
5638               && (DECL_CONSTRUCTOR_P (current_function_decl)
5639                   || DECL_DESTRUCTOR_P (current_function_decl)))
5640             {
5641               if (cdtorp)
5642                 *cdtorp = 1;
5643               return TREE_TYPE (TREE_TYPE (instance));
5644             }
5645         }
5646       else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5647         {
5648           /* We only need one hash table because it is always left empty.  */
5649           static htab_t ht;
5650           if (!ht)
5651             ht = htab_create (37, 
5652                               htab_hash_pointer,
5653                               htab_eq_pointer,
5654                               /*htab_del=*/NULL);
5655
5656           /* Reference variables should be references to objects.  */
5657           if (nonnull)
5658             *nonnull = 1;
5659
5660           /* Enter the INSTANCE in a table to prevent recursion; a
5661              variable's initializer may refer to the variable
5662              itself.  */
5663           if (TREE_CODE (instance) == VAR_DECL
5664               && DECL_INITIAL (instance)
5665               && !htab_find (ht, instance))
5666             {
5667               tree type;
5668               void **slot;
5669
5670               slot = htab_find_slot (ht, instance, INSERT);
5671               *slot = instance;
5672               type = RECUR (DECL_INITIAL (instance));
5673               htab_remove_elt (ht, instance);
5674
5675               return type;
5676             }
5677         }
5678       return NULL_TREE;
5679
5680     default:
5681       return NULL_TREE;
5682     }
5683 #undef RECUR
5684 }
5685
5686 /* Return nonzero if the dynamic type of INSTANCE is known, and
5687    equivalent to the static type.  We also handle the case where
5688    INSTANCE is really a pointer. Return negative if this is a
5689    ctor/dtor. There the dynamic type is known, but this might not be
5690    the most derived base of the original object, and hence virtual
5691    bases may not be layed out according to this type.
5692
5693    Used to determine whether the virtual function table is needed
5694    or not.
5695
5696    *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5697    of our knowledge of its type.  *NONNULL should be initialized
5698    before this function is called.  */
5699
5700 int
5701 resolves_to_fixed_type_p (tree instance, int* nonnull)
5702 {
5703   tree t = TREE_TYPE (instance);
5704   int cdtorp = 0;
5705   tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
5706   if (fixed == NULL_TREE)
5707     return 0;
5708   if (POINTER_TYPE_P (t))
5709     t = TREE_TYPE (t);
5710   if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
5711     return 0;
5712   return cdtorp ? -1 : 1;
5713 }
5714
5715 \f
5716 void
5717 init_class_processing (void)
5718 {
5719   current_class_depth = 0;
5720   current_class_stack_size = 10;
5721   current_class_stack
5722     = XNEWVEC (struct class_stack_node, current_class_stack_size);
5723   local_classes = VEC_alloc (tree, gc, 8);
5724   sizeof_biggest_empty_class = size_zero_node;
5725
5726   ridpointers[(int) RID_PUBLIC] = access_public_node;
5727   ridpointers[(int) RID_PRIVATE] = access_private_node;
5728   ridpointers[(int) RID_PROTECTED] = access_protected_node;
5729 }
5730
5731 /* Restore the cached PREVIOUS_CLASS_LEVEL.  */
5732
5733 static void
5734 restore_class_cache (void)
5735 {
5736   tree type;
5737
5738   /* We are re-entering the same class we just left, so we don't
5739      have to search the whole inheritance matrix to find all the
5740      decls to bind again.  Instead, we install the cached
5741      class_shadowed list and walk through it binding names.  */
5742   push_binding_level (previous_class_level);
5743   class_binding_level = previous_class_level;
5744   /* Restore IDENTIFIER_TYPE_VALUE.  */
5745   for (type = class_binding_level->type_shadowed;
5746        type;
5747        type = TREE_CHAIN (type))
5748     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
5749 }
5750
5751 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
5752    appropriate for TYPE.
5753
5754    So that we may avoid calls to lookup_name, we cache the _TYPE
5755    nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5756
5757    For multiple inheritance, we perform a two-pass depth-first search
5758    of the type lattice.  */
5759
5760 void
5761 pushclass (tree type)
5762 {
5763   class_stack_node_t csn;
5764
5765   type = TYPE_MAIN_VARIANT (type);
5766
5767   /* Make sure there is enough room for the new entry on the stack.  */
5768   if (current_class_depth + 1 >= current_class_stack_size)
5769     {
5770       current_class_stack_size *= 2;
5771       current_class_stack
5772         = XRESIZEVEC (struct class_stack_node, current_class_stack,
5773                       current_class_stack_size);
5774     }
5775
5776   /* Insert a new entry on the class stack.  */
5777   csn = current_class_stack + current_class_depth;
5778   csn->name = current_class_name;
5779   csn->type = current_class_type;
5780   csn->access = current_access_specifier;
5781   csn->names_used = 0;
5782   csn->hidden = 0;
5783   current_class_depth++;
5784
5785   /* Now set up the new type.  */
5786   current_class_name = TYPE_NAME (type);
5787   if (TREE_CODE (current_class_name) == TYPE_DECL)
5788     current_class_name = DECL_NAME (current_class_name);
5789   current_class_type = type;
5790
5791   /* By default, things in classes are private, while things in
5792      structures or unions are public.  */
5793   current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
5794                               ? access_private_node
5795                               : access_public_node);
5796
5797   if (previous_class_level
5798       && type != previous_class_level->this_entity
5799       && current_class_depth == 1)
5800     {
5801       /* Forcibly remove any old class remnants.  */
5802       invalidate_class_lookup_cache ();
5803     }
5804
5805   if (!previous_class_level
5806       || type != previous_class_level->this_entity
5807       || current_class_depth > 1)
5808     pushlevel_class ();
5809   else
5810     restore_class_cache ();
5811 }
5812
5813 /* When we exit a toplevel class scope, we save its binding level so
5814    that we can restore it quickly.  Here, we've entered some other
5815    class, so we must invalidate our cache.  */
5816
5817 void
5818 invalidate_class_lookup_cache (void)
5819 {
5820   previous_class_level = NULL;
5821 }
5822
5823 /* Get out of the current class scope. If we were in a class scope
5824    previously, that is the one popped to.  */
5825
5826 void
5827 popclass (void)
5828 {
5829   poplevel_class ();
5830
5831   current_class_depth--;
5832   current_class_name = current_class_stack[current_class_depth].name;
5833   current_class_type = current_class_stack[current_class_depth].type;
5834   current_access_specifier = current_class_stack[current_class_depth].access;
5835   if (current_class_stack[current_class_depth].names_used)
5836     splay_tree_delete (current_class_stack[current_class_depth].names_used);
5837 }
5838
5839 /* Mark the top of the class stack as hidden.  */
5840
5841 void
5842 push_class_stack (void)
5843 {
5844   if (current_class_depth)
5845     ++current_class_stack[current_class_depth - 1].hidden;
5846 }
5847
5848 /* Mark the top of the class stack as un-hidden.  */
5849
5850 void
5851 pop_class_stack (void)
5852 {
5853   if (current_class_depth)
5854     --current_class_stack[current_class_depth - 1].hidden;
5855 }
5856
5857 /* Returns 1 if the class type currently being defined is either T or
5858    a nested type of T.  */
5859
5860 bool
5861 currently_open_class (tree t)
5862 {
5863   int i;
5864
5865   if (!CLASS_TYPE_P (t))
5866     return false;
5867
5868   t = TYPE_MAIN_VARIANT (t);
5869
5870   /* We start looking from 1 because entry 0 is from global scope,
5871      and has no type.  */
5872   for (i = current_class_depth; i > 0; --i)
5873     {
5874       tree c;
5875       if (i == current_class_depth)
5876         c = current_class_type;
5877       else
5878         {
5879           if (current_class_stack[i].hidden)
5880             break;
5881           c = current_class_stack[i].type;
5882         }
5883       if (!c)
5884         continue;
5885       if (same_type_p (c, t))
5886         return true;
5887     }
5888   return false;
5889 }
5890
5891 /* If either current_class_type or one of its enclosing classes are derived
5892    from T, return the appropriate type.  Used to determine how we found
5893    something via unqualified lookup.  */
5894
5895 tree
5896 currently_open_derived_class (tree t)
5897 {
5898   int i;
5899
5900   /* The bases of a dependent type are unknown.  */
5901   if (dependent_type_p (t))
5902     return NULL_TREE;
5903
5904   if (!current_class_type)
5905     return NULL_TREE;
5906
5907   if (DERIVED_FROM_P (t, current_class_type))
5908     return current_class_type;
5909
5910   for (i = current_class_depth - 1; i > 0; --i)
5911     {
5912       if (current_class_stack[i].hidden)
5913         break;
5914       if (DERIVED_FROM_P (t, current_class_stack[i].type))
5915         return current_class_stack[i].type;
5916     }
5917
5918   return NULL_TREE;
5919 }
5920
5921 /* When entering a class scope, all enclosing class scopes' names with
5922    static meaning (static variables, static functions, types and
5923    enumerators) have to be visible.  This recursive function calls
5924    pushclass for all enclosing class contexts until global or a local
5925    scope is reached.  TYPE is the enclosed class.  */
5926
5927 void
5928 push_nested_class (tree type)
5929 {
5930   /* A namespace might be passed in error cases, like A::B:C.  */
5931   if (type == NULL_TREE
5932       || !CLASS_TYPE_P (type))
5933     return;
5934
5935   push_nested_class (DECL_CONTEXT (TYPE_MAIN_DECL (type)));
5936
5937   pushclass (type);
5938 }
5939
5940 /* Undoes a push_nested_class call.  */
5941
5942 void
5943 pop_nested_class (void)
5944 {
5945   tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
5946
5947   popclass ();
5948   if (context && CLASS_TYPE_P (context))
5949     pop_nested_class ();
5950 }
5951
5952 /* Returns the number of extern "LANG" blocks we are nested within.  */
5953
5954 int
5955 current_lang_depth (void)
5956 {
5957   return VEC_length (tree, current_lang_base);
5958 }
5959
5960 /* Set global variables CURRENT_LANG_NAME to appropriate value
5961    so that behavior of name-mangling machinery is correct.  */
5962
5963 void
5964 push_lang_context (tree name)
5965 {
5966   VEC_safe_push (tree, gc, current_lang_base, current_lang_name);
5967
5968   if (name == lang_name_cplusplus)
5969     {
5970       current_lang_name = name;
5971     }
5972   else if (name == lang_name_java)
5973     {
5974       current_lang_name = name;
5975       /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5976          (See record_builtin_java_type in decl.c.)  However, that causes
5977          incorrect debug entries if these types are actually used.
5978          So we re-enable debug output after extern "Java".  */
5979       DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
5980       DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
5981       DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
5982       DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
5983       DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
5984       DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
5985       DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
5986       DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
5987     }
5988   else if (name == lang_name_c)
5989     {
5990       current_lang_name = name;
5991     }
5992   else
5993     error ("language string %<\"%E\"%> not recognized", name);
5994 }
5995
5996 /* Get out of the current language scope.  */
5997
5998 void
5999 pop_lang_context (void)
6000 {
6001   current_lang_name = VEC_pop (tree, current_lang_base);
6002 }
6003 \f
6004 /* Type instantiation routines.  */
6005
6006 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
6007    matches the TARGET_TYPE.  If there is no satisfactory match, return
6008    error_mark_node, and issue an error & warning messages under
6009    control of FLAGS.  Permit pointers to member function if FLAGS
6010    permits.  If TEMPLATE_ONLY, the name of the overloaded function was
6011    a template-id, and EXPLICIT_TARGS are the explicitly provided
6012    template arguments.  
6013
6014    If OVERLOAD is for one or more member functions, then ACCESS_PATH
6015    is the base path used to reference those member functions.  If
6016    TF_NO_ACCESS_CONTROL is not set in FLAGS, and the address is
6017    resolved to a member function, access checks will be performed and
6018    errors issued if appropriate.  */
6019
6020 static tree
6021 resolve_address_of_overloaded_function (tree target_type,
6022                                         tree overload,
6023                                         tsubst_flags_t flags,
6024                                         bool template_only,
6025                                         tree explicit_targs,
6026                                         tree access_path)
6027 {
6028   /* Here's what the standard says:
6029
6030        [over.over]
6031
6032        If the name is a function template, template argument deduction
6033        is done, and if the argument deduction succeeds, the deduced
6034        arguments are used to generate a single template function, which
6035        is added to the set of overloaded functions considered.
6036
6037        Non-member functions and static member functions match targets of
6038        type "pointer-to-function" or "reference-to-function."  Nonstatic
6039        member functions match targets of type "pointer-to-member
6040        function;" the function type of the pointer to member is used to
6041        select the member function from the set of overloaded member
6042        functions.  If a nonstatic member function is selected, the
6043        reference to the overloaded function name is required to have the
6044        form of a pointer to member as described in 5.3.1.
6045
6046        If more than one function is selected, any template functions in
6047        the set are eliminated if the set also contains a non-template
6048        function, and any given template function is eliminated if the
6049        set contains a second template function that is more specialized
6050        than the first according to the partial ordering rules 14.5.5.2.
6051        After such eliminations, if any, there shall remain exactly one
6052        selected function.  */
6053
6054   int is_ptrmem = 0;
6055   int is_reference = 0;
6056   /* We store the matches in a TREE_LIST rooted here.  The functions
6057      are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
6058      interoperability with most_specialized_instantiation.  */
6059   tree matches = NULL_TREE;
6060   tree fn;
6061
6062   /* By the time we get here, we should be seeing only real
6063      pointer-to-member types, not the internal POINTER_TYPE to
6064      METHOD_TYPE representation.  */
6065   gcc_assert (TREE_CODE (target_type) != POINTER_TYPE
6066               || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
6067
6068   gcc_assert (is_overloaded_fn (overload));
6069
6070   /* Check that the TARGET_TYPE is reasonable.  */
6071   if (TYPE_PTRFN_P (target_type))
6072     /* This is OK.  */;
6073   else if (TYPE_PTRMEMFUNC_P (target_type))
6074     /* This is OK, too.  */
6075     is_ptrmem = 1;
6076   else if (TREE_CODE (target_type) == FUNCTION_TYPE)
6077     {
6078       /* This is OK, too.  This comes from a conversion to reference
6079          type.  */
6080       target_type = build_reference_type (target_type);
6081       is_reference = 1;
6082     }
6083   else
6084     {
6085       if (flags & tf_error)
6086         error ("cannot resolve overloaded function %qD based on"
6087                " conversion to type %qT",
6088                DECL_NAME (OVL_FUNCTION (overload)), target_type);
6089       return error_mark_node;
6090     }
6091
6092   /* If we can find a non-template function that matches, we can just
6093      use it.  There's no point in generating template instantiations
6094      if we're just going to throw them out anyhow.  But, of course, we
6095      can only do this when we don't *need* a template function.  */
6096   if (!template_only)
6097     {
6098       tree fns;
6099
6100       for (fns = overload; fns; fns = OVL_NEXT (fns))
6101         {
6102           tree fn = OVL_CURRENT (fns);
6103           tree fntype;
6104
6105           if (TREE_CODE (fn) == TEMPLATE_DECL)
6106             /* We're not looking for templates just yet.  */
6107             continue;
6108
6109           if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6110               != is_ptrmem)
6111             /* We're looking for a non-static member, and this isn't
6112                one, or vice versa.  */
6113             continue;
6114
6115           /* Ignore functions which haven't been explicitly
6116              declared.  */
6117           if (DECL_ANTICIPATED (fn))
6118             continue;
6119
6120           /* See if there's a match.  */
6121           fntype = TREE_TYPE (fn);
6122           if (is_ptrmem)
6123             fntype = build_ptrmemfunc_type (build_pointer_type (fntype));
6124           else if (!is_reference)
6125             fntype = build_pointer_type (fntype);
6126
6127           if (can_convert_arg (target_type, fntype, fn, LOOKUP_NORMAL))
6128             matches = tree_cons (fn, NULL_TREE, matches);
6129         }
6130     }
6131
6132   /* Now, if we've already got a match (or matches), there's no need
6133      to proceed to the template functions.  But, if we don't have a
6134      match we need to look at them, too.  */
6135   if (!matches)
6136     {
6137       tree target_fn_type;
6138       tree target_arg_types;
6139       tree target_ret_type;
6140       tree fns;
6141       tree *args;
6142       unsigned int nargs, ia;
6143       tree arg;
6144
6145       if (is_ptrmem)
6146         target_fn_type
6147           = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (target_type));
6148       else
6149         target_fn_type = TREE_TYPE (target_type);
6150       target_arg_types = TYPE_ARG_TYPES (target_fn_type);
6151       target_ret_type = TREE_TYPE (target_fn_type);
6152
6153       /* Never do unification on the 'this' parameter.  */
6154       if (TREE_CODE (target_fn_type) == METHOD_TYPE)
6155         target_arg_types = TREE_CHAIN (target_arg_types);
6156
6157       nargs = list_length (target_arg_types);
6158       args = XALLOCAVEC (tree, nargs);
6159       for (arg = target_arg_types, ia = 0;
6160            arg != NULL_TREE && arg != void_list_node;
6161            arg = TREE_CHAIN (arg), ++ia)
6162         args[ia] = TREE_VALUE (arg);
6163       nargs = ia;
6164
6165       for (fns = overload; fns; fns = OVL_NEXT (fns))
6166         {
6167           tree fn = OVL_CURRENT (fns);
6168           tree instantiation;
6169           tree instantiation_type;
6170           tree targs;
6171
6172           if (TREE_CODE (fn) != TEMPLATE_DECL)
6173             /* We're only looking for templates.  */
6174             continue;
6175
6176           if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6177               != is_ptrmem)
6178             /* We're not looking for a non-static member, and this is
6179                one, or vice versa.  */
6180             continue;
6181
6182           /* Try to do argument deduction.  */
6183           targs = make_tree_vec (DECL_NTPARMS (fn));
6184           if (fn_type_unification (fn, explicit_targs, targs, args, nargs,
6185                                    target_ret_type, DEDUCE_EXACT,
6186                                    LOOKUP_NORMAL))
6187             /* Argument deduction failed.  */
6188             continue;
6189
6190           /* Instantiate the template.  */
6191           instantiation = instantiate_template (fn, targs, flags);
6192           if (instantiation == error_mark_node)
6193             /* Instantiation failed.  */
6194             continue;
6195
6196           /* See if there's a match.  */
6197           instantiation_type = TREE_TYPE (instantiation);
6198           if (is_ptrmem)
6199             instantiation_type =
6200               build_ptrmemfunc_type (build_pointer_type (instantiation_type));
6201           else if (!is_reference)
6202             instantiation_type = build_pointer_type (instantiation_type);
6203           if (can_convert_arg (target_type, instantiation_type, instantiation,
6204                                LOOKUP_NORMAL))
6205             matches = tree_cons (instantiation, fn, matches);
6206         }
6207
6208       /* Now, remove all but the most specialized of the matches.  */
6209       if (matches)
6210         {
6211           tree match = most_specialized_instantiation (matches);
6212
6213           if (match != error_mark_node)
6214             matches = tree_cons (TREE_PURPOSE (match),
6215                                  NULL_TREE,
6216                                  NULL_TREE);
6217         }
6218     }
6219
6220   /* Now we should have exactly one function in MATCHES.  */
6221   if (matches == NULL_TREE)
6222     {
6223       /* There were *no* matches.  */
6224       if (flags & tf_error)
6225         {
6226           error ("no matches converting function %qD to type %q#T",
6227                  DECL_NAME (OVL_CURRENT (overload)),
6228                  target_type);
6229
6230           /* print_candidates expects a chain with the functions in
6231              TREE_VALUE slots, so we cons one up here (we're losing anyway,
6232              so why be clever?).  */
6233           for (; overload; overload = OVL_NEXT (overload))
6234             matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
6235                                  matches);
6236
6237           print_candidates (matches);
6238         }
6239       return error_mark_node;
6240     }
6241   else if (TREE_CHAIN (matches))
6242     {
6243       /* There were too many matches.  First check if they're all
6244          the same function.  */
6245       tree match;
6246
6247       fn = TREE_PURPOSE (matches);
6248       for (match = TREE_CHAIN (matches); match; match = TREE_CHAIN (match))
6249         if (!decls_match (fn, TREE_PURPOSE (match)))
6250           break;
6251
6252       if (match)
6253         {
6254           if (flags & tf_error)
6255             {
6256               error ("converting overloaded function %qD to type %q#T is ambiguous",
6257                      DECL_NAME (OVL_FUNCTION (overload)),
6258                      target_type);
6259
6260               /* Since print_candidates expects the functions in the
6261                  TREE_VALUE slot, we flip them here.  */
6262               for (match = matches; match; match = TREE_CHAIN (match))
6263                 TREE_VALUE (match) = TREE_PURPOSE (match);
6264
6265               print_candidates (matches);
6266             }
6267
6268           return error_mark_node;
6269         }
6270     }
6271
6272   /* Good, exactly one match.  Now, convert it to the correct type.  */
6273   fn = TREE_PURPOSE (matches);
6274
6275   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
6276       && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
6277     {
6278       static int explained;
6279
6280       if (!(flags & tf_error))
6281         return error_mark_node;
6282
6283       permerror (input_location, "assuming pointer to member %qD", fn);
6284       if (!explained)
6285         {
6286           inform (input_location, "(a pointer to member can only be formed with %<&%E%>)", fn);
6287           explained = 1;
6288         }
6289     }
6290
6291   /* If we're doing overload resolution purely for the purpose of
6292      determining conversion sequences, we should not consider the
6293      function used.  If this conversion sequence is selected, the
6294      function will be marked as used at this point.  */
6295   if (!(flags & tf_conv))
6296     {
6297       /* Make =delete work with SFINAE.  */
6298       if (DECL_DELETED_FN (fn) && !(flags & tf_error))
6299         return error_mark_node;
6300       
6301       mark_used (fn);
6302     }
6303
6304   /* We could not check access to member functions when this
6305      expression was originally created since we did not know at that
6306      time to which function the expression referred.  */
6307   if (!(flags & tf_no_access_control) 
6308       && DECL_FUNCTION_MEMBER_P (fn))
6309     {
6310       gcc_assert (access_path);
6311       perform_or_defer_access_check (access_path, fn, fn);
6312     }
6313
6314   if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
6315     return cp_build_unary_op (ADDR_EXPR, fn, 0, flags);
6316   else
6317     {
6318       /* The target must be a REFERENCE_TYPE.  Above, cp_build_unary_op
6319          will mark the function as addressed, but here we must do it
6320          explicitly.  */
6321       cxx_mark_addressable (fn);
6322
6323       return fn;
6324     }
6325 }
6326
6327 /* This function will instantiate the type of the expression given in
6328    RHS to match the type of LHSTYPE.  If errors exist, then return
6329    error_mark_node. FLAGS is a bit mask.  If TF_ERROR is set, then
6330    we complain on errors.  If we are not complaining, never modify rhs,
6331    as overload resolution wants to try many possible instantiations, in
6332    the hope that at least one will work.
6333
6334    For non-recursive calls, LHSTYPE should be a function, pointer to
6335    function, or a pointer to member function.  */
6336
6337 tree
6338 instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
6339 {
6340   tsubst_flags_t flags_in = flags;
6341   tree access_path = NULL_TREE;
6342
6343   flags &= ~tf_ptrmem_ok;
6344
6345   if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
6346     {
6347       if (flags & tf_error)
6348         error ("not enough type information");
6349       return error_mark_node;
6350     }
6351
6352   if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
6353     {
6354       if (same_type_p (lhstype, TREE_TYPE (rhs)))
6355         return rhs;
6356       if (flag_ms_extensions
6357           && TYPE_PTRMEMFUNC_P (lhstype)
6358           && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
6359         /* Microsoft allows `A::f' to be resolved to a
6360            pointer-to-member.  */
6361         ;
6362       else
6363         {
6364           if (flags & tf_error)
6365             error ("argument of type %qT does not match %qT",
6366                    TREE_TYPE (rhs), lhstype);
6367           return error_mark_node;
6368         }
6369     }
6370
6371   if (TREE_CODE (rhs) == BASELINK)
6372     {
6373       access_path = BASELINK_ACCESS_BINFO (rhs);
6374       rhs = BASELINK_FUNCTIONS (rhs);
6375     }
6376
6377   /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
6378      deduce any type information.  */
6379   if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
6380     {
6381       if (flags & tf_error)
6382         error ("not enough type information");
6383       return error_mark_node;
6384     }
6385
6386   /* There only a few kinds of expressions that may have a type
6387      dependent on overload resolution.  */
6388   gcc_assert (TREE_CODE (rhs) == ADDR_EXPR
6389               || TREE_CODE (rhs) == COMPONENT_REF
6390               || really_overloaded_fn (rhs)
6391               || (flag_ms_extensions && TREE_CODE (rhs) == FUNCTION_DECL));
6392
6393   /* This should really only be used when attempting to distinguish
6394      what sort of a pointer to function we have.  For now, any
6395      arithmetic operation which is not supported on pointers
6396      is rejected as an error.  */
6397
6398   switch (TREE_CODE (rhs))
6399     {
6400     case COMPONENT_REF:
6401       {
6402         tree member = TREE_OPERAND (rhs, 1);
6403
6404         member = instantiate_type (lhstype, member, flags);
6405         if (member != error_mark_node
6406             && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
6407           /* Do not lose object's side effects.  */
6408           return build2 (COMPOUND_EXPR, TREE_TYPE (member),
6409                          TREE_OPERAND (rhs, 0), member);
6410         return member;
6411       }
6412
6413     case OFFSET_REF:
6414       rhs = TREE_OPERAND (rhs, 1);
6415       if (BASELINK_P (rhs))
6416         return instantiate_type (lhstype, rhs, flags_in);
6417
6418       /* This can happen if we are forming a pointer-to-member for a
6419          member template.  */
6420       gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
6421
6422       /* Fall through.  */
6423
6424     case TEMPLATE_ID_EXPR:
6425       {
6426         tree fns = TREE_OPERAND (rhs, 0);
6427         tree args = TREE_OPERAND (rhs, 1);
6428
6429         return
6430           resolve_address_of_overloaded_function (lhstype, fns, flags_in,
6431                                                   /*template_only=*/true,
6432                                                   args, access_path);
6433       }
6434
6435     case OVERLOAD:
6436     case FUNCTION_DECL:
6437       return
6438         resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
6439                                                 /*template_only=*/false,
6440                                                 /*explicit_targs=*/NULL_TREE,
6441                                                 access_path);
6442
6443     case ADDR_EXPR:
6444     {
6445       if (PTRMEM_OK_P (rhs))
6446         flags |= tf_ptrmem_ok;
6447
6448       return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6449     }
6450
6451     case ERROR_MARK:
6452       return error_mark_node;
6453
6454     default:
6455       gcc_unreachable ();
6456     }
6457   return error_mark_node;
6458 }
6459 \f
6460 /* Return the name of the virtual function pointer field
6461    (as an IDENTIFIER_NODE) for the given TYPE.  Note that
6462    this may have to look back through base types to find the
6463    ultimate field name.  (For single inheritance, these could
6464    all be the same name.  Who knows for multiple inheritance).  */
6465
6466 static tree
6467 get_vfield_name (tree type)
6468 {
6469   tree binfo, base_binfo;
6470   char *buf;
6471
6472   for (binfo = TYPE_BINFO (type);
6473        BINFO_N_BASE_BINFOS (binfo);
6474        binfo = base_binfo)
6475     {
6476       base_binfo = BINFO_BASE_BINFO (binfo, 0);
6477
6478       if (BINFO_VIRTUAL_P (base_binfo)
6479           || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
6480         break;
6481     }
6482
6483   type = BINFO_TYPE (binfo);
6484   buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
6485                          + TYPE_NAME_LENGTH (type) + 2);
6486   sprintf (buf, VFIELD_NAME_FORMAT,
6487            IDENTIFIER_POINTER (constructor_name (type)));
6488   return get_identifier (buf);
6489 }
6490
6491 void
6492 print_class_statistics (void)
6493 {
6494 #ifdef GATHER_STATISTICS
6495   fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6496   fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
6497   if (n_vtables)
6498     {
6499       fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6500                n_vtables, n_vtable_searches);
6501       fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6502                n_vtable_entries, n_vtable_elems);
6503     }
6504 #endif
6505 }
6506
6507 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6508    according to [class]:
6509                                           The class-name is also inserted
6510    into  the scope of the class itself.  For purposes of access checking,
6511    the inserted class name is treated as if it were a public member name.  */
6512
6513 void
6514 build_self_reference (void)
6515 {
6516   tree name = constructor_name (current_class_type);
6517   tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6518   tree saved_cas;
6519
6520   DECL_NONLOCAL (value) = 1;
6521   DECL_CONTEXT (value) = current_class_type;
6522   DECL_ARTIFICIAL (value) = 1;
6523   SET_DECL_SELF_REFERENCE_P (value);
6524
6525   if (processing_template_decl)
6526     value = push_template_decl (value);
6527
6528   saved_cas = current_access_specifier;
6529   current_access_specifier = access_public_node;
6530   finish_member_declaration (value);
6531   current_access_specifier = saved_cas;
6532 }
6533
6534 /* Returns 1 if TYPE contains only padding bytes.  */
6535
6536 int
6537 is_empty_class (tree type)
6538 {
6539   if (type == error_mark_node)
6540     return 0;
6541
6542   if (! CLASS_TYPE_P (type))
6543     return 0;
6544
6545   /* In G++ 3.2, whether or not a class was empty was determined by
6546      looking at its size.  */
6547   if (abi_version_at_least (2))
6548     return CLASSTYPE_EMPTY_P (type);
6549   else
6550     return integer_zerop (CLASSTYPE_SIZE (type));
6551 }
6552
6553 /* Returns true if TYPE contains an empty class.  */
6554
6555 static bool
6556 contains_empty_class_p (tree type)
6557 {
6558   if (is_empty_class (type))
6559     return true;
6560   if (CLASS_TYPE_P (type))
6561     {
6562       tree field;
6563       tree binfo;
6564       tree base_binfo;
6565       int i;
6566
6567       for (binfo = TYPE_BINFO (type), i = 0;
6568            BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6569         if (contains_empty_class_p (BINFO_TYPE (base_binfo)))
6570           return true;
6571       for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
6572         if (TREE_CODE (field) == FIELD_DECL
6573             && !DECL_ARTIFICIAL (field)
6574             && is_empty_class (TREE_TYPE (field)))
6575           return true;
6576     }
6577   else if (TREE_CODE (type) == ARRAY_TYPE)
6578     return contains_empty_class_p (TREE_TYPE (type));
6579   return false;
6580 }
6581
6582 /* Returns true if TYPE contains no actual data, just various
6583    possible combinations of empty classes.  */
6584
6585 bool
6586 is_really_empty_class (tree type)
6587 {
6588   if (is_empty_class (type))
6589     return true;
6590   if (CLASS_TYPE_P (type))
6591     {
6592       tree field;
6593       tree binfo;
6594       tree base_binfo;
6595       int i;
6596
6597       for (binfo = TYPE_BINFO (type), i = 0;
6598            BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6599         if (!is_really_empty_class (BINFO_TYPE (base_binfo)))
6600           return false;
6601       for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
6602         if (TREE_CODE (field) == FIELD_DECL
6603             && !DECL_ARTIFICIAL (field)
6604             && !is_really_empty_class (TREE_TYPE (field)))
6605           return false;
6606       return true;
6607     }
6608   else if (TREE_CODE (type) == ARRAY_TYPE)
6609     return is_really_empty_class (TREE_TYPE (type));
6610   return false;
6611 }
6612
6613 /* Note that NAME was looked up while the current class was being
6614    defined and that the result of that lookup was DECL.  */
6615
6616 void
6617 maybe_note_name_used_in_class (tree name, tree decl)
6618 {
6619   splay_tree names_used;
6620
6621   /* If we're not defining a class, there's nothing to do.  */
6622   if (!(innermost_scope_kind() == sk_class
6623         && TYPE_BEING_DEFINED (current_class_type)
6624         && !LAMBDA_TYPE_P (current_class_type)))
6625     return;
6626
6627   /* If there's already a binding for this NAME, then we don't have
6628      anything to worry about.  */
6629   if (lookup_member (current_class_type, name,
6630                      /*protect=*/0, /*want_type=*/false))
6631     return;
6632
6633   if (!current_class_stack[current_class_depth - 1].names_used)
6634     current_class_stack[current_class_depth - 1].names_used
6635       = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6636   names_used = current_class_stack[current_class_depth - 1].names_used;
6637
6638   splay_tree_insert (names_used,
6639                      (splay_tree_key) name,
6640                      (splay_tree_value) decl);
6641 }
6642
6643 /* Note that NAME was declared (as DECL) in the current class.  Check
6644    to see that the declaration is valid.  */
6645
6646 void
6647 note_name_declared_in_class (tree name, tree decl)
6648 {
6649   splay_tree names_used;
6650   splay_tree_node n;
6651
6652   /* Look to see if we ever used this name.  */
6653   names_used
6654     = current_class_stack[current_class_depth - 1].names_used;
6655   if (!names_used)
6656     return;
6657
6658   n = splay_tree_lookup (names_used, (splay_tree_key) name);
6659   if (n)
6660     {
6661       /* [basic.scope.class]
6662
6663          A name N used in a class S shall refer to the same declaration
6664          in its context and when re-evaluated in the completed scope of
6665          S.  */
6666       permerror (input_location, "declaration of %q#D", decl);
6667       permerror (input_location, "changes meaning of %qD from %q+#D",
6668                DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
6669     }
6670 }
6671
6672 /* Returns the VAR_DECL for the complete vtable associated with BINFO.
6673    Secondary vtables are merged with primary vtables; this function
6674    will return the VAR_DECL for the primary vtable.  */
6675
6676 tree
6677 get_vtbl_decl_for_binfo (tree binfo)
6678 {
6679   tree decl;
6680
6681   decl = BINFO_VTABLE (binfo);
6682   if (decl && TREE_CODE (decl) == POINTER_PLUS_EXPR)
6683     {
6684       gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
6685       decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
6686     }
6687   if (decl)
6688     gcc_assert (TREE_CODE (decl) == VAR_DECL);
6689   return decl;
6690 }
6691
6692
6693 /* Returns the binfo for the primary base of BINFO.  If the resulting
6694    BINFO is a virtual base, and it is inherited elsewhere in the
6695    hierarchy, then the returned binfo might not be the primary base of
6696    BINFO in the complete object.  Check BINFO_PRIMARY_P or
6697    BINFO_LOST_PRIMARY_P to be sure.  */
6698
6699 static tree
6700 get_primary_binfo (tree binfo)
6701 {
6702   tree primary_base;
6703
6704   primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
6705   if (!primary_base)
6706     return NULL_TREE;
6707
6708   return copied_binfo (primary_base, binfo);
6709 }
6710
6711 /* If INDENTED_P is zero, indent to INDENT. Return nonzero.  */
6712
6713 static int
6714 maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
6715 {
6716   if (!indented_p)
6717     fprintf (stream, "%*s", indent, "");
6718   return 1;
6719 }
6720
6721 /* Dump the offsets of all the bases rooted at BINFO to STREAM.
6722    INDENT should be zero when called from the top level; it is
6723    incremented recursively.  IGO indicates the next expected BINFO in
6724    inheritance graph ordering.  */
6725
6726 static tree
6727 dump_class_hierarchy_r (FILE *stream,
6728                         int flags,
6729                         tree binfo,
6730                         tree igo,
6731                         int indent)
6732 {
6733   int indented = 0;
6734   tree base_binfo;
6735   int i;
6736
6737   indented = maybe_indent_hierarchy (stream, indent, 0);
6738   fprintf (stream, "%s (0x%lx) ",
6739            type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
6740            (unsigned long) binfo);
6741   if (binfo != igo)
6742     {
6743       fprintf (stream, "alternative-path\n");
6744       return igo;
6745     }
6746   igo = TREE_CHAIN (binfo);
6747
6748   fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
6749            tree_low_cst (BINFO_OFFSET (binfo), 0));
6750   if (is_empty_class (BINFO_TYPE (binfo)))
6751     fprintf (stream, " empty");
6752   else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
6753     fprintf (stream, " nearly-empty");
6754   if (BINFO_VIRTUAL_P (binfo))
6755     fprintf (stream, " virtual");
6756   fprintf (stream, "\n");
6757
6758   indented = 0;
6759   if (BINFO_PRIMARY_P (binfo))
6760     {
6761       indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6762       fprintf (stream, " primary-for %s (0x%lx)",
6763                type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
6764                                TFF_PLAIN_IDENTIFIER),
6765                (unsigned long)BINFO_INHERITANCE_CHAIN (binfo));
6766     }
6767   if (BINFO_LOST_PRIMARY_P (binfo))
6768     {
6769       indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6770       fprintf (stream, " lost-primary");
6771     }
6772   if (indented)
6773     fprintf (stream, "\n");
6774
6775   if (!(flags & TDF_SLIM))
6776     {
6777       int indented = 0;
6778
6779       if (BINFO_SUBVTT_INDEX (binfo))
6780         {
6781           indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6782           fprintf (stream, " subvttidx=%s",
6783                    expr_as_string (BINFO_SUBVTT_INDEX (binfo),
6784                                    TFF_PLAIN_IDENTIFIER));
6785         }
6786       if (BINFO_VPTR_INDEX (binfo))
6787         {
6788           indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6789           fprintf (stream, " vptridx=%s",
6790                    expr_as_string (BINFO_VPTR_INDEX (binfo),
6791                                    TFF_PLAIN_IDENTIFIER));
6792         }
6793       if (BINFO_VPTR_FIELD (binfo))
6794         {
6795           indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6796           fprintf (stream, " vbaseoffset=%s",
6797                    expr_as_string (BINFO_VPTR_FIELD (binfo),
6798                                    TFF_PLAIN_IDENTIFIER));
6799         }
6800       if (BINFO_VTABLE (binfo))
6801         {
6802           indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6803           fprintf (stream, " vptr=%s",
6804                    expr_as_string (BINFO_VTABLE (binfo),
6805                                    TFF_PLAIN_IDENTIFIER));
6806         }
6807
6808       if (indented)
6809         fprintf (stream, "\n");
6810     }
6811
6812   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
6813     igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
6814
6815   return igo;
6816 }
6817
6818 /* Dump the BINFO hierarchy for T.  */
6819
6820 static void
6821 dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
6822 {
6823   fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6824   fprintf (stream, "   size=%lu align=%lu\n",
6825            (unsigned long)(tree_low_cst (TYPE_SIZE (t), 0) / BITS_PER_UNIT),
6826            (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
6827   fprintf (stream, "   base size=%lu base align=%lu\n",
6828            (unsigned long)(tree_low_cst (TYPE_SIZE (CLASSTYPE_AS_BASE (t)), 0)
6829                            / BITS_PER_UNIT),
6830            (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
6831                            / BITS_PER_UNIT));
6832   dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
6833   fprintf (stream, "\n");
6834 }
6835
6836 /* Debug interface to hierarchy dumping.  */
6837
6838 void
6839 debug_class (tree t)
6840 {
6841   dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
6842 }
6843
6844 static void
6845 dump_class_hierarchy (tree t)
6846 {
6847   int flags;
6848   FILE *stream = dump_begin (TDI_class, &flags);
6849
6850   if (stream)
6851     {
6852       dump_class_hierarchy_1 (stream, flags, t);
6853       dump_end (TDI_class, stream);
6854     }
6855 }
6856
6857 static void
6858 dump_array (FILE * stream, tree decl)
6859 {
6860   tree value;
6861   unsigned HOST_WIDE_INT ix;
6862   HOST_WIDE_INT elt;
6863   tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
6864
6865   elt = (tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))), 0)
6866          / BITS_PER_UNIT);
6867   fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
6868   fprintf (stream, " %s entries",
6869            expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
6870                            TFF_PLAIN_IDENTIFIER));
6871   fprintf (stream, "\n");
6872
6873   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
6874                               ix, value)
6875     fprintf (stream, "%-4ld  %s\n", (long)(ix * elt),
6876              expr_as_string (value, TFF_PLAIN_IDENTIFIER));
6877 }
6878
6879 static void
6880 dump_vtable (tree t, tree binfo, tree vtable)
6881 {
6882   int flags;
6883   FILE *stream = dump_begin (TDI_class, &flags);
6884
6885   if (!stream)
6886     return;
6887
6888   if (!(flags & TDF_SLIM))
6889     {
6890       int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
6891
6892       fprintf (stream, "%s for %s",
6893                ctor_vtbl_p ? "Construction vtable" : "Vtable",
6894                type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
6895       if (ctor_vtbl_p)
6896         {
6897           if (!BINFO_VIRTUAL_P (binfo))
6898             fprintf (stream, " (0x%lx instance)", (unsigned long)binfo);
6899           fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6900         }
6901       fprintf (stream, "\n");
6902       dump_array (stream, vtable);
6903       fprintf (stream, "\n");
6904     }
6905
6906   dump_end (TDI_class, stream);
6907 }
6908
6909 static void
6910 dump_vtt (tree t, tree vtt)
6911 {
6912   int flags;
6913   FILE *stream = dump_begin (TDI_class, &flags);
6914
6915   if (!stream)
6916     return;
6917
6918   if (!(flags & TDF_SLIM))
6919     {
6920       fprintf (stream, "VTT for %s\n",
6921                type_as_string (t, TFF_PLAIN_IDENTIFIER));
6922       dump_array (stream, vtt);
6923       fprintf (stream, "\n");
6924     }
6925
6926   dump_end (TDI_class, stream);
6927 }
6928
6929 /* Dump a function or thunk and its thunkees.  */
6930
6931 static void
6932 dump_thunk (FILE *stream, int indent, tree thunk)
6933 {
6934   static const char spaces[] = "        ";
6935   tree name = DECL_NAME (thunk);
6936   tree thunks;
6937
6938   fprintf (stream, "%.*s%p %s %s", indent, spaces,
6939            (void *)thunk,
6940            !DECL_THUNK_P (thunk) ? "function"
6941            : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
6942            name ? IDENTIFIER_POINTER (name) : "<unset>");
6943   if (DECL_THUNK_P (thunk))
6944     {
6945       HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
6946       tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
6947
6948       fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
6949       if (!virtual_adjust)
6950         /*NOP*/;
6951       else if (DECL_THIS_THUNK_P (thunk))
6952         fprintf (stream, " vcall="  HOST_WIDE_INT_PRINT_DEC,
6953                  tree_low_cst (virtual_adjust, 0));
6954       else
6955         fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
6956                  tree_low_cst (BINFO_VPTR_FIELD (virtual_adjust), 0),
6957                  type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
6958       if (THUNK_ALIAS (thunk))
6959         fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
6960     }
6961   fprintf (stream, "\n");
6962   for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
6963     dump_thunk (stream, indent + 2, thunks);
6964 }
6965
6966 /* Dump the thunks for FN.  */
6967
6968 void
6969 debug_thunks (tree fn)
6970 {
6971   dump_thunk (stderr, 0, fn);
6972 }
6973
6974 /* Virtual function table initialization.  */
6975
6976 /* Create all the necessary vtables for T and its base classes.  */
6977
6978 static void
6979 finish_vtbls (tree t)
6980 {
6981   tree list;
6982   tree vbase;
6983
6984   /* We lay out the primary and secondary vtables in one contiguous
6985      vtable.  The primary vtable is first, followed by the non-virtual
6986      secondary vtables in inheritance graph order.  */
6987   list = build_tree_list (BINFO_VTABLE (TYPE_BINFO (t)), NULL_TREE);
6988   accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t),
6989                          TYPE_BINFO (t), t, list);
6990
6991   /* Then come the virtual bases, also in inheritance graph order.  */
6992   for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
6993     {
6994       if (!BINFO_VIRTUAL_P (vbase))
6995         continue;
6996       accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), t, list);
6997     }
6998
6999   if (BINFO_VTABLE (TYPE_BINFO (t)))
7000     initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list));
7001 }
7002
7003 /* Initialize the vtable for BINFO with the INITS.  */
7004
7005 static void
7006 initialize_vtable (tree binfo, tree inits)
7007 {
7008   tree decl;
7009
7010   layout_vtable_decl (binfo, list_length (inits));
7011   decl = get_vtbl_decl_for_binfo (binfo);
7012   initialize_artificial_var (decl, inits);
7013   dump_vtable (BINFO_TYPE (binfo), binfo, decl);
7014 }
7015
7016 /* Build the VTT (virtual table table) for T.
7017    A class requires a VTT if it has virtual bases.
7018
7019    This holds
7020    1 - primary virtual pointer for complete object T
7021    2 - secondary VTTs for each direct non-virtual base of T which requires a
7022        VTT
7023    3 - secondary virtual pointers for each direct or indirect base of T which
7024        has virtual bases or is reachable via a virtual path from T.
7025    4 - secondary VTTs for each direct or indirect virtual base of T.
7026
7027    Secondary VTTs look like complete object VTTs without part 4.  */
7028
7029 static void
7030 build_vtt (tree t)
7031 {
7032   tree inits;
7033   tree type;
7034   tree vtt;
7035   tree index;
7036
7037   /* Build up the initializers for the VTT.  */
7038   inits = NULL_TREE;
7039   index = size_zero_node;
7040   build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
7041
7042   /* If we didn't need a VTT, we're done.  */
7043   if (!inits)
7044     return;
7045
7046   /* Figure out the type of the VTT.  */
7047   type = build_index_type (size_int (list_length (inits) - 1));
7048   type = build_cplus_array_type (const_ptr_type_node, type);
7049
7050   /* Now, build the VTT object itself.  */
7051   vtt = build_vtable (t, mangle_vtt_for_type (t), type);
7052   initialize_artificial_var (vtt, inits);
7053   /* Add the VTT to the vtables list.  */
7054   TREE_CHAIN (vtt) = TREE_CHAIN (CLASSTYPE_VTABLES (t));
7055   TREE_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
7056
7057   dump_vtt (t, vtt);
7058 }
7059
7060 /* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
7061    PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
7062    and CHAIN the vtable pointer for this binfo after construction is
7063    complete.  VALUE can also be another BINFO, in which case we recurse.  */
7064
7065 static tree
7066 binfo_ctor_vtable (tree binfo)
7067 {
7068   tree vt;
7069
7070   while (1)
7071     {
7072       vt = BINFO_VTABLE (binfo);
7073       if (TREE_CODE (vt) == TREE_LIST)
7074         vt = TREE_VALUE (vt);
7075       if (TREE_CODE (vt) == TREE_BINFO)
7076         binfo = vt;
7077       else
7078         break;
7079     }
7080
7081   return vt;
7082 }
7083
7084 /* Data for secondary VTT initialization.  */
7085 typedef struct secondary_vptr_vtt_init_data_s
7086 {
7087   /* Is this the primary VTT? */
7088   bool top_level_p;
7089
7090   /* Current index into the VTT.  */
7091   tree index;
7092
7093   /* TREE_LIST of initializers built up.  */
7094   tree inits;
7095
7096   /* The type being constructed by this secondary VTT.  */
7097   tree type_being_constructed;
7098 } secondary_vptr_vtt_init_data;
7099
7100 /* Recursively build the VTT-initializer for BINFO (which is in the
7101    hierarchy dominated by T).  INITS points to the end of the initializer
7102    list to date.  INDEX is the VTT index where the next element will be
7103    replaced.  Iff BINFO is the binfo for T, this is the top level VTT (i.e.
7104    not a subvtt for some base of T).  When that is so, we emit the sub-VTTs
7105    for virtual bases of T. When it is not so, we build the constructor
7106    vtables for the BINFO-in-T variant.  */
7107
7108 static tree *
7109 build_vtt_inits (tree binfo, tree t, tree *inits, tree *index)
7110 {
7111   int i;
7112   tree b;
7113   tree init;
7114   tree secondary_vptrs;
7115   secondary_vptr_vtt_init_data data;
7116   int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
7117
7118   /* We only need VTTs for subobjects with virtual bases.  */
7119   if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
7120     return inits;
7121
7122   /* We need to use a construction vtable if this is not the primary
7123      VTT.  */
7124   if (!top_level_p)
7125     {
7126       build_ctor_vtbl_group (binfo, t);
7127
7128       /* Record the offset in the VTT where this sub-VTT can be found.  */
7129       BINFO_SUBVTT_INDEX (binfo) = *index;
7130     }
7131
7132   /* Add the address of the primary vtable for the complete object.  */
7133   init = binfo_ctor_vtable (binfo);
7134   *inits = build_tree_list (NULL_TREE, init);
7135   inits = &TREE_CHAIN (*inits);
7136   if (top_level_p)
7137     {
7138       gcc_assert (!BINFO_VPTR_INDEX (binfo));
7139       BINFO_VPTR_INDEX (binfo) = *index;
7140     }
7141   *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
7142
7143   /* Recursively add the secondary VTTs for non-virtual bases.  */
7144   for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
7145     if (!BINFO_VIRTUAL_P (b))
7146       inits = build_vtt_inits (b, t, inits, index);
7147
7148   /* Add secondary virtual pointers for all subobjects of BINFO with
7149      either virtual bases or reachable along a virtual path, except
7150      subobjects that are non-virtual primary bases.  */
7151   data.top_level_p = top_level_p;
7152   data.index = *index;
7153   data.inits = NULL;
7154   data.type_being_constructed = BINFO_TYPE (binfo);
7155
7156   dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
7157
7158   *index = data.index;
7159
7160   /* The secondary vptrs come back in reverse order.  After we reverse
7161      them, and add the INITS, the last init will be the first element
7162      of the chain.  */
7163   secondary_vptrs = data.inits;
7164   if (secondary_vptrs)
7165     {
7166       *inits = nreverse (secondary_vptrs);
7167       inits = &TREE_CHAIN (secondary_vptrs);
7168       gcc_assert (*inits == NULL_TREE);
7169     }
7170
7171   if (top_level_p)
7172     /* Add the secondary VTTs for virtual bases in inheritance graph
7173        order.  */
7174     for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
7175       {
7176         if (!BINFO_VIRTUAL_P (b))
7177           continue;
7178
7179         inits = build_vtt_inits (b, t, inits, index);
7180       }
7181   else
7182     /* Remove the ctor vtables we created.  */
7183     dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
7184
7185   return inits;
7186 }
7187
7188 /* Called from build_vtt_inits via dfs_walk.  BINFO is the binfo for the base
7189    in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure.  */
7190
7191 static tree
7192 dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
7193 {
7194   secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
7195
7196   /* We don't care about bases that don't have vtables.  */
7197   if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
7198     return dfs_skip_bases;
7199
7200   /* We're only interested in proper subobjects of the type being
7201      constructed.  */
7202   if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
7203     return NULL_TREE;
7204
7205   /* We're only interested in bases with virtual bases or reachable
7206      via a virtual path from the type being constructed.  */
7207   if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
7208         || binfo_via_virtual (binfo, data->type_being_constructed)))
7209     return dfs_skip_bases;
7210
7211   /* We're not interested in non-virtual primary bases.  */
7212   if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
7213     return NULL_TREE;
7214
7215   /* Record the index where this secondary vptr can be found.  */
7216   if (data->top_level_p)
7217     {
7218       gcc_assert (!BINFO_VPTR_INDEX (binfo));
7219       BINFO_VPTR_INDEX (binfo) = data->index;
7220
7221       if (BINFO_VIRTUAL_P (binfo))
7222         {
7223           /* It's a primary virtual base, and this is not a
7224              construction vtable.  Find the base this is primary of in
7225              the inheritance graph, and use that base's vtable
7226              now.  */
7227           while (BINFO_PRIMARY_P (binfo))
7228             binfo = BINFO_INHERITANCE_CHAIN (binfo);
7229         }
7230     }
7231
7232   /* Add the initializer for the secondary vptr itself.  */
7233   data->inits = tree_cons (NULL_TREE, binfo_ctor_vtable (binfo), data->inits);
7234
7235   /* Advance the vtt index.  */
7236   data->index = size_binop (PLUS_EXPR, data->index,
7237                             TYPE_SIZE_UNIT (ptr_type_node));
7238
7239   return NULL_TREE;
7240 }
7241
7242 /* Called from build_vtt_inits via dfs_walk. After building
7243    constructor vtables and generating the sub-vtt from them, we need
7244    to restore the BINFO_VTABLES that were scribbled on.  DATA is the
7245    binfo of the base whose sub vtt was generated.  */
7246
7247 static tree
7248 dfs_fixup_binfo_vtbls (tree binfo, void* data)
7249 {
7250   tree vtable = BINFO_VTABLE (binfo);
7251
7252   if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
7253     /* If this class has no vtable, none of its bases do.  */
7254     return dfs_skip_bases;
7255
7256   if (!vtable)
7257     /* This might be a primary base, so have no vtable in this
7258        hierarchy.  */
7259     return NULL_TREE;
7260
7261   /* If we scribbled the construction vtable vptr into BINFO, clear it
7262      out now.  */
7263   if (TREE_CODE (vtable) == TREE_LIST
7264       && (TREE_PURPOSE (vtable) == (tree) data))
7265     BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
7266
7267   return NULL_TREE;
7268 }
7269
7270 /* Build the construction vtable group for BINFO which is in the
7271    hierarchy dominated by T.  */
7272
7273 static void
7274 build_ctor_vtbl_group (tree binfo, tree t)
7275 {
7276   tree list;
7277   tree type;
7278   tree vtbl;
7279   tree inits;
7280   tree id;
7281   tree vbase;
7282
7283   /* See if we've already created this construction vtable group.  */
7284   id = mangle_ctor_vtbl_for_type (t, binfo);
7285   if (IDENTIFIER_GLOBAL_VALUE (id))
7286     return;
7287
7288   gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
7289   /* Build a version of VTBL (with the wrong type) for use in
7290      constructing the addresses of secondary vtables in the
7291      construction vtable group.  */
7292   vtbl = build_vtable (t, id, ptr_type_node);
7293   DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
7294   list = build_tree_list (vtbl, NULL_TREE);
7295   accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
7296                          binfo, t, list);
7297
7298   /* Add the vtables for each of our virtual bases using the vbase in T
7299      binfo.  */
7300   for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7301        vbase;
7302        vbase = TREE_CHAIN (vbase))
7303     {
7304       tree b;
7305
7306       if (!BINFO_VIRTUAL_P (vbase))
7307         continue;
7308       b = copied_binfo (vbase, binfo);
7309
7310       accumulate_vtbl_inits (b, vbase, binfo, t, list);
7311     }
7312   inits = TREE_VALUE (list);
7313
7314   /* Figure out the type of the construction vtable.  */
7315   type = build_index_type (size_int (list_length (inits) - 1));
7316   type = build_cplus_array_type (vtable_entry_type, type);
7317   layout_type (type);
7318   TREE_TYPE (vtbl) = type;
7319   DECL_SIZE (vtbl) = DECL_SIZE_UNIT (vtbl) = NULL_TREE;
7320   layout_decl (vtbl, 0);
7321
7322   /* Initialize the construction vtable.  */
7323   CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
7324   initialize_artificial_var (vtbl, inits);
7325   dump_vtable (t, binfo, vtbl);
7326 }
7327
7328 /* Add the vtbl initializers for BINFO (and its bases other than
7329    non-virtual primaries) to the list of INITS.  BINFO is in the
7330    hierarchy dominated by T.  RTTI_BINFO is the binfo within T of
7331    the constructor the vtbl inits should be accumulated for. (If this
7332    is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
7333    ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
7334    BINFO is the active base equivalent of ORIG_BINFO in the inheritance
7335    graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
7336    but are not necessarily the same in terms of layout.  */
7337
7338 static void
7339 accumulate_vtbl_inits (tree binfo,
7340                        tree orig_binfo,
7341                        tree rtti_binfo,
7342                        tree t,
7343                        tree inits)
7344 {
7345   int i;
7346   tree base_binfo;
7347   int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7348
7349   gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
7350
7351   /* If it doesn't have a vptr, we don't do anything.  */
7352   if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
7353     return;
7354
7355   /* If we're building a construction vtable, we're not interested in
7356      subobjects that don't require construction vtables.  */
7357   if (ctor_vtbl_p
7358       && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
7359       && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
7360     return;
7361
7362   /* Build the initializers for the BINFO-in-T vtable.  */
7363   TREE_VALUE (inits)
7364     = chainon (TREE_VALUE (inits),
7365                dfs_accumulate_vtbl_inits (binfo, orig_binfo,
7366                                           rtti_binfo, t, inits));
7367
7368   /* Walk the BINFO and its bases.  We walk in preorder so that as we
7369      initialize each vtable we can figure out at what offset the
7370      secondary vtable lies from the primary vtable.  We can't use
7371      dfs_walk here because we need to iterate through bases of BINFO
7372      and RTTI_BINFO simultaneously.  */
7373   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7374     {
7375       /* Skip virtual bases.  */
7376       if (BINFO_VIRTUAL_P (base_binfo))
7377         continue;
7378       accumulate_vtbl_inits (base_binfo,
7379                              BINFO_BASE_BINFO (orig_binfo, i),
7380                              rtti_binfo, t,
7381                              inits);
7382     }
7383 }
7384
7385 /* Called from accumulate_vtbl_inits.  Returns the initializers for
7386    the BINFO vtable.  */
7387
7388 static tree
7389 dfs_accumulate_vtbl_inits (tree binfo,
7390                            tree orig_binfo,
7391                            tree rtti_binfo,
7392                            tree t,
7393                            tree l)
7394 {
7395   tree inits = NULL_TREE;
7396   tree vtbl = NULL_TREE;
7397   int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7398
7399   if (ctor_vtbl_p
7400       && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
7401     {
7402       /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
7403          primary virtual base.  If it is not the same primary in
7404          the hierarchy of T, we'll need to generate a ctor vtable
7405          for it, to place at its location in T.  If it is the same
7406          primary, we still need a VTT entry for the vtable, but it
7407          should point to the ctor vtable for the base it is a
7408          primary for within the sub-hierarchy of RTTI_BINFO.
7409
7410          There are three possible cases:
7411
7412          1) We are in the same place.
7413          2) We are a primary base within a lost primary virtual base of
7414          RTTI_BINFO.
7415          3) We are primary to something not a base of RTTI_BINFO.  */
7416
7417       tree b;
7418       tree last = NULL_TREE;
7419
7420       /* First, look through the bases we are primary to for RTTI_BINFO
7421          or a virtual base.  */
7422       b = binfo;
7423       while (BINFO_PRIMARY_P (b))
7424         {
7425           b = BINFO_INHERITANCE_CHAIN (b);
7426           last = b;
7427           if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7428             goto found;
7429         }
7430       /* If we run out of primary links, keep looking down our
7431          inheritance chain; we might be an indirect primary.  */
7432       for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
7433         if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7434           break;
7435     found:
7436
7437       /* If we found RTTI_BINFO, this is case 1.  If we found a virtual
7438          base B and it is a base of RTTI_BINFO, this is case 2.  In
7439          either case, we share our vtable with LAST, i.e. the
7440          derived-most base within B of which we are a primary.  */
7441       if (b == rtti_binfo
7442           || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
7443         /* Just set our BINFO_VTABLE to point to LAST, as we may not have
7444            set LAST's BINFO_VTABLE yet.  We'll extract the actual vptr in
7445            binfo_ctor_vtable after everything's been set up.  */
7446         vtbl = last;
7447
7448       /* Otherwise, this is case 3 and we get our own.  */
7449     }
7450   else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
7451     return inits;
7452
7453   if (!vtbl)
7454     {
7455       tree index;
7456       int non_fn_entries;
7457
7458       /* Compute the initializer for this vtable.  */
7459       inits = build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
7460                                       &non_fn_entries);
7461
7462       /* Figure out the position to which the VPTR should point.  */
7463       vtbl = TREE_PURPOSE (l);
7464       vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, vtbl);
7465       index = size_binop (PLUS_EXPR,
7466                           size_int (non_fn_entries),
7467                           size_int (list_length (TREE_VALUE (l))));
7468       index = size_binop (MULT_EXPR,
7469                           TYPE_SIZE_UNIT (vtable_entry_type),
7470                           index);
7471       vtbl = build2 (POINTER_PLUS_EXPR, TREE_TYPE (vtbl), vtbl, index);
7472     }
7473
7474   if (ctor_vtbl_p)
7475     /* For a construction vtable, we can't overwrite BINFO_VTABLE.
7476        So, we make a TREE_LIST.  Later, dfs_fixup_binfo_vtbls will
7477        straighten this out.  */
7478     BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
7479   else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
7480     inits = NULL_TREE;
7481   else
7482      /* For an ordinary vtable, set BINFO_VTABLE.  */
7483     BINFO_VTABLE (binfo) = vtbl;
7484
7485   return inits;
7486 }
7487
7488 static GTY(()) tree abort_fndecl_addr;
7489
7490 /* Construct the initializer for BINFO's virtual function table.  BINFO
7491    is part of the hierarchy dominated by T.  If we're building a
7492    construction vtable, the ORIG_BINFO is the binfo we should use to
7493    find the actual function pointers to put in the vtable - but they
7494    can be overridden on the path to most-derived in the graph that
7495    ORIG_BINFO belongs.  Otherwise,
7496    ORIG_BINFO should be the same as BINFO.  The RTTI_BINFO is the
7497    BINFO that should be indicated by the RTTI information in the
7498    vtable; it will be a base class of T, rather than T itself, if we
7499    are building a construction vtable.
7500
7501    The value returned is a TREE_LIST suitable for wrapping in a
7502    CONSTRUCTOR to use as the DECL_INITIAL for a vtable.  If
7503    NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
7504    number of non-function entries in the vtable.
7505
7506    It might seem that this function should never be called with a
7507    BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
7508    base is always subsumed by a derived class vtable.  However, when
7509    we are building construction vtables, we do build vtables for
7510    primary bases; we need these while the primary base is being
7511    constructed.  */
7512
7513 static tree
7514 build_vtbl_initializer (tree binfo,
7515                         tree orig_binfo,
7516                         tree t,
7517                         tree rtti_binfo,
7518                         int* non_fn_entries_p)
7519 {
7520   tree v, b;
7521   tree vfun_inits;
7522   vtbl_init_data vid;
7523   unsigned ix;
7524   tree vbinfo;
7525   VEC(tree,gc) *vbases;
7526
7527   /* Initialize VID.  */
7528   memset (&vid, 0, sizeof (vid));
7529   vid.binfo = binfo;
7530   vid.derived = t;
7531   vid.rtti_binfo = rtti_binfo;
7532   vid.last_init = &vid.inits;
7533   vid.primary_vtbl_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
7534   vid.ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7535   vid.generate_vcall_entries = true;
7536   /* The first vbase or vcall offset is at index -3 in the vtable.  */
7537   vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
7538
7539   /* Add entries to the vtable for RTTI.  */
7540   build_rtti_vtbl_entries (binfo, &vid);
7541
7542   /* Create an array for keeping track of the functions we've
7543      processed.  When we see multiple functions with the same
7544      signature, we share the vcall offsets.  */
7545   vid.fns = VEC_alloc (tree, gc, 32);
7546   /* Add the vcall and vbase offset entries.  */
7547   build_vcall_and_vbase_vtbl_entries (binfo, &vid);
7548
7549   /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
7550      build_vbase_offset_vtbl_entries.  */
7551   for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
7552        VEC_iterate (tree, vbases, ix, vbinfo); ix++)
7553     BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
7554
7555   /* If the target requires padding between data entries, add that now.  */
7556   if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
7557     {
7558       tree cur, *prev;
7559
7560       for (prev = &vid.inits; (cur = *prev); prev = &TREE_CHAIN (cur))
7561         {
7562           tree add = cur;
7563           int i;
7564
7565           for (i = 1; i < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++i)
7566             add = tree_cons (NULL_TREE,
7567                              build1 (NOP_EXPR, vtable_entry_type,
7568                                      null_pointer_node),
7569                              add);
7570           *prev = add;
7571         }
7572     }
7573
7574   if (non_fn_entries_p)
7575     *non_fn_entries_p = list_length (vid.inits);
7576
7577   /* Go through all the ordinary virtual functions, building up
7578      initializers.  */
7579   vfun_inits = NULL_TREE;
7580   for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
7581     {
7582       tree delta;
7583       tree vcall_index;
7584       tree fn, fn_original;
7585       tree init = NULL_TREE;
7586
7587       fn = BV_FN (v);
7588       fn_original = fn;
7589       if (DECL_THUNK_P (fn))
7590         {
7591           if (!DECL_NAME (fn))
7592             finish_thunk (fn);
7593           if (THUNK_ALIAS (fn))
7594             {
7595               fn = THUNK_ALIAS (fn);
7596               BV_FN (v) = fn;
7597             }
7598           fn_original = THUNK_TARGET (fn);
7599         }
7600
7601       /* If the only definition of this function signature along our
7602          primary base chain is from a lost primary, this vtable slot will
7603          never be used, so just zero it out.  This is important to avoid
7604          requiring extra thunks which cannot be generated with the function.
7605
7606          We first check this in update_vtable_entry_for_fn, so we handle
7607          restored primary bases properly; we also need to do it here so we
7608          zero out unused slots in ctor vtables, rather than filling them
7609          with erroneous values (though harmless, apart from relocation
7610          costs).  */
7611       for (b = binfo; ; b = get_primary_binfo (b))
7612         {
7613           /* We found a defn before a lost primary; go ahead as normal.  */
7614           if (look_for_overrides_here (BINFO_TYPE (b), fn_original))
7615             break;
7616
7617           /* The nearest definition is from a lost primary; clear the
7618              slot.  */
7619           if (BINFO_LOST_PRIMARY_P (b))
7620             {
7621               init = size_zero_node;
7622               break;
7623             }
7624         }
7625
7626       if (! init)
7627         {
7628           /* Pull the offset for `this', and the function to call, out of
7629              the list.  */
7630           delta = BV_DELTA (v);
7631           vcall_index = BV_VCALL_INDEX (v);
7632
7633           gcc_assert (TREE_CODE (delta) == INTEGER_CST);
7634           gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
7635
7636           /* You can't call an abstract virtual function; it's abstract.
7637              So, we replace these functions with __pure_virtual.  */
7638           if (DECL_PURE_VIRTUAL_P (fn_original))
7639             {
7640               fn = abort_fndecl;
7641               if (abort_fndecl_addr == NULL)
7642                 abort_fndecl_addr = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7643               init = abort_fndecl_addr;
7644             }
7645           else
7646             {
7647               if (!integer_zerop (delta) || vcall_index)
7648                 {
7649                   fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
7650                   if (!DECL_NAME (fn))
7651                     finish_thunk (fn);
7652                 }
7653               /* Take the address of the function, considering it to be of an
7654                  appropriate generic type.  */
7655               init = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7656             }
7657         }
7658
7659       /* And add it to the chain of initializers.  */
7660       if (TARGET_VTABLE_USES_DESCRIPTORS)
7661         {
7662           int i;
7663           if (init == size_zero_node)
7664             for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7665               vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7666           else
7667             for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7668               {
7669                 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
7670                                      TREE_OPERAND (init, 0),
7671                                      build_int_cst (NULL_TREE, i));
7672                 TREE_CONSTANT (fdesc) = 1;
7673
7674                 vfun_inits = tree_cons (NULL_TREE, fdesc, vfun_inits);
7675               }
7676         }
7677       else
7678         vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7679     }
7680
7681   /* The initializers for virtual functions were built up in reverse
7682      order; straighten them out now.  */
7683   vfun_inits = nreverse (vfun_inits);
7684
7685   /* The negative offset initializers are also in reverse order.  */
7686   vid.inits = nreverse (vid.inits);
7687
7688   /* Chain the two together.  */
7689   return chainon (vid.inits, vfun_inits);
7690 }
7691
7692 /* Adds to vid->inits the initializers for the vbase and vcall
7693    offsets in BINFO, which is in the hierarchy dominated by T.  */
7694
7695 static void
7696 build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
7697 {
7698   tree b;
7699
7700   /* If this is a derived class, we must first create entries
7701      corresponding to the primary base class.  */
7702   b = get_primary_binfo (binfo);
7703   if (b)
7704     build_vcall_and_vbase_vtbl_entries (b, vid);
7705
7706   /* Add the vbase entries for this base.  */
7707   build_vbase_offset_vtbl_entries (binfo, vid);
7708   /* Add the vcall entries for this base.  */
7709   build_vcall_offset_vtbl_entries (binfo, vid);
7710 }
7711
7712 /* Returns the initializers for the vbase offset entries in the vtable
7713    for BINFO (which is part of the class hierarchy dominated by T), in
7714    reverse order.  VBASE_OFFSET_INDEX gives the vtable index
7715    where the next vbase offset will go.  */
7716
7717 static void
7718 build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7719 {
7720   tree vbase;
7721   tree t;
7722   tree non_primary_binfo;
7723
7724   /* If there are no virtual baseclasses, then there is nothing to
7725      do.  */
7726   if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
7727     return;
7728
7729   t = vid->derived;
7730
7731   /* We might be a primary base class.  Go up the inheritance hierarchy
7732      until we find the most derived class of which we are a primary base:
7733      it is the offset of that which we need to use.  */
7734   non_primary_binfo = binfo;
7735   while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7736     {
7737       tree b;
7738
7739       /* If we have reached a virtual base, then it must be a primary
7740          base (possibly multi-level) of vid->binfo, or we wouldn't
7741          have called build_vcall_and_vbase_vtbl_entries for it.  But it
7742          might be a lost primary, so just skip down to vid->binfo.  */
7743       if (BINFO_VIRTUAL_P (non_primary_binfo))
7744         {
7745           non_primary_binfo = vid->binfo;
7746           break;
7747         }
7748
7749       b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7750       if (get_primary_binfo (b) != non_primary_binfo)
7751         break;
7752       non_primary_binfo = b;
7753     }
7754
7755   /* Go through the virtual bases, adding the offsets.  */
7756   for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7757        vbase;
7758        vbase = TREE_CHAIN (vbase))
7759     {
7760       tree b;
7761       tree delta;
7762
7763       if (!BINFO_VIRTUAL_P (vbase))
7764         continue;
7765
7766       /* Find the instance of this virtual base in the complete
7767          object.  */
7768       b = copied_binfo (vbase, binfo);
7769
7770       /* If we've already got an offset for this virtual base, we
7771          don't need another one.  */
7772       if (BINFO_VTABLE_PATH_MARKED (b))
7773         continue;
7774       BINFO_VTABLE_PATH_MARKED (b) = 1;
7775
7776       /* Figure out where we can find this vbase offset.  */
7777       delta = size_binop (MULT_EXPR,
7778                           vid->index,
7779                           convert (ssizetype,
7780                                    TYPE_SIZE_UNIT (vtable_entry_type)));
7781       if (vid->primary_vtbl_p)
7782         BINFO_VPTR_FIELD (b) = delta;
7783
7784       if (binfo != TYPE_BINFO (t))
7785         /* The vbase offset had better be the same.  */
7786         gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
7787
7788       /* The next vbase will come at a more negative offset.  */
7789       vid->index = size_binop (MINUS_EXPR, vid->index,
7790                                ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7791
7792       /* The initializer is the delta from BINFO to this virtual base.
7793          The vbase offsets go in reverse inheritance-graph order, and
7794          we are walking in inheritance graph order so these end up in
7795          the right order.  */
7796       delta = size_diffop_loc (input_location,
7797                            BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
7798
7799       *vid->last_init
7800         = build_tree_list (NULL_TREE,
7801                            fold_build1_loc (input_location, NOP_EXPR,
7802                                         vtable_entry_type,
7803                                         delta));
7804       vid->last_init = &TREE_CHAIN (*vid->last_init);
7805     }
7806 }
7807
7808 /* Adds the initializers for the vcall offset entries in the vtable
7809    for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
7810    to VID->INITS.  */
7811
7812 static void
7813 build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7814 {
7815   /* We only need these entries if this base is a virtual base.  We
7816      compute the indices -- but do not add to the vtable -- when
7817      building the main vtable for a class.  */
7818   if (binfo == TYPE_BINFO (vid->derived)
7819       || (BINFO_VIRTUAL_P (binfo) 
7820           /* If BINFO is RTTI_BINFO, then (since BINFO does not
7821              correspond to VID->DERIVED), we are building a primary
7822              construction virtual table.  Since this is a primary
7823              virtual table, we do not need the vcall offsets for
7824              BINFO.  */
7825           && binfo != vid->rtti_binfo))
7826     {
7827       /* We need a vcall offset for each of the virtual functions in this
7828          vtable.  For example:
7829
7830            class A { virtual void f (); };
7831            class B1 : virtual public A { virtual void f (); };
7832            class B2 : virtual public A { virtual void f (); };
7833            class C: public B1, public B2 { virtual void f (); };
7834
7835          A C object has a primary base of B1, which has a primary base of A.  A
7836          C also has a secondary base of B2, which no longer has a primary base
7837          of A.  So the B2-in-C construction vtable needs a secondary vtable for
7838          A, which will adjust the A* to a B2* to call f.  We have no way of
7839          knowing what (or even whether) this offset will be when we define B2,
7840          so we store this "vcall offset" in the A sub-vtable and look it up in
7841          a "virtual thunk" for B2::f.
7842
7843          We need entries for all the functions in our primary vtable and
7844          in our non-virtual bases' secondary vtables.  */
7845       vid->vbase = binfo;
7846       /* If we are just computing the vcall indices -- but do not need
7847          the actual entries -- not that.  */
7848       if (!BINFO_VIRTUAL_P (binfo))
7849         vid->generate_vcall_entries = false;
7850       /* Now, walk through the non-virtual bases, adding vcall offsets.  */
7851       add_vcall_offset_vtbl_entries_r (binfo, vid);
7852     }
7853 }
7854
7855 /* Build vcall offsets, starting with those for BINFO.  */
7856
7857 static void
7858 add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
7859 {
7860   int i;
7861   tree primary_binfo;
7862   tree base_binfo;
7863
7864   /* Don't walk into virtual bases -- except, of course, for the
7865      virtual base for which we are building vcall offsets.  Any
7866      primary virtual base will have already had its offsets generated
7867      through the recursion in build_vcall_and_vbase_vtbl_entries.  */
7868   if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
7869     return;
7870
7871   /* If BINFO has a primary base, process it first.  */
7872   primary_binfo = get_primary_binfo (binfo);
7873   if (primary_binfo)
7874     add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
7875
7876   /* Add BINFO itself to the list.  */
7877   add_vcall_offset_vtbl_entries_1 (binfo, vid);
7878
7879   /* Scan the non-primary bases of BINFO.  */
7880   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7881     if (base_binfo != primary_binfo)
7882       add_vcall_offset_vtbl_entries_r (base_binfo, vid);
7883 }
7884
7885 /* Called from build_vcall_offset_vtbl_entries_r.  */
7886
7887 static void
7888 add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
7889 {
7890   /* Make entries for the rest of the virtuals.  */
7891   if (abi_version_at_least (2))
7892     {
7893       tree orig_fn;
7894
7895       /* The ABI requires that the methods be processed in declaration
7896          order.  G++ 3.2 used the order in the vtable.  */
7897       for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
7898            orig_fn;
7899            orig_fn = TREE_CHAIN (orig_fn))
7900         if (DECL_VINDEX (orig_fn))
7901           add_vcall_offset (orig_fn, binfo, vid);
7902     }
7903   else
7904     {
7905       tree derived_virtuals;
7906       tree base_virtuals;
7907       tree orig_virtuals;
7908       /* If BINFO is a primary base, the most derived class which has
7909          BINFO as a primary base; otherwise, just BINFO.  */
7910       tree non_primary_binfo;
7911
7912       /* We might be a primary base class.  Go up the inheritance hierarchy
7913          until we find the most derived class of which we are a primary base:
7914          it is the BINFO_VIRTUALS there that we need to consider.  */
7915       non_primary_binfo = binfo;
7916       while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7917         {
7918           tree b;
7919
7920           /* If we have reached a virtual base, then it must be vid->vbase,
7921              because we ignore other virtual bases in
7922              add_vcall_offset_vtbl_entries_r.  In turn, it must be a primary
7923              base (possibly multi-level) of vid->binfo, or we wouldn't
7924              have called build_vcall_and_vbase_vtbl_entries for it.  But it
7925              might be a lost primary, so just skip down to vid->binfo.  */
7926           if (BINFO_VIRTUAL_P (non_primary_binfo))
7927             {
7928               gcc_assert (non_primary_binfo == vid->vbase);
7929               non_primary_binfo = vid->binfo;
7930               break;
7931             }
7932
7933           b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7934           if (get_primary_binfo (b) != non_primary_binfo)
7935             break;
7936           non_primary_binfo = b;
7937         }
7938
7939       if (vid->ctor_vtbl_p)
7940         /* For a ctor vtable we need the equivalent binfo within the hierarchy
7941            where rtti_binfo is the most derived type.  */
7942         non_primary_binfo
7943           = original_binfo (non_primary_binfo, vid->rtti_binfo);
7944
7945       for (base_virtuals = BINFO_VIRTUALS (binfo),
7946              derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
7947              orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
7948            base_virtuals;
7949            base_virtuals = TREE_CHAIN (base_virtuals),
7950              derived_virtuals = TREE_CHAIN (derived_virtuals),
7951              orig_virtuals = TREE_CHAIN (orig_virtuals))
7952         {
7953           tree orig_fn;
7954
7955           /* Find the declaration that originally caused this function to
7956              be present in BINFO_TYPE (binfo).  */
7957           orig_fn = BV_FN (orig_virtuals);
7958
7959           /* When processing BINFO, we only want to generate vcall slots for
7960              function slots introduced in BINFO.  So don't try to generate
7961              one if the function isn't even defined in BINFO.  */
7962           if (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), DECL_CONTEXT (orig_fn)))
7963             continue;
7964
7965           add_vcall_offset (orig_fn, binfo, vid);
7966         }
7967     }
7968 }
7969
7970 /* Add a vcall offset entry for ORIG_FN to the vtable.  */
7971
7972 static void
7973 add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
7974 {
7975   size_t i;
7976   tree vcall_offset;
7977   tree derived_entry;
7978
7979   /* If there is already an entry for a function with the same
7980      signature as FN, then we do not need a second vcall offset.
7981      Check the list of functions already present in the derived
7982      class vtable.  */
7983   for (i = 0; VEC_iterate (tree, vid->fns, i, derived_entry); ++i)
7984     {
7985       if (same_signature_p (derived_entry, orig_fn)
7986           /* We only use one vcall offset for virtual destructors,
7987              even though there are two virtual table entries.  */
7988           || (DECL_DESTRUCTOR_P (derived_entry)
7989               && DECL_DESTRUCTOR_P (orig_fn)))
7990         return;
7991     }
7992
7993   /* If we are building these vcall offsets as part of building
7994      the vtable for the most derived class, remember the vcall
7995      offset.  */
7996   if (vid->binfo == TYPE_BINFO (vid->derived))
7997     {
7998       tree_pair_p elt = VEC_safe_push (tree_pair_s, gc,
7999                                        CLASSTYPE_VCALL_INDICES (vid->derived),
8000                                        NULL);
8001       elt->purpose = orig_fn;
8002       elt->value = vid->index;
8003     }
8004
8005   /* The next vcall offset will be found at a more negative
8006      offset.  */
8007   vid->index = size_binop (MINUS_EXPR, vid->index,
8008                            ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
8009
8010   /* Keep track of this function.  */
8011   VEC_safe_push (tree, gc, vid->fns, orig_fn);
8012
8013   if (vid->generate_vcall_entries)
8014     {
8015       tree base;
8016       tree fn;
8017
8018       /* Find the overriding function.  */
8019       fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
8020       if (fn == error_mark_node)
8021         vcall_offset = build1 (NOP_EXPR, vtable_entry_type,
8022                                integer_zero_node);
8023       else
8024         {
8025           base = TREE_VALUE (fn);
8026
8027           /* The vbase we're working on is a primary base of
8028              vid->binfo.  But it might be a lost primary, so its
8029              BINFO_OFFSET might be wrong, so we just use the
8030              BINFO_OFFSET from vid->binfo.  */
8031           vcall_offset = size_diffop_loc (input_location,
8032                                       BINFO_OFFSET (base),
8033                                       BINFO_OFFSET (vid->binfo));
8034           vcall_offset = fold_build1_loc (input_location,
8035                                       NOP_EXPR, vtable_entry_type,
8036                                       vcall_offset);
8037         }
8038       /* Add the initializer to the vtable.  */
8039       *vid->last_init = build_tree_list (NULL_TREE, vcall_offset);
8040       vid->last_init = &TREE_CHAIN (*vid->last_init);
8041     }
8042 }
8043
8044 /* Return vtbl initializers for the RTTI entries corresponding to the
8045    BINFO's vtable.  The RTTI entries should indicate the object given
8046    by VID->rtti_binfo.  */
8047
8048 static void
8049 build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
8050 {
8051   tree b;
8052   tree t;
8053   tree basetype;
8054   tree offset;
8055   tree decl;
8056   tree init;
8057
8058   basetype = BINFO_TYPE (binfo);
8059   t = BINFO_TYPE (vid->rtti_binfo);
8060
8061   /* To find the complete object, we will first convert to our most
8062      primary base, and then add the offset in the vtbl to that value.  */
8063   b = binfo;
8064   while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
8065          && !BINFO_LOST_PRIMARY_P (b))
8066     {
8067       tree primary_base;
8068
8069       primary_base = get_primary_binfo (b);
8070       gcc_assert (BINFO_PRIMARY_P (primary_base)
8071                   && BINFO_INHERITANCE_CHAIN (primary_base) == b);
8072       b = primary_base;
8073     }
8074   offset = size_diffop_loc (input_location,
8075                         BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
8076
8077   /* The second entry is the address of the typeinfo object.  */
8078   if (flag_rtti)
8079     decl = build_address (get_tinfo_decl (t));
8080   else
8081     decl = integer_zero_node;
8082
8083   /* Convert the declaration to a type that can be stored in the
8084      vtable.  */
8085   init = build_nop (vfunc_ptr_type_node, decl);
8086   *vid->last_init = build_tree_list (NULL_TREE, init);
8087   vid->last_init = &TREE_CHAIN (*vid->last_init);
8088
8089   /* Add the offset-to-top entry.  It comes earlier in the vtable than
8090      the typeinfo entry.  Convert the offset to look like a
8091      function pointer, so that we can put it in the vtable.  */
8092   init = build_nop (vfunc_ptr_type_node, offset);
8093   *vid->last_init = build_tree_list (NULL_TREE, init);
8094   vid->last_init = &TREE_CHAIN (*vid->last_init);
8095 }
8096
8097 /* Fold a OBJ_TYPE_REF expression to the address of a function.
8098    KNOWN_TYPE carries the true type of OBJ_TYPE_REF_OBJECT(REF).  */
8099
8100 tree
8101 cp_fold_obj_type_ref (tree ref, tree known_type)
8102 {
8103   HOST_WIDE_INT index = tree_low_cst (OBJ_TYPE_REF_TOKEN (ref), 1);
8104   HOST_WIDE_INT i = 0;
8105   tree v = BINFO_VIRTUALS (TYPE_BINFO (known_type));
8106   tree fndecl;
8107
8108   while (i != index)
8109     {
8110       i += (TARGET_VTABLE_USES_DESCRIPTORS
8111             ? TARGET_VTABLE_USES_DESCRIPTORS : 1);
8112       v = TREE_CHAIN (v);
8113     }
8114
8115   fndecl = BV_FN (v);
8116
8117 #ifdef ENABLE_CHECKING
8118   gcc_assert (tree_int_cst_equal (OBJ_TYPE_REF_TOKEN (ref),
8119                                   DECL_VINDEX (fndecl)));
8120 #endif
8121
8122   cgraph_node (fndecl)->local.vtable_method = true;
8123
8124   return build_address (fndecl);
8125 }
8126
8127 #include "gt-cp-class.h"