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