OSDN Git Service

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