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