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