OSDN Git Service

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