OSDN Git Service

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