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