* gfortran.dg/debug/pr46756.f: Remove XFAIL for AIX.
[official-gcc.git] / gcc / cp / class.c
blobb123932599153b65a7965745479a859274f098cd
1 /* Functions related to building classes and their related objects.
2 Copyright (C) 1987-2015 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
22 /* High-level class interface. */
24 #include "config.h"
25 #include "system.h"
26 #include "coretypes.h"
27 #include "target.h"
28 #include "tree.h"
29 #include "cp-tree.h"
30 #include "stringpool.h"
31 #include "cgraph.h"
32 #include "alias.h"
33 #include "stor-layout.h"
34 #include "attribs.h"
35 #include "flags.h"
36 #include "toplev.h"
37 #include "convert.h"
38 #include "dumpfile.h"
39 #include "gimplify.h"
41 /* The number of nested classes being processed. If we are not in the
42 scope of any class, this is zero. */
44 int current_class_depth;
46 /* In order to deal with nested classes, we keep a stack of classes.
47 The topmost entry is the innermost class, and is the entry at index
48 CURRENT_CLASS_DEPTH */
50 typedef struct class_stack_node {
51 /* The name of the class. */
52 tree name;
54 /* The _TYPE node for the class. */
55 tree type;
57 /* The access specifier pending for new declarations in the scope of
58 this class. */
59 tree access;
61 /* If were defining TYPE, the names used in this class. */
62 splay_tree names_used;
64 /* Nonzero if this class is no longer open, because of a call to
65 push_to_top_level. */
66 size_t hidden;
67 }* class_stack_node_t;
69 struct vtbl_init_data
71 /* The base for which we're building initializers. */
72 tree binfo;
73 /* The type of the most-derived type. */
74 tree derived;
75 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
76 unless ctor_vtbl_p is true. */
77 tree rtti_binfo;
78 /* The negative-index vtable initializers built up so far. These
79 are in order from least negative index to most negative index. */
80 vec<constructor_elt, va_gc> *inits;
81 /* The binfo for the virtual base for which we're building
82 vcall offset initializers. */
83 tree vbase;
84 /* The functions in vbase for which we have already provided vcall
85 offsets. */
86 vec<tree, va_gc> *fns;
87 /* The vtable index of the next vcall or vbase offset. */
88 tree index;
89 /* Nonzero if we are building the initializer for the primary
90 vtable. */
91 int primary_vtbl_p;
92 /* Nonzero if we are building the initializer for a construction
93 vtable. */
94 int ctor_vtbl_p;
95 /* True when adding vcall offset entries to the vtable. False when
96 merely computing the indices. */
97 bool generate_vcall_entries;
100 /* The type of a function passed to walk_subobject_offsets. */
101 typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
103 /* The stack itself. This is a dynamically resized array. The
104 number of elements allocated is CURRENT_CLASS_STACK_SIZE. */
105 static int current_class_stack_size;
106 static class_stack_node_t current_class_stack;
108 /* The size of the largest empty class seen in this translation unit. */
109 static GTY (()) tree sizeof_biggest_empty_class;
111 /* An array of all local classes present in this translation unit, in
112 declaration order. */
113 vec<tree, va_gc> *local_classes;
115 static tree get_vfield_name (tree);
116 static void finish_struct_anon (tree);
117 static tree get_vtable_name (tree);
118 static void get_basefndecls (tree, tree, vec<tree> *);
119 static int build_primary_vtable (tree, tree);
120 static int build_secondary_vtable (tree);
121 static void finish_vtbls (tree);
122 static void modify_vtable_entry (tree, tree, tree, tree, tree *);
123 static void finish_struct_bits (tree);
124 static int alter_access (tree, tree, tree);
125 static void handle_using_decl (tree, tree);
126 static tree dfs_modify_vtables (tree, void *);
127 static tree modify_all_vtables (tree, tree);
128 static void determine_primary_bases (tree);
129 static void finish_struct_methods (tree);
130 static void maybe_warn_about_overly_private_class (tree);
131 static int method_name_cmp (const void *, const void *);
132 static int resort_method_name_cmp (const void *, const void *);
133 static void add_implicitly_declared_members (tree, tree*, int, int);
134 static tree fixed_type_or_null (tree, int *, int *);
135 static tree build_simple_base_path (tree expr, tree binfo);
136 static tree build_vtbl_ref_1 (tree, tree);
137 static void build_vtbl_initializer (tree, tree, tree, tree, int *,
138 vec<constructor_elt, va_gc> **);
139 static int count_fields (tree);
140 static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
141 static void insert_into_classtype_sorted_fields (tree, tree, int);
142 static bool check_bitfield_decl (tree);
143 static void check_field_decl (tree, tree, int *, int *, int *);
144 static void check_field_decls (tree, tree *, int *, int *);
145 static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
146 static void build_base_fields (record_layout_info, splay_tree, tree *);
147 static void check_methods (tree);
148 static void remove_zero_width_bit_fields (tree);
149 static bool accessible_nvdtor_p (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, va_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, va_gc> **);
184 static void dfs_accumulate_vtbl_inits (tree, tree, tree, tree, tree,
185 vec<constructor_elt, va_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, va_gc> **,
195 tree *);
196 static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
197 static tree dfs_fixup_binfo_vtbls (tree, void *);
198 static int record_subobject_offset (tree, tree, splay_tree);
199 static int check_subobject_offset (tree, tree, splay_tree);
200 static int walk_subobject_offsets (tree, subobject_offset_fn,
201 tree, splay_tree, tree, int);
202 static void record_subobject_offsets (tree, tree, splay_tree, bool);
203 static int layout_conflict_p (tree, tree, splay_tree, int);
204 static int splay_tree_compare_integer_csts (splay_tree_key k1,
205 splay_tree_key k2);
206 static void warn_about_ambiguous_bases (tree);
207 static bool type_requires_array_cookie (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);
213 /* Variables shared between class.c and call.c. */
215 int n_vtables = 0;
216 int n_vtable_entries = 0;
217 int n_vtable_searches = 0;
218 int n_vtable_elems = 0;
219 int n_convert_harshness = 0;
220 int n_compute_conversion_costs = 0;
221 int n_inner_fields_searched = 0;
223 /* Convert to or from a base subobject. EXPR is an expression of type
224 `A' or `A*', an expression of type `B' or `B*' is returned. To
225 convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
226 the B base instance within A. To convert base A to derived B, CODE
227 is MINUS_EXPR and BINFO is the binfo for the A instance within B.
228 In this latter case, A must not be a morally virtual base of B.
229 NONNULL is true if EXPR is known to be non-NULL (this is only
230 needed when EXPR is of pointer type). CV qualifiers are preserved
231 from EXPR. */
233 tree
234 build_base_path (enum tree_code code,
235 tree expr,
236 tree binfo,
237 int nonnull,
238 tsubst_flags_t complain)
240 tree v_binfo = NULL_TREE;
241 tree d_binfo = NULL_TREE;
242 tree probe;
243 tree offset;
244 tree target_type;
245 tree null_test = NULL;
246 tree ptr_target_type;
247 int fixed_type_p;
248 int want_pointer = TYPE_PTR_P (TREE_TYPE (expr));
249 bool has_empty = false;
250 bool virtual_access;
251 bool rvalue = false;
253 if (expr == error_mark_node || binfo == error_mark_node || !binfo)
254 return error_mark_node;
256 for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
258 d_binfo = probe;
259 if (is_empty_class (BINFO_TYPE (probe)))
260 has_empty = true;
261 if (!v_binfo && BINFO_VIRTUAL_P (probe))
262 v_binfo = probe;
265 probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
266 if (want_pointer)
267 probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
269 if (code == PLUS_EXPR
270 && !SAME_BINFO_TYPE_P (BINFO_TYPE (d_binfo), probe))
272 /* This can happen when adjust_result_of_qualified_name_lookup can't
273 find a unique base binfo in a call to a member function. We
274 couldn't give the diagnostic then since we might have been calling
275 a static member function, so we do it now. */
276 if (complain & tf_error)
278 tree base = lookup_base (probe, BINFO_TYPE (d_binfo),
279 ba_unique, NULL, complain);
280 gcc_assert (base == error_mark_node);
282 return error_mark_node;
285 gcc_assert ((code == MINUS_EXPR
286 && SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), probe))
287 || code == PLUS_EXPR);
289 if (binfo == d_binfo)
290 /* Nothing to do. */
291 return expr;
293 if (code == MINUS_EXPR && v_binfo)
295 if (complain & tf_error)
297 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (v_binfo)))
299 if (want_pointer)
300 error ("cannot convert from pointer to base class %qT to "
301 "pointer to derived class %qT because the base is "
302 "virtual", BINFO_TYPE (binfo), BINFO_TYPE (d_binfo));
303 else
304 error ("cannot convert from base class %qT to derived "
305 "class %qT because the base is virtual",
306 BINFO_TYPE (binfo), BINFO_TYPE (d_binfo));
308 else
310 if (want_pointer)
311 error ("cannot convert from pointer to base class %qT to "
312 "pointer to derived class %qT via virtual base %qT",
313 BINFO_TYPE (binfo), BINFO_TYPE (d_binfo),
314 BINFO_TYPE (v_binfo));
315 else
316 error ("cannot convert from base class %qT to derived "
317 "class %qT via virtual base %qT", BINFO_TYPE (binfo),
318 BINFO_TYPE (d_binfo), BINFO_TYPE (v_binfo));
321 return error_mark_node;
324 if (!want_pointer)
326 rvalue = !real_lvalue_p (expr);
327 /* This must happen before the call to save_expr. */
328 expr = cp_build_addr_expr (expr, complain);
330 else
331 expr = mark_rvalue_use (expr);
333 offset = BINFO_OFFSET (binfo);
334 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
335 target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (d_binfo);
336 /* TARGET_TYPE has been extracted from BINFO, and, is therefore always
337 cv-unqualified. Extract the cv-qualifiers from EXPR so that the
338 expression returned matches the input. */
339 target_type = cp_build_qualified_type
340 (target_type, cp_type_quals (TREE_TYPE (TREE_TYPE (expr))));
341 ptr_target_type = build_pointer_type (target_type);
343 /* Do we need to look in the vtable for the real offset? */
344 virtual_access = (v_binfo && fixed_type_p <= 0);
346 /* Don't bother with the calculations inside sizeof; they'll ICE if the
347 source type is incomplete and the pointer value doesn't matter. In a
348 template (even in instantiate_non_dependent_expr), we don't have vtables
349 set up properly yet, and the value doesn't matter there either; we're
350 just interested in the result of overload resolution. */
351 if (cp_unevaluated_operand != 0
352 || in_template_function ())
354 expr = build_nop (ptr_target_type, expr);
355 goto indout;
358 /* If we're in an NSDMI, we don't have the full constructor context yet
359 that we need for converting to a virtual base, so just build a stub
360 CONVERT_EXPR and expand it later in bot_replace. */
361 if (virtual_access && fixed_type_p < 0
362 && current_scope () != current_function_decl)
364 expr = build1 (CONVERT_EXPR, ptr_target_type, expr);
365 CONVERT_EXPR_VBASE_PATH (expr) = true;
366 goto indout;
369 /* Do we need to check for a null pointer? */
370 if (want_pointer && !nonnull)
372 /* If we know the conversion will not actually change the value
373 of EXPR, then we can avoid testing the expression for NULL.
374 We have to avoid generating a COMPONENT_REF for a base class
375 field, because other parts of the compiler know that such
376 expressions are always non-NULL. */
377 if (!virtual_access && integer_zerop (offset))
378 return build_nop (ptr_target_type, expr);
379 null_test = error_mark_node;
382 /* Protect against multiple evaluation if necessary. */
383 if (TREE_SIDE_EFFECTS (expr) && (null_test || virtual_access))
384 expr = save_expr (expr);
386 /* Now that we've saved expr, build the real null test. */
387 if (null_test)
389 tree zero = cp_convert (TREE_TYPE (expr), nullptr_node, complain);
390 null_test = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
391 expr, zero);
394 /* If this is a simple base reference, express it as a COMPONENT_REF. */
395 if (code == PLUS_EXPR && !virtual_access
396 /* We don't build base fields for empty bases, and they aren't very
397 interesting to the optimizers anyway. */
398 && !has_empty)
400 expr = cp_build_indirect_ref (expr, RO_NULL, complain);
401 expr = build_simple_base_path (expr, binfo);
402 if (rvalue)
403 expr = move (expr);
404 if (want_pointer)
405 expr = build_address (expr);
406 target_type = TREE_TYPE (expr);
407 goto out;
410 if (virtual_access)
412 /* Going via virtual base V_BINFO. We need the static offset
413 from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
414 V_BINFO. That offset is an entry in D_BINFO's vtable. */
415 tree v_offset;
417 if (fixed_type_p < 0 && in_base_initializer)
419 /* In a base member initializer, we cannot rely on the
420 vtable being set up. We have to indirect via the
421 vtt_parm. */
422 tree t;
424 t = TREE_TYPE (TYPE_VFIELD (current_class_type));
425 t = build_pointer_type (t);
426 v_offset = convert (t, current_vtt_parm);
427 v_offset = cp_build_indirect_ref (v_offset, RO_NULL, complain);
429 else
431 tree t = expr;
432 if ((flag_sanitize & SANITIZE_VPTR) && fixed_type_p == 0)
434 t = cp_ubsan_maybe_instrument_cast_to_vbase (input_location,
435 probe, expr);
436 if (t == NULL_TREE)
437 t = expr;
439 v_offset = build_vfield_ref (cp_build_indirect_ref (t, RO_NULL,
440 complain),
441 TREE_TYPE (TREE_TYPE (expr)));
444 if (v_offset == error_mark_node)
445 return error_mark_node;
447 v_offset = fold_build_pointer_plus (v_offset, BINFO_VPTR_FIELD (v_binfo));
448 v_offset = build1 (NOP_EXPR,
449 build_pointer_type (ptrdiff_type_node),
450 v_offset);
451 v_offset = cp_build_indirect_ref (v_offset, RO_NULL, complain);
452 TREE_CONSTANT (v_offset) = 1;
454 offset = convert_to_integer (ptrdiff_type_node,
455 size_diffop_loc (input_location, offset,
456 BINFO_OFFSET (v_binfo)));
458 if (!integer_zerop (offset))
459 v_offset = build2 (code, ptrdiff_type_node, v_offset, offset);
461 if (fixed_type_p < 0)
462 /* Negative fixed_type_p means this is a constructor or destructor;
463 virtual base layout is fixed in in-charge [cd]tors, but not in
464 base [cd]tors. */
465 offset = build3 (COND_EXPR, ptrdiff_type_node,
466 build2 (EQ_EXPR, boolean_type_node,
467 current_in_charge_parm, integer_zero_node),
468 v_offset,
469 convert_to_integer (ptrdiff_type_node,
470 BINFO_OFFSET (binfo)));
471 else
472 offset = v_offset;
475 if (want_pointer)
476 target_type = ptr_target_type;
478 expr = build1 (NOP_EXPR, ptr_target_type, expr);
480 if (!integer_zerop (offset))
482 offset = fold_convert (sizetype, offset);
483 if (code == MINUS_EXPR)
484 offset = fold_build1_loc (input_location, NEGATE_EXPR, sizetype, offset);
485 expr = fold_build_pointer_plus (expr, offset);
487 else
488 null_test = NULL;
490 indout:
491 if (!want_pointer)
493 expr = cp_build_indirect_ref (expr, RO_NULL, complain);
494 if (rvalue)
495 expr = move (expr);
498 out:
499 if (null_test)
500 expr = fold_build3_loc (input_location, COND_EXPR, target_type, null_test, expr,
501 build_zero_cst (target_type));
503 return expr;
506 /* Subroutine of build_base_path; EXPR and BINFO are as in that function.
507 Perform a derived-to-base conversion by recursively building up a
508 sequence of COMPONENT_REFs to the appropriate base fields. */
510 static tree
511 build_simple_base_path (tree expr, tree binfo)
513 tree type = BINFO_TYPE (binfo);
514 tree d_binfo = BINFO_INHERITANCE_CHAIN (binfo);
515 tree field;
517 if (d_binfo == NULL_TREE)
519 tree temp;
521 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (expr)) == type);
523 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x'
524 into `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only
525 an lvalue in the front end; only _DECLs and _REFs are lvalues
526 in the back end. */
527 temp = unary_complex_lvalue (ADDR_EXPR, expr);
528 if (temp)
529 expr = cp_build_indirect_ref (temp, RO_NULL, tf_warning_or_error);
531 return expr;
534 /* Recurse. */
535 expr = build_simple_base_path (expr, d_binfo);
537 for (field = TYPE_FIELDS (BINFO_TYPE (d_binfo));
538 field; field = DECL_CHAIN (field))
539 /* Is this the base field created by build_base_field? */
540 if (TREE_CODE (field) == FIELD_DECL
541 && DECL_FIELD_IS_BASE (field)
542 && TREE_TYPE (field) == type
543 /* If we're looking for a field in the most-derived class,
544 also check the field offset; we can have two base fields
545 of the same type if one is an indirect virtual base and one
546 is a direct non-virtual base. */
547 && (BINFO_INHERITANCE_CHAIN (d_binfo)
548 || tree_int_cst_equal (byte_position (field),
549 BINFO_OFFSET (binfo))))
551 /* We don't use build_class_member_access_expr here, as that
552 has unnecessary checks, and more importantly results in
553 recursive calls to dfs_walk_once. */
554 int type_quals = cp_type_quals (TREE_TYPE (expr));
556 expr = build3 (COMPONENT_REF,
557 cp_build_qualified_type (type, type_quals),
558 expr, field, NULL_TREE);
559 expr = fold_if_not_in_template (expr);
561 /* Mark the expression const or volatile, as appropriate.
562 Even though we've dealt with the type above, we still have
563 to mark the expression itself. */
564 if (type_quals & TYPE_QUAL_CONST)
565 TREE_READONLY (expr) = 1;
566 if (type_quals & TYPE_QUAL_VOLATILE)
567 TREE_THIS_VOLATILE (expr) = 1;
569 return expr;
572 /* Didn't find the base field?!? */
573 gcc_unreachable ();
576 /* Convert OBJECT to the base TYPE. OBJECT is an expression whose
577 type is a class type or a pointer to a class type. In the former
578 case, TYPE is also a class type; in the latter it is another
579 pointer type. If CHECK_ACCESS is true, an error message is emitted
580 if TYPE is inaccessible. If OBJECT has pointer type, the value is
581 assumed to be non-NULL. */
583 tree
584 convert_to_base (tree object, tree type, bool check_access, bool nonnull,
585 tsubst_flags_t complain)
587 tree binfo;
588 tree object_type;
590 if (TYPE_PTR_P (TREE_TYPE (object)))
592 object_type = TREE_TYPE (TREE_TYPE (object));
593 type = TREE_TYPE (type);
595 else
596 object_type = TREE_TYPE (object);
598 binfo = lookup_base (object_type, type, check_access ? ba_check : ba_unique,
599 NULL, complain);
600 if (!binfo || binfo == error_mark_node)
601 return error_mark_node;
603 return build_base_path (PLUS_EXPR, object, binfo, nonnull, complain);
606 /* EXPR is an expression with unqualified class type. BASE is a base
607 binfo of that class type. Returns EXPR, converted to the BASE
608 type. This function assumes that EXPR is the most derived class;
609 therefore virtual bases can be found at their static offsets. */
611 tree
612 convert_to_base_statically (tree expr, tree base)
614 tree expr_type;
616 expr_type = TREE_TYPE (expr);
617 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (base), expr_type))
619 /* If this is a non-empty base, use a COMPONENT_REF. */
620 if (!is_empty_class (BINFO_TYPE (base)))
621 return build_simple_base_path (expr, base);
623 /* We use fold_build2 and fold_convert below to simplify the trees
624 provided to the optimizers. It is not safe to call these functions
625 when processing a template because they do not handle C++-specific
626 trees. */
627 gcc_assert (!processing_template_decl);
628 expr = cp_build_addr_expr (expr, tf_warning_or_error);
629 if (!integer_zerop (BINFO_OFFSET (base)))
630 expr = fold_build_pointer_plus_loc (input_location,
631 expr, BINFO_OFFSET (base));
632 expr = fold_convert (build_pointer_type (BINFO_TYPE (base)), expr);
633 expr = build_fold_indirect_ref_loc (input_location, expr);
636 return expr;
640 tree
641 build_vfield_ref (tree datum, tree type)
643 tree vfield, vcontext;
645 if (datum == error_mark_node
646 /* Can happen in case of duplicate base types (c++/59082). */
647 || !TYPE_VFIELD (type))
648 return error_mark_node;
650 /* First, convert to the requested type. */
651 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
652 datum = convert_to_base (datum, type, /*check_access=*/false,
653 /*nonnull=*/true, tf_warning_or_error);
655 /* Second, the requested type may not be the owner of its own vptr.
656 If not, convert to the base class that owns it. We cannot use
657 convert_to_base here, because VCONTEXT may appear more than once
658 in the inheritance hierarchy of TYPE, and thus direct conversion
659 between the types may be ambiguous. Following the path back up
660 one step at a time via primary bases avoids the problem. */
661 vfield = TYPE_VFIELD (type);
662 vcontext = DECL_CONTEXT (vfield);
663 while (!same_type_ignoring_top_level_qualifiers_p (vcontext, type))
665 datum = build_simple_base_path (datum, CLASSTYPE_PRIMARY_BINFO (type));
666 type = TREE_TYPE (datum);
669 return build3 (COMPONENT_REF, TREE_TYPE (vfield), datum, vfield, NULL_TREE);
672 /* Given an object INSTANCE, return an expression which yields the
673 vtable element corresponding to INDEX. There are many special
674 cases for INSTANCE which we take care of here, mainly to avoid
675 creating extra tree nodes when we don't have to. */
677 static tree
678 build_vtbl_ref_1 (tree instance, tree idx)
680 tree aref;
681 tree vtbl = NULL_TREE;
683 /* Try to figure out what a reference refers to, and
684 access its virtual function table directly. */
686 int cdtorp = 0;
687 tree fixed_type = fixed_type_or_null (instance, NULL, &cdtorp);
689 tree basetype = non_reference (TREE_TYPE (instance));
691 if (fixed_type && !cdtorp)
693 tree binfo = lookup_base (fixed_type, basetype,
694 ba_unique, NULL, tf_none);
695 if (binfo && binfo != error_mark_node)
696 vtbl = unshare_expr (BINFO_VTABLE (binfo));
699 if (!vtbl)
700 vtbl = build_vfield_ref (instance, basetype);
702 aref = build_array_ref (input_location, vtbl, idx);
703 TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
705 return aref;
708 tree
709 build_vtbl_ref (tree instance, tree idx)
711 tree aref = build_vtbl_ref_1 (instance, idx);
713 return aref;
716 /* Given a stable object pointer INSTANCE_PTR, return an expression which
717 yields a function pointer corresponding to vtable element INDEX. */
719 tree
720 build_vfn_ref (tree instance_ptr, tree idx)
722 tree aref;
724 aref = build_vtbl_ref_1 (cp_build_indirect_ref (instance_ptr, RO_NULL,
725 tf_warning_or_error),
726 idx);
728 /* When using function descriptors, the address of the
729 vtable entry is treated as a function pointer. */
730 if (TARGET_VTABLE_USES_DESCRIPTORS)
731 aref = build1 (NOP_EXPR, TREE_TYPE (aref),
732 cp_build_addr_expr (aref, tf_warning_or_error));
734 /* Remember this as a method reference, for later devirtualization. */
735 aref = build3 (OBJ_TYPE_REF, TREE_TYPE (aref), aref, instance_ptr, idx);
737 return aref;
740 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
741 for the given TYPE. */
743 static tree
744 get_vtable_name (tree type)
746 return mangle_vtbl_for_type (type);
749 /* DECL is an entity associated with TYPE, like a virtual table or an
750 implicitly generated constructor. Determine whether or not DECL
751 should have external or internal linkage at the object file
752 level. This routine does not deal with COMDAT linkage and other
753 similar complexities; it simply sets TREE_PUBLIC if it possible for
754 entities in other translation units to contain copies of DECL, in
755 the abstract. */
757 void
758 set_linkage_according_to_type (tree /*type*/, tree decl)
760 TREE_PUBLIC (decl) = 1;
761 determine_visibility (decl);
764 /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
765 (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
766 Use NAME for the name of the vtable, and VTABLE_TYPE for its type. */
768 static tree
769 build_vtable (tree class_type, tree name, tree vtable_type)
771 tree decl;
773 decl = build_lang_decl (VAR_DECL, name, vtable_type);
774 /* vtable names are already mangled; give them their DECL_ASSEMBLER_NAME
775 now to avoid confusion in mangle_decl. */
776 SET_DECL_ASSEMBLER_NAME (decl, name);
777 DECL_CONTEXT (decl) = class_type;
778 DECL_ARTIFICIAL (decl) = 1;
779 TREE_STATIC (decl) = 1;
780 TREE_READONLY (decl) = 1;
781 DECL_VIRTUAL_P (decl) = 1;
782 DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
783 DECL_USER_ALIGN (decl) = true;
784 DECL_VTABLE_OR_VTT_P (decl) = 1;
785 set_linkage_according_to_type (class_type, decl);
786 /* The vtable has not been defined -- yet. */
787 DECL_EXTERNAL (decl) = 1;
788 DECL_NOT_REALLY_EXTERN (decl) = 1;
790 /* Mark the VAR_DECL node representing the vtable itself as a
791 "gratuitous" one, thereby forcing dwarfout.c to ignore it. It
792 is rather important that such things be ignored because any
793 effort to actually generate DWARF for them will run into
794 trouble when/if we encounter code like:
796 #pragma interface
797 struct S { virtual void member (); };
799 because the artificial declaration of the vtable itself (as
800 manufactured by the g++ front end) will say that the vtable is
801 a static member of `S' but only *after* the debug output for
802 the definition of `S' has already been output. This causes
803 grief because the DWARF entry for the definition of the vtable
804 will try to refer back to an earlier *declaration* of the
805 vtable as a static member of `S' and there won't be one. We
806 might be able to arrange to have the "vtable static member"
807 attached to the member list for `S' before the debug info for
808 `S' get written (which would solve the problem) but that would
809 require more intrusive changes to the g++ front end. */
810 DECL_IGNORED_P (decl) = 1;
812 return decl;
815 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
816 or even complete. If this does not exist, create it. If COMPLETE is
817 nonzero, then complete the definition of it -- that will render it
818 impossible to actually build the vtable, but is useful to get at those
819 which are known to exist in the runtime. */
821 tree
822 get_vtable_decl (tree type, int complete)
824 tree decl;
826 if (CLASSTYPE_VTABLES (type))
827 return CLASSTYPE_VTABLES (type);
829 decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
830 CLASSTYPE_VTABLES (type) = decl;
832 if (complete)
834 DECL_EXTERNAL (decl) = 1;
835 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
838 return decl;
841 /* Build the primary virtual function table for TYPE. If BINFO is
842 non-NULL, build the vtable starting with the initial approximation
843 that it is the same as the one which is the head of the association
844 list. Returns a nonzero value if a new vtable is actually
845 created. */
847 static int
848 build_primary_vtable (tree binfo, tree type)
850 tree decl;
851 tree virtuals;
853 decl = get_vtable_decl (type, /*complete=*/0);
855 if (binfo)
857 if (BINFO_NEW_VTABLE_MARKED (binfo))
858 /* We have already created a vtable for this base, so there's
859 no need to do it again. */
860 return 0;
862 virtuals = copy_list (BINFO_VIRTUALS (binfo));
863 TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
864 DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
865 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
867 else
869 gcc_assert (TREE_TYPE (decl) == vtbl_type_node);
870 virtuals = NULL_TREE;
873 if (GATHER_STATISTICS)
875 n_vtables += 1;
876 n_vtable_elems += list_length (virtuals);
879 /* Initialize the association list for this type, based
880 on our first approximation. */
881 BINFO_VTABLE (TYPE_BINFO (type)) = decl;
882 BINFO_VIRTUALS (TYPE_BINFO (type)) = virtuals;
883 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type));
884 return 1;
887 /* Give BINFO a new virtual function table which is initialized
888 with a skeleton-copy of its original initialization. The only
889 entry that changes is the `delta' entry, so we can really
890 share a lot of structure.
892 FOR_TYPE is the most derived type which caused this table to
893 be needed.
895 Returns nonzero if we haven't met BINFO before.
897 The order in which vtables are built (by calling this function) for
898 an object must remain the same, otherwise a binary incompatibility
899 can result. */
901 static int
902 build_secondary_vtable (tree binfo)
904 if (BINFO_NEW_VTABLE_MARKED (binfo))
905 /* We already created a vtable for this base. There's no need to
906 do it again. */
907 return 0;
909 /* Remember that we've created a vtable for this BINFO, so that we
910 don't try to do so again. */
911 SET_BINFO_NEW_VTABLE_MARKED (binfo);
913 /* Make fresh virtual list, so we can smash it later. */
914 BINFO_VIRTUALS (binfo) = copy_list (BINFO_VIRTUALS (binfo));
916 /* Secondary vtables are laid out as part of the same structure as
917 the primary vtable. */
918 BINFO_VTABLE (binfo) = NULL_TREE;
919 return 1;
922 /* Create a new vtable for BINFO which is the hierarchy dominated by
923 T. Return nonzero if we actually created a new vtable. */
925 static int
926 make_new_vtable (tree t, tree binfo)
928 if (binfo == TYPE_BINFO (t))
929 /* In this case, it is *type*'s vtable we are modifying. We start
930 with the approximation that its vtable is that of the
931 immediate base class. */
932 return build_primary_vtable (binfo, t);
933 else
934 /* This is our very own copy of `basetype' to play with. Later,
935 we will fill in all the virtual functions that override the
936 virtual functions in these base classes which are not defined
937 by the current type. */
938 return build_secondary_vtable (binfo);
941 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
942 (which is in the hierarchy dominated by T) list FNDECL as its
943 BV_FN. DELTA is the required constant adjustment from the `this'
944 pointer where the vtable entry appears to the `this' required when
945 the function is actually called. */
947 static void
948 modify_vtable_entry (tree t,
949 tree binfo,
950 tree fndecl,
951 tree delta,
952 tree *virtuals)
954 tree v;
956 v = *virtuals;
958 if (fndecl != BV_FN (v)
959 || !tree_int_cst_equal (delta, BV_DELTA (v)))
961 /* We need a new vtable for BINFO. */
962 if (make_new_vtable (t, binfo))
964 /* If we really did make a new vtable, we also made a copy
965 of the BINFO_VIRTUALS list. Now, we have to find the
966 corresponding entry in that list. */
967 *virtuals = BINFO_VIRTUALS (binfo);
968 while (BV_FN (*virtuals) != BV_FN (v))
969 *virtuals = TREE_CHAIN (*virtuals);
970 v = *virtuals;
973 BV_DELTA (v) = delta;
974 BV_VCALL_INDEX (v) = NULL_TREE;
975 BV_FN (v) = fndecl;
980 /* Add method METHOD to class TYPE. If USING_DECL is non-null, it is
981 the USING_DECL naming METHOD. Returns true if the method could be
982 added to the method vec. */
984 bool
985 add_method (tree type, tree method, tree using_decl)
987 unsigned slot;
988 tree overload;
989 bool template_conv_p = false;
990 bool conv_p;
991 vec<tree, va_gc> *method_vec;
992 bool complete_p;
993 bool insert_p = false;
994 tree current_fns;
995 tree fns;
997 if (method == error_mark_node)
998 return false;
1000 complete_p = COMPLETE_TYPE_P (type);
1001 conv_p = DECL_CONV_FN_P (method);
1002 if (conv_p)
1003 template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL
1004 && DECL_TEMPLATE_CONV_FN_P (method));
1006 method_vec = CLASSTYPE_METHOD_VEC (type);
1007 if (!method_vec)
1009 /* Make a new method vector. We start with 8 entries. We must
1010 allocate at least two (for constructors and destructors), and
1011 we're going to end up with an assignment operator at some
1012 point as well. */
1013 vec_alloc (method_vec, 8);
1014 /* Create slots for constructors and destructors. */
1015 method_vec->quick_push (NULL_TREE);
1016 method_vec->quick_push (NULL_TREE);
1017 CLASSTYPE_METHOD_VEC (type) = method_vec;
1020 /* Maintain TYPE_HAS_USER_CONSTRUCTOR, etc. */
1021 grok_special_member_properties (method);
1023 /* Constructors and destructors go in special slots. */
1024 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
1025 slot = CLASSTYPE_CONSTRUCTOR_SLOT;
1026 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
1028 slot = CLASSTYPE_DESTRUCTOR_SLOT;
1030 if (TYPE_FOR_JAVA (type))
1032 if (!DECL_ARTIFICIAL (method))
1033 error ("Java class %qT cannot have a destructor", type);
1034 else if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
1035 error ("Java class %qT cannot have an implicit non-trivial "
1036 "destructor",
1037 type);
1040 else
1042 tree m;
1044 insert_p = true;
1045 /* See if we already have an entry with this name. */
1046 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1047 vec_safe_iterate (method_vec, slot, &m);
1048 ++slot)
1050 m = OVL_CURRENT (m);
1051 if (template_conv_p)
1053 if (TREE_CODE (m) == TEMPLATE_DECL
1054 && DECL_TEMPLATE_CONV_FN_P (m))
1055 insert_p = false;
1056 break;
1058 if (conv_p && !DECL_CONV_FN_P (m))
1059 break;
1060 if (DECL_NAME (m) == DECL_NAME (method))
1062 insert_p = false;
1063 break;
1065 if (complete_p
1066 && !DECL_CONV_FN_P (m)
1067 && DECL_NAME (m) > DECL_NAME (method))
1068 break;
1071 current_fns = insert_p ? NULL_TREE : (*method_vec)[slot];
1073 /* Check to see if we've already got this method. */
1074 for (fns = current_fns; fns; fns = OVL_NEXT (fns))
1076 tree fn = OVL_CURRENT (fns);
1077 tree fn_type;
1078 tree method_type;
1079 tree parms1;
1080 tree parms2;
1082 if (TREE_CODE (fn) != TREE_CODE (method))
1083 continue;
1085 /* [over.load] Member function declarations with the
1086 same name and the same parameter types cannot be
1087 overloaded if any of them is a static member
1088 function declaration.
1090 [over.load] Member function declarations with the same name and
1091 the same parameter-type-list as well as member function template
1092 declarations with the same name, the same parameter-type-list, and
1093 the same template parameter lists cannot be overloaded if any of
1094 them, but not all, have a ref-qualifier.
1096 [namespace.udecl] When a using-declaration brings names
1097 from a base class into a derived class scope, member
1098 functions in the derived class override and/or hide member
1099 functions with the same name and parameter types in a base
1100 class (rather than conflicting). */
1101 fn_type = TREE_TYPE (fn);
1102 method_type = TREE_TYPE (method);
1103 parms1 = TYPE_ARG_TYPES (fn_type);
1104 parms2 = TYPE_ARG_TYPES (method_type);
1106 /* Compare the quals on the 'this' parm. Don't compare
1107 the whole types, as used functions are treated as
1108 coming from the using class in overload resolution. */
1109 if (! DECL_STATIC_FUNCTION_P (fn)
1110 && ! DECL_STATIC_FUNCTION_P (method)
1111 /* Either both or neither need to be ref-qualified for
1112 differing quals to allow overloading. */
1113 && (FUNCTION_REF_QUALIFIED (fn_type)
1114 == FUNCTION_REF_QUALIFIED (method_type))
1115 && (type_memfn_quals (fn_type) != type_memfn_quals (method_type)
1116 || type_memfn_rqual (fn_type) != type_memfn_rqual (method_type)))
1117 continue;
1119 /* For templates, the return type and template parameters
1120 must be identical. */
1121 if (TREE_CODE (fn) == TEMPLATE_DECL
1122 && (!same_type_p (TREE_TYPE (fn_type),
1123 TREE_TYPE (method_type))
1124 || !comp_template_parms (DECL_TEMPLATE_PARMS (fn),
1125 DECL_TEMPLATE_PARMS (method))))
1126 continue;
1128 if (! DECL_STATIC_FUNCTION_P (fn))
1129 parms1 = TREE_CHAIN (parms1);
1130 if (! DECL_STATIC_FUNCTION_P (method))
1131 parms2 = TREE_CHAIN (parms2);
1133 if (compparms (parms1, parms2)
1134 && (!DECL_CONV_FN_P (fn)
1135 || same_type_p (TREE_TYPE (fn_type),
1136 TREE_TYPE (method_type)))
1137 && equivalently_constrained (fn, method))
1139 /* For function versions, their parms and types match
1140 but they are not duplicates. Record function versions
1141 as and when they are found. extern "C" functions are
1142 not treated as versions. */
1143 if (TREE_CODE (fn) == FUNCTION_DECL
1144 && TREE_CODE (method) == FUNCTION_DECL
1145 && !DECL_EXTERN_C_P (fn)
1146 && !DECL_EXTERN_C_P (method)
1147 && targetm.target_option.function_versions (fn, method))
1149 /* Mark functions as versions if necessary. Modify the mangled
1150 decl name if necessary. */
1151 if (!DECL_FUNCTION_VERSIONED (fn))
1153 DECL_FUNCTION_VERSIONED (fn) = 1;
1154 if (DECL_ASSEMBLER_NAME_SET_P (fn))
1155 mangle_decl (fn);
1157 if (!DECL_FUNCTION_VERSIONED (method))
1159 DECL_FUNCTION_VERSIONED (method) = 1;
1160 if (DECL_ASSEMBLER_NAME_SET_P (method))
1161 mangle_decl (method);
1163 cgraph_node::record_function_versions (fn, method);
1164 continue;
1166 if (DECL_INHERITED_CTOR_BASE (method))
1168 if (DECL_INHERITED_CTOR_BASE (fn))
1170 error_at (DECL_SOURCE_LOCATION (method),
1171 "%q#D inherited from %qT", method,
1172 DECL_INHERITED_CTOR_BASE (method));
1173 error_at (DECL_SOURCE_LOCATION (fn),
1174 "conflicts with version inherited from %qT",
1175 DECL_INHERITED_CTOR_BASE (fn));
1177 /* Otherwise defer to the other function. */
1178 return false;
1180 if (using_decl)
1182 if (DECL_CONTEXT (fn) == type)
1183 /* Defer to the local function. */
1184 return false;
1186 else
1188 error ("%q+#D cannot be overloaded", method);
1189 error ("with %q+#D", fn);
1192 /* We don't call duplicate_decls here to merge the
1193 declarations because that will confuse things if the
1194 methods have inline definitions. In particular, we
1195 will crash while processing the definitions. */
1196 return false;
1200 /* A class should never have more than one destructor. */
1201 if (current_fns && DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
1202 return false;
1204 /* Add the new binding. */
1205 if (using_decl)
1207 overload = ovl_cons (method, current_fns);
1208 OVL_USED (overload) = true;
1210 else
1211 overload = build_overload (method, current_fns);
1213 if (conv_p)
1214 TYPE_HAS_CONVERSION (type) = 1;
1215 else if (slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
1216 push_class_level_binding (DECL_NAME (method), overload);
1218 if (insert_p)
1220 bool reallocated;
1222 /* We only expect to add few methods in the COMPLETE_P case, so
1223 just make room for one more method in that case. */
1224 if (complete_p)
1225 reallocated = vec_safe_reserve_exact (method_vec, 1);
1226 else
1227 reallocated = vec_safe_reserve (method_vec, 1);
1228 if (reallocated)
1229 CLASSTYPE_METHOD_VEC (type) = method_vec;
1230 if (slot == method_vec->length ())
1231 method_vec->quick_push (overload);
1232 else
1233 method_vec->quick_insert (slot, overload);
1235 else
1236 /* Replace the current slot. */
1237 (*method_vec)[slot] = overload;
1238 return true;
1241 /* Subroutines of finish_struct. */
1243 /* Change the access of FDECL to ACCESS in T. Return 1 if change was
1244 legit, otherwise return 0. */
1246 static int
1247 alter_access (tree t, tree fdecl, tree access)
1249 tree elem;
1251 if (!DECL_LANG_SPECIFIC (fdecl))
1252 retrofit_lang_decl (fdecl);
1254 gcc_assert (!DECL_DISCRIMINATOR_P (fdecl));
1256 elem = purpose_member (t, DECL_ACCESS (fdecl));
1257 if (elem)
1259 if (TREE_VALUE (elem) != access)
1261 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
1262 error ("conflicting access specifications for method"
1263 " %q+D, ignored", TREE_TYPE (fdecl));
1264 else
1265 error ("conflicting access specifications for field %qE, ignored",
1266 DECL_NAME (fdecl));
1268 else
1270 /* They're changing the access to the same thing they changed
1271 it to before. That's OK. */
1275 else
1277 perform_or_defer_access_check (TYPE_BINFO (t), fdecl, fdecl,
1278 tf_warning_or_error);
1279 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
1280 return 1;
1282 return 0;
1285 /* Process the USING_DECL, which is a member of T. */
1287 static void
1288 handle_using_decl (tree using_decl, tree t)
1290 tree decl = USING_DECL_DECLS (using_decl);
1291 tree name = DECL_NAME (using_decl);
1292 tree access
1293 = TREE_PRIVATE (using_decl) ? access_private_node
1294 : TREE_PROTECTED (using_decl) ? access_protected_node
1295 : access_public_node;
1296 tree flist = NULL_TREE;
1297 tree old_value;
1299 gcc_assert (!processing_template_decl && decl);
1301 old_value = lookup_member (t, name, /*protect=*/0, /*want_type=*/false,
1302 tf_warning_or_error);
1303 if (old_value)
1305 if (is_overloaded_fn (old_value))
1306 old_value = OVL_CURRENT (old_value);
1308 if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1309 /* OK */;
1310 else
1311 old_value = NULL_TREE;
1314 cp_emit_debug_info_for_using (decl, t);
1316 if (is_overloaded_fn (decl))
1317 flist = decl;
1319 if (! old_value)
1321 else if (is_overloaded_fn (old_value))
1323 if (flist)
1324 /* It's OK to use functions from a base when there are functions with
1325 the same name already present in the current class. */;
1326 else
1328 error ("%q+D invalid in %q#T", using_decl, t);
1329 error (" because of local method %q+#D with same name",
1330 OVL_CURRENT (old_value));
1331 return;
1334 else if (!DECL_ARTIFICIAL (old_value))
1336 error ("%q+D invalid in %q#T", using_decl, t);
1337 error (" because of local member %q+#D with same name", old_value);
1338 return;
1341 /* Make type T see field decl FDECL with access ACCESS. */
1342 if (flist)
1343 for (; flist; flist = OVL_NEXT (flist))
1345 add_method (t, OVL_CURRENT (flist), using_decl);
1346 alter_access (t, OVL_CURRENT (flist), access);
1348 else
1349 alter_access (t, decl, access);
1352 /* Data structure for find_abi_tags_r, below. */
1354 struct abi_tag_data
1356 tree t; // The type that we're checking for missing tags.
1357 tree subob; // The subobject of T that we're getting tags from.
1358 tree tags; // error_mark_node for diagnostics, or a list of missing tags.
1361 /* Subroutine of find_abi_tags_r. Handle a single TAG found on the class TP
1362 in the context of P. TAG can be either an identifier (the DECL_NAME of
1363 a tag NAMESPACE_DECL) or a STRING_CST (a tag attribute). */
1365 static void
1366 check_tag (tree tag, tree id, tree *tp, abi_tag_data *p)
1368 if (!IDENTIFIER_MARKED (id))
1370 if (p->tags != error_mark_node)
1372 /* We're collecting tags from template arguments or from
1373 the type of a variable or function return type. */
1374 p->tags = tree_cons (NULL_TREE, tag, p->tags);
1376 /* Don't inherit this tag multiple times. */
1377 IDENTIFIER_MARKED (id) = true;
1379 if (TYPE_P (p->t))
1381 /* Tags inherited from type template arguments are only used
1382 to avoid warnings. */
1383 ABI_TAG_IMPLICIT (p->tags) = true;
1384 return;
1386 /* For functions and variables we want to warn, too. */
1389 /* Otherwise we're diagnosing missing tags. */
1390 if (TREE_CODE (p->t) == FUNCTION_DECL)
1392 if (warning (OPT_Wabi_tag, "%qD inherits the %E ABI tag "
1393 "that %qT (used in its return type) has",
1394 p->t, tag, *tp))
1395 inform (location_of (*tp), "%qT declared here", *tp);
1397 else if (VAR_P (p->t))
1399 if (warning (OPT_Wabi_tag, "%qD inherits the %E ABI tag "
1400 "that %qT (used in its type) has", p->t, tag, *tp))
1401 inform (location_of (*tp), "%qT declared here", *tp);
1403 else if (TYPE_P (p->subob))
1405 if (warning (OPT_Wabi_tag, "%qT does not have the %E ABI tag "
1406 "that base %qT has", p->t, tag, p->subob))
1407 inform (location_of (p->subob), "%qT declared here",
1408 p->subob);
1410 else
1412 if (warning (OPT_Wabi_tag, "%qT does not have the %E ABI tag "
1413 "that %qT (used in the type of %qD) has",
1414 p->t, tag, *tp, p->subob))
1416 inform (location_of (p->subob), "%qD declared here",
1417 p->subob);
1418 inform (location_of (*tp), "%qT declared here", *tp);
1424 /* Find all the ABI tags in the attribute list ATTR and either call
1425 check_tag (if TP is non-null) or set IDENTIFIER_MARKED to val. */
1427 static void
1428 mark_or_check_attr_tags (tree attr, tree *tp, abi_tag_data *p, bool val)
1430 if (!attr)
1431 return;
1432 for (; (attr = lookup_attribute ("abi_tag", attr));
1433 attr = TREE_CHAIN (attr))
1434 for (tree list = TREE_VALUE (attr); list;
1435 list = TREE_CHAIN (list))
1437 tree tag = TREE_VALUE (list);
1438 tree id = get_identifier (TREE_STRING_POINTER (tag));
1439 if (tp)
1440 check_tag (tag, id, tp, p);
1441 else
1442 IDENTIFIER_MARKED (id) = val;
1446 /* Find all the ABI tags on T and its enclosing scopes and either call
1447 check_tag (if TP is non-null) or set IDENTIFIER_MARKED to val. */
1449 static void
1450 mark_or_check_tags (tree t, tree *tp, abi_tag_data *p, bool val)
1452 while (t != global_namespace)
1454 tree attr;
1455 if (TYPE_P (t))
1457 attr = TYPE_ATTRIBUTES (t);
1458 t = CP_TYPE_CONTEXT (t);
1460 else
1462 attr = DECL_ATTRIBUTES (t);
1463 t = CP_DECL_CONTEXT (t);
1465 mark_or_check_attr_tags (attr, tp, p, val);
1469 /* walk_tree callback for check_abi_tags: if the type at *TP involves any
1470 types with ABI tags, add the corresponding identifiers to the VEC in
1471 *DATA and set IDENTIFIER_MARKED. */
1473 static tree
1474 find_abi_tags_r (tree *tp, int *walk_subtrees, void *data)
1476 if (!OVERLOAD_TYPE_P (*tp))
1477 return NULL_TREE;
1479 /* walk_tree shouldn't be walking into any subtrees of a RECORD_TYPE
1480 anyway, but let's make sure of it. */
1481 *walk_subtrees = false;
1483 abi_tag_data *p = static_cast<struct abi_tag_data*>(data);
1485 mark_or_check_tags (*tp, tp, p, false);
1487 return NULL_TREE;
1490 /* walk_tree callback for mark_abi_tags: if *TP is a class, set
1491 IDENTIFIER_MARKED on its ABI tags. */
1493 static tree
1494 mark_abi_tags_r (tree *tp, int *walk_subtrees, void *data)
1496 if (!OVERLOAD_TYPE_P (*tp))
1497 return NULL_TREE;
1499 /* walk_tree shouldn't be walking into any subtrees of a RECORD_TYPE
1500 anyway, but let's make sure of it. */
1501 *walk_subtrees = false;
1503 bool *valp = static_cast<bool*>(data);
1505 mark_or_check_tags (*tp, NULL, NULL, *valp);
1507 return NULL_TREE;
1510 /* Set IDENTIFIER_MARKED on all the ABI tags on T and its enclosing
1511 scopes. */
1513 static void
1514 mark_abi_tags (tree t, bool val)
1516 mark_or_check_tags (t, NULL, NULL, val);
1517 if (DECL_P (t))
1519 if (DECL_LANG_SPECIFIC (t) && DECL_USE_TEMPLATE (t)
1520 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t)))
1522 /* Template arguments are part of the signature. */
1523 tree level = INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (t));
1524 for (int j = 0; j < TREE_VEC_LENGTH (level); ++j)
1526 tree arg = TREE_VEC_ELT (level, j);
1527 cp_walk_tree_without_duplicates (&arg, mark_abi_tags_r, &val);
1530 if (TREE_CODE (t) == FUNCTION_DECL)
1531 /* A function's parameter types are part of the signature, so
1532 we don't need to inherit any tags that are also in them. */
1533 for (tree arg = FUNCTION_FIRST_USER_PARMTYPE (t); arg;
1534 arg = TREE_CHAIN (arg))
1535 cp_walk_tree_without_duplicates (&TREE_VALUE (arg),
1536 mark_abi_tags_r, &val);
1540 /* Check that T has all the ABI tags that subobject SUBOB has, or
1541 warn if not. If T is a (variable or function) declaration, also
1542 add any missing tags. */
1544 static void
1545 check_abi_tags (tree t, tree subob)
1547 bool inherit = DECL_P (t);
1549 if (!inherit && !warn_abi_tag)
1550 return;
1552 tree decl = TYPE_P (t) ? TYPE_NAME (t) : t;
1553 if (!TREE_PUBLIC (decl))
1554 /* No need to worry about things local to this TU. */
1555 return;
1557 mark_abi_tags (t, true);
1559 tree subtype = TYPE_P (subob) ? subob : TREE_TYPE (subob);
1560 struct abi_tag_data data = { t, subob, error_mark_node };
1561 if (inherit)
1562 data.tags = NULL_TREE;
1564 cp_walk_tree_without_duplicates (&subtype, find_abi_tags_r, &data);
1566 if (inherit && data.tags)
1568 tree attr = lookup_attribute ("abi_tag", DECL_ATTRIBUTES (t));
1569 if (attr)
1570 TREE_VALUE (attr) = chainon (data.tags, TREE_VALUE (attr));
1571 else
1572 DECL_ATTRIBUTES (t)
1573 = tree_cons (get_identifier ("abi_tag"), data.tags,
1574 DECL_ATTRIBUTES (t));
1577 mark_abi_tags (t, false);
1580 /* Check that DECL has all the ABI tags that are used in parts of its type
1581 that are not reflected in its mangled name. */
1583 void
1584 check_abi_tags (tree decl)
1586 if (VAR_P (decl))
1587 check_abi_tags (decl, TREE_TYPE (decl));
1588 else if (TREE_CODE (decl) == FUNCTION_DECL
1589 && !mangle_return_type_p (decl))
1590 check_abi_tags (decl, TREE_TYPE (TREE_TYPE (decl)));
1593 void
1594 inherit_targ_abi_tags (tree t)
1596 if (!CLASS_TYPE_P (t)
1597 || CLASSTYPE_TEMPLATE_INFO (t) == NULL_TREE)
1598 return;
1600 mark_abi_tags (t, true);
1602 tree args = CLASSTYPE_TI_ARGS (t);
1603 struct abi_tag_data data = { t, NULL_TREE, NULL_TREE };
1604 for (int i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
1606 tree level = TMPL_ARGS_LEVEL (args, i+1);
1607 for (int j = 0; j < TREE_VEC_LENGTH (level); ++j)
1609 tree arg = TREE_VEC_ELT (level, j);
1610 data.subob = arg;
1611 cp_walk_tree_without_duplicates (&arg, find_abi_tags_r, &data);
1615 // If we found some tags on our template arguments, add them to our
1616 // abi_tag attribute.
1617 if (data.tags)
1619 tree attr = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (t));
1620 if (attr)
1621 TREE_VALUE (attr) = chainon (data.tags, TREE_VALUE (attr));
1622 else
1623 TYPE_ATTRIBUTES (t)
1624 = tree_cons (get_identifier ("abi_tag"), data.tags,
1625 TYPE_ATTRIBUTES (t));
1628 mark_abi_tags (t, false);
1631 /* Return true, iff class T has a non-virtual destructor that is
1632 accessible from outside the class heirarchy (i.e. is public, or
1633 there's a suitable friend. */
1635 static bool
1636 accessible_nvdtor_p (tree t)
1638 tree dtor = CLASSTYPE_DESTRUCTORS (t);
1640 /* An implicitly declared destructor is always public. And,
1641 if it were virtual, we would have created it by now. */
1642 if (!dtor)
1643 return true;
1645 if (DECL_VINDEX (dtor))
1646 return false; /* Virtual */
1648 if (!TREE_PRIVATE (dtor) && !TREE_PROTECTED (dtor))
1649 return true; /* Public */
1651 if (CLASSTYPE_FRIEND_CLASSES (t)
1652 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
1653 return true; /* Has friends */
1655 return false;
1658 /* Run through the base classes of T, updating CANT_HAVE_CONST_CTOR_P,
1659 and NO_CONST_ASN_REF_P. Also set flag bits in T based on
1660 properties of the bases. */
1662 static void
1663 check_bases (tree t,
1664 int* cant_have_const_ctor_p,
1665 int* no_const_asn_ref_p)
1667 int i;
1668 bool seen_non_virtual_nearly_empty_base_p = 0;
1669 int seen_tm_mask = 0;
1670 tree base_binfo;
1671 tree binfo;
1672 tree field = NULL_TREE;
1674 if (!CLASSTYPE_NON_STD_LAYOUT (t))
1675 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
1676 if (TREE_CODE (field) == FIELD_DECL)
1677 break;
1679 for (binfo = TYPE_BINFO (t), i = 0;
1680 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
1682 tree basetype = TREE_TYPE (base_binfo);
1684 gcc_assert (COMPLETE_TYPE_P (basetype));
1686 if (CLASSTYPE_FINAL (basetype))
1687 error ("cannot derive from %<final%> base %qT in derived type %qT",
1688 basetype, t);
1690 /* If any base class is non-literal, so is the derived class. */
1691 if (!CLASSTYPE_LITERAL_P (basetype))
1692 CLASSTYPE_LITERAL_P (t) = false;
1694 /* If the base class doesn't have copy constructors or
1695 assignment operators that take const references, then the
1696 derived class cannot have such a member automatically
1697 generated. */
1698 if (TYPE_HAS_COPY_CTOR (basetype)
1699 && ! TYPE_HAS_CONST_COPY_CTOR (basetype))
1700 *cant_have_const_ctor_p = 1;
1701 if (TYPE_HAS_COPY_ASSIGN (basetype)
1702 && !TYPE_HAS_CONST_COPY_ASSIGN (basetype))
1703 *no_const_asn_ref_p = 1;
1705 if (BINFO_VIRTUAL_P (base_binfo))
1706 /* A virtual base does not effect nearly emptiness. */
1708 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1710 if (seen_non_virtual_nearly_empty_base_p)
1711 /* And if there is more than one nearly empty base, then the
1712 derived class is not nearly empty either. */
1713 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1714 else
1715 /* Remember we've seen one. */
1716 seen_non_virtual_nearly_empty_base_p = 1;
1718 else if (!is_empty_class (basetype))
1719 /* If the base class is not empty or nearly empty, then this
1720 class cannot be nearly empty. */
1721 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1723 /* A lot of properties from the bases also apply to the derived
1724 class. */
1725 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1726 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1727 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1728 TYPE_HAS_COMPLEX_COPY_ASSIGN (t)
1729 |= (TYPE_HAS_COMPLEX_COPY_ASSIGN (basetype)
1730 || !TYPE_HAS_COPY_ASSIGN (basetype));
1731 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= (TYPE_HAS_COMPLEX_COPY_CTOR (basetype)
1732 || !TYPE_HAS_COPY_CTOR (basetype));
1733 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t)
1734 |= TYPE_HAS_COMPLEX_MOVE_ASSIGN (basetype);
1735 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_HAS_COMPLEX_MOVE_CTOR (basetype);
1736 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1737 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t)
1738 |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
1739 TYPE_HAS_COMPLEX_DFLT (t) |= (!TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
1740 || TYPE_HAS_COMPLEX_DFLT (basetype));
1741 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT
1742 (t, CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
1743 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (basetype));
1744 SET_CLASSTYPE_REF_FIELDS_NEED_INIT
1745 (t, CLASSTYPE_REF_FIELDS_NEED_INIT (t)
1746 | CLASSTYPE_REF_FIELDS_NEED_INIT (basetype));
1748 /* A standard-layout class is a class that:
1750 * has no non-standard-layout base classes, */
1751 CLASSTYPE_NON_STD_LAYOUT (t) |= CLASSTYPE_NON_STD_LAYOUT (basetype);
1752 if (!CLASSTYPE_NON_STD_LAYOUT (t))
1754 tree basefield;
1755 /* ...has no base classes of the same type as the first non-static
1756 data member... */
1757 if (field && DECL_CONTEXT (field) == t
1758 && (same_type_ignoring_top_level_qualifiers_p
1759 (TREE_TYPE (field), basetype)))
1760 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
1761 else
1762 /* ...either has no non-static data members in the most-derived
1763 class and at most one base class with non-static data
1764 members, or has no base classes with non-static data
1765 members */
1766 for (basefield = TYPE_FIELDS (basetype); basefield;
1767 basefield = DECL_CHAIN (basefield))
1768 if (TREE_CODE (basefield) == FIELD_DECL)
1770 if (field)
1771 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
1772 else
1773 field = basefield;
1774 break;
1778 /* Don't bother collecting tm attributes if transactional memory
1779 support is not enabled. */
1780 if (flag_tm)
1782 tree tm_attr = find_tm_attribute (TYPE_ATTRIBUTES (basetype));
1783 if (tm_attr)
1784 seen_tm_mask |= tm_attr_to_mask (tm_attr);
1787 check_abi_tags (t, basetype);
1790 /* If one of the base classes had TM attributes, and the current class
1791 doesn't define its own, then the current class inherits one. */
1792 if (seen_tm_mask && !find_tm_attribute (TYPE_ATTRIBUTES (t)))
1794 tree tm_attr = tm_mask_to_attr (seen_tm_mask & -seen_tm_mask);
1795 TYPE_ATTRIBUTES (t) = tree_cons (tm_attr, NULL, TYPE_ATTRIBUTES (t));
1799 /* Determine all the primary bases within T. Sets BINFO_PRIMARY_BASE_P for
1800 those that are primaries. Sets BINFO_LOST_PRIMARY_P for those
1801 that have had a nearly-empty virtual primary base stolen by some
1802 other base in the hierarchy. Determines CLASSTYPE_PRIMARY_BASE for
1803 T. */
1805 static void
1806 determine_primary_bases (tree t)
1808 unsigned i;
1809 tree primary = NULL_TREE;
1810 tree type_binfo = TYPE_BINFO (t);
1811 tree base_binfo;
1813 /* Determine the primary bases of our bases. */
1814 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1815 base_binfo = TREE_CHAIN (base_binfo))
1817 tree primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (base_binfo));
1819 /* See if we're the non-virtual primary of our inheritance
1820 chain. */
1821 if (!BINFO_VIRTUAL_P (base_binfo))
1823 tree parent = BINFO_INHERITANCE_CHAIN (base_binfo);
1824 tree parent_primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (parent));
1826 if (parent_primary
1827 && SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo),
1828 BINFO_TYPE (parent_primary)))
1829 /* We are the primary binfo. */
1830 BINFO_PRIMARY_P (base_binfo) = 1;
1832 /* Determine if we have a virtual primary base, and mark it so.
1834 if (primary && BINFO_VIRTUAL_P (primary))
1836 tree this_primary = copied_binfo (primary, base_binfo);
1838 if (BINFO_PRIMARY_P (this_primary))
1839 /* Someone already claimed this base. */
1840 BINFO_LOST_PRIMARY_P (base_binfo) = 1;
1841 else
1843 tree delta;
1845 BINFO_PRIMARY_P (this_primary) = 1;
1846 BINFO_INHERITANCE_CHAIN (this_primary) = base_binfo;
1848 /* A virtual binfo might have been copied from within
1849 another hierarchy. As we're about to use it as a
1850 primary base, make sure the offsets match. */
1851 delta = size_diffop_loc (input_location,
1852 convert (ssizetype,
1853 BINFO_OFFSET (base_binfo)),
1854 convert (ssizetype,
1855 BINFO_OFFSET (this_primary)));
1857 propagate_binfo_offsets (this_primary, delta);
1862 /* First look for a dynamic direct non-virtual base. */
1863 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, base_binfo); i++)
1865 tree basetype = BINFO_TYPE (base_binfo);
1867 if (TYPE_CONTAINS_VPTR_P (basetype) && !BINFO_VIRTUAL_P (base_binfo))
1869 primary = base_binfo;
1870 goto found;
1874 /* A "nearly-empty" virtual base class can be the primary base
1875 class, if no non-virtual polymorphic base can be found. Look for
1876 a nearly-empty virtual dynamic base that is not already a primary
1877 base of something in the hierarchy. If there is no such base,
1878 just pick the first nearly-empty virtual base. */
1880 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1881 base_binfo = TREE_CHAIN (base_binfo))
1882 if (BINFO_VIRTUAL_P (base_binfo)
1883 && CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (base_binfo)))
1885 if (!BINFO_PRIMARY_P (base_binfo))
1887 /* Found one that is not primary. */
1888 primary = base_binfo;
1889 goto found;
1891 else if (!primary)
1892 /* Remember the first candidate. */
1893 primary = base_binfo;
1896 found:
1897 /* If we've got a primary base, use it. */
1898 if (primary)
1900 tree basetype = BINFO_TYPE (primary);
1902 CLASSTYPE_PRIMARY_BINFO (t) = primary;
1903 if (BINFO_PRIMARY_P (primary))
1904 /* We are stealing a primary base. */
1905 BINFO_LOST_PRIMARY_P (BINFO_INHERITANCE_CHAIN (primary)) = 1;
1906 BINFO_PRIMARY_P (primary) = 1;
1907 if (BINFO_VIRTUAL_P (primary))
1909 tree delta;
1911 BINFO_INHERITANCE_CHAIN (primary) = type_binfo;
1912 /* A virtual binfo might have been copied from within
1913 another hierarchy. As we're about to use it as a primary
1914 base, make sure the offsets match. */
1915 delta = size_diffop_loc (input_location, ssize_int (0),
1916 convert (ssizetype, BINFO_OFFSET (primary)));
1918 propagate_binfo_offsets (primary, delta);
1921 primary = TYPE_BINFO (basetype);
1923 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1924 BINFO_VTABLE (type_binfo) = BINFO_VTABLE (primary);
1925 BINFO_VIRTUALS (type_binfo) = BINFO_VIRTUALS (primary);
1929 /* Update the variant types of T. */
1931 void
1932 fixup_type_variants (tree t)
1934 tree variants;
1936 if (!t)
1937 return;
1939 for (variants = TYPE_NEXT_VARIANT (t);
1940 variants;
1941 variants = TYPE_NEXT_VARIANT (variants))
1943 /* These fields are in the _TYPE part of the node, not in
1944 the TYPE_LANG_SPECIFIC component, so they are not shared. */
1945 TYPE_HAS_USER_CONSTRUCTOR (variants) = TYPE_HAS_USER_CONSTRUCTOR (t);
1946 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
1947 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
1948 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
1950 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
1952 TYPE_BINFO (variants) = TYPE_BINFO (t);
1954 /* Copy whatever these are holding today. */
1955 TYPE_VFIELD (variants) = TYPE_VFIELD (t);
1956 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
1960 /* Early variant fixups: we apply attributes at the beginning of the class
1961 definition, and we need to fix up any variants that have already been
1962 made via elaborated-type-specifier so that check_qualified_type works. */
1964 void
1965 fixup_attribute_variants (tree t)
1967 tree variants;
1969 if (!t)
1970 return;
1972 tree attrs = TYPE_ATTRIBUTES (t);
1973 unsigned align = TYPE_ALIGN (t);
1974 bool user_align = TYPE_USER_ALIGN (t);
1976 for (variants = TYPE_NEXT_VARIANT (t);
1977 variants;
1978 variants = TYPE_NEXT_VARIANT (variants))
1980 /* These are the two fields that check_qualified_type looks at and
1981 are affected by attributes. */
1982 TYPE_ATTRIBUTES (variants) = attrs;
1983 unsigned valign = align;
1984 if (TYPE_USER_ALIGN (variants))
1985 valign = MAX (valign, TYPE_ALIGN (variants));
1986 else
1987 TYPE_USER_ALIGN (variants) = user_align;
1988 TYPE_ALIGN (variants) = valign;
1992 /* Set memoizing fields and bits of T (and its variants) for later
1993 use. */
1995 static void
1996 finish_struct_bits (tree t)
1998 /* Fix up variants (if any). */
1999 fixup_type_variants (t);
2001 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t))
2002 /* For a class w/o baseclasses, 'finish_struct' has set
2003 CLASSTYPE_PURE_VIRTUALS correctly (by definition).
2004 Similarly for a class whose base classes do not have vtables.
2005 When neither of these is true, we might have removed abstract
2006 virtuals (by providing a definition), added some (by declaring
2007 new ones), or redeclared ones from a base class. We need to
2008 recalculate what's really an abstract virtual at this point (by
2009 looking in the vtables). */
2010 get_pure_virtuals (t);
2012 /* If this type has a copy constructor or a destructor, force its
2013 mode to be BLKmode, and force its TREE_ADDRESSABLE bit to be
2014 nonzero. This will cause it to be passed by invisible reference
2015 and prevent it from being returned in a register. */
2016 if (type_has_nontrivial_copy_init (t)
2017 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
2019 tree variants;
2020 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
2021 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
2023 SET_TYPE_MODE (variants, BLKmode);
2024 TREE_ADDRESSABLE (variants) = 1;
2029 /* Issue warnings about T having private constructors, but no friends,
2030 and so forth.
2032 HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
2033 static members. HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
2034 non-private static member functions. */
2036 static void
2037 maybe_warn_about_overly_private_class (tree t)
2039 int has_member_fn = 0;
2040 int has_nonprivate_method = 0;
2041 tree fn;
2043 if (!warn_ctor_dtor_privacy
2044 /* If the class has friends, those entities might create and
2045 access instances, so we should not warn. */
2046 || (CLASSTYPE_FRIEND_CLASSES (t)
2047 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
2048 /* We will have warned when the template was declared; there's
2049 no need to warn on every instantiation. */
2050 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
2051 /* There's no reason to even consider warning about this
2052 class. */
2053 return;
2055 /* We only issue one warning, if more than one applies, because
2056 otherwise, on code like:
2058 class A {
2059 // Oops - forgot `public:'
2060 A();
2061 A(const A&);
2062 ~A();
2065 we warn several times about essentially the same problem. */
2067 /* Check to see if all (non-constructor, non-destructor) member
2068 functions are private. (Since there are no friends or
2069 non-private statics, we can't ever call any of the private member
2070 functions.) */
2071 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
2072 /* We're not interested in compiler-generated methods; they don't
2073 provide any way to call private members. */
2074 if (!DECL_ARTIFICIAL (fn))
2076 if (!TREE_PRIVATE (fn))
2078 if (DECL_STATIC_FUNCTION_P (fn))
2079 /* A non-private static member function is just like a
2080 friend; it can create and invoke private member
2081 functions, and be accessed without a class
2082 instance. */
2083 return;
2085 has_nonprivate_method = 1;
2086 /* Keep searching for a static member function. */
2088 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
2089 has_member_fn = 1;
2092 if (!has_nonprivate_method && has_member_fn)
2094 /* There are no non-private methods, and there's at least one
2095 private member function that isn't a constructor or
2096 destructor. (If all the private members are
2097 constructors/destructors we want to use the code below that
2098 issues error messages specifically referring to
2099 constructors/destructors.) */
2100 unsigned i;
2101 tree binfo = TYPE_BINFO (t);
2103 for (i = 0; i != BINFO_N_BASE_BINFOS (binfo); i++)
2104 if (BINFO_BASE_ACCESS (binfo, i) != access_private_node)
2106 has_nonprivate_method = 1;
2107 break;
2109 if (!has_nonprivate_method)
2111 warning (OPT_Wctor_dtor_privacy,
2112 "all member functions in class %qT are private", t);
2113 return;
2117 /* Even if some of the member functions are non-private, the class
2118 won't be useful for much if all the constructors or destructors
2119 are private: such an object can never be created or destroyed. */
2120 fn = CLASSTYPE_DESTRUCTORS (t);
2121 if (fn && TREE_PRIVATE (fn))
2123 warning (OPT_Wctor_dtor_privacy,
2124 "%q#T only defines a private destructor and has no friends",
2126 return;
2129 /* Warn about classes that have private constructors and no friends. */
2130 if (TYPE_HAS_USER_CONSTRUCTOR (t)
2131 /* Implicitly generated constructors are always public. */
2132 && (!CLASSTYPE_LAZY_DEFAULT_CTOR (t)
2133 || !CLASSTYPE_LAZY_COPY_CTOR (t)))
2135 int nonprivate_ctor = 0;
2137 /* If a non-template class does not define a copy
2138 constructor, one is defined for it, enabling it to avoid
2139 this warning. For a template class, this does not
2140 happen, and so we would normally get a warning on:
2142 template <class T> class C { private: C(); };
2144 To avoid this asymmetry, we check TYPE_HAS_COPY_CTOR. All
2145 complete non-template or fully instantiated classes have this
2146 flag set. */
2147 if (!TYPE_HAS_COPY_CTOR (t))
2148 nonprivate_ctor = 1;
2149 else
2150 for (fn = CLASSTYPE_CONSTRUCTORS (t); fn; fn = OVL_NEXT (fn))
2152 tree ctor = OVL_CURRENT (fn);
2153 /* Ideally, we wouldn't count copy constructors (or, in
2154 fact, any constructor that takes an argument of the
2155 class type as a parameter) because such things cannot
2156 be used to construct an instance of the class unless
2157 you already have one. But, for now at least, we're
2158 more generous. */
2159 if (! TREE_PRIVATE (ctor))
2161 nonprivate_ctor = 1;
2162 break;
2166 if (nonprivate_ctor == 0)
2168 warning (OPT_Wctor_dtor_privacy,
2169 "%q#T only defines private constructors and has no friends",
2171 return;
2176 static struct {
2177 gt_pointer_operator new_value;
2178 void *cookie;
2179 } resort_data;
2181 /* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
2183 static int
2184 method_name_cmp (const void* m1_p, const void* m2_p)
2186 const tree *const m1 = (const tree *) m1_p;
2187 const tree *const m2 = (const tree *) m2_p;
2189 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
2190 return 0;
2191 if (*m1 == NULL_TREE)
2192 return -1;
2193 if (*m2 == NULL_TREE)
2194 return 1;
2195 if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
2196 return -1;
2197 return 1;
2200 /* This routine compares two fields like method_name_cmp but using the
2201 pointer operator in resort_field_decl_data. */
2203 static int
2204 resort_method_name_cmp (const void* m1_p, const void* m2_p)
2206 const tree *const m1 = (const tree *) m1_p;
2207 const tree *const m2 = (const tree *) m2_p;
2208 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
2209 return 0;
2210 if (*m1 == NULL_TREE)
2211 return -1;
2212 if (*m2 == NULL_TREE)
2213 return 1;
2215 tree d1 = DECL_NAME (OVL_CURRENT (*m1));
2216 tree d2 = DECL_NAME (OVL_CURRENT (*m2));
2217 resort_data.new_value (&d1, resort_data.cookie);
2218 resort_data.new_value (&d2, resort_data.cookie);
2219 if (d1 < d2)
2220 return -1;
2222 return 1;
2225 /* Resort TYPE_METHOD_VEC because pointers have been reordered. */
2227 void
2228 resort_type_method_vec (void* obj,
2229 void* /*orig_obj*/,
2230 gt_pointer_operator new_value,
2231 void* cookie)
2233 vec<tree, va_gc> *method_vec = (vec<tree, va_gc> *) obj;
2234 int len = vec_safe_length (method_vec);
2235 size_t slot;
2236 tree fn;
2238 /* The type conversion ops have to live at the front of the vec, so we
2239 can't sort them. */
2240 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
2241 vec_safe_iterate (method_vec, slot, &fn);
2242 ++slot)
2243 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
2244 break;
2246 if (len - slot > 1)
2248 resort_data.new_value = new_value;
2249 resort_data.cookie = cookie;
2250 qsort (method_vec->address () + slot, len - slot, sizeof (tree),
2251 resort_method_name_cmp);
2255 /* Warn about duplicate methods in fn_fields.
2257 Sort methods that are not special (i.e., constructors, destructors,
2258 and type conversion operators) so that we can find them faster in
2259 search. */
2261 static void
2262 finish_struct_methods (tree t)
2264 tree fn_fields;
2265 vec<tree, va_gc> *method_vec;
2266 int slot, len;
2268 method_vec = CLASSTYPE_METHOD_VEC (t);
2269 if (!method_vec)
2270 return;
2272 len = method_vec->length ();
2274 /* Clear DECL_IN_AGGR_P for all functions. */
2275 for (fn_fields = TYPE_METHODS (t); fn_fields;
2276 fn_fields = DECL_CHAIN (fn_fields))
2277 DECL_IN_AGGR_P (fn_fields) = 0;
2279 /* Issue warnings about private constructors and such. If there are
2280 no methods, then some public defaults are generated. */
2281 maybe_warn_about_overly_private_class (t);
2283 /* The type conversion ops have to live at the front of the vec, so we
2284 can't sort them. */
2285 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
2286 method_vec->iterate (slot, &fn_fields);
2287 ++slot)
2288 if (!DECL_CONV_FN_P (OVL_CURRENT (fn_fields)))
2289 break;
2290 if (len - slot > 1)
2291 qsort (method_vec->address () + slot,
2292 len-slot, sizeof (tree), method_name_cmp);
2295 /* Make BINFO's vtable have N entries, including RTTI entries,
2296 vbase and vcall offsets, etc. Set its type and call the back end
2297 to lay it out. */
2299 static void
2300 layout_vtable_decl (tree binfo, int n)
2302 tree atype;
2303 tree vtable;
2305 atype = build_array_of_n_type (vtable_entry_type, n);
2306 layout_type (atype);
2308 /* We may have to grow the vtable. */
2309 vtable = get_vtbl_decl_for_binfo (binfo);
2310 if (!same_type_p (TREE_TYPE (vtable), atype))
2312 TREE_TYPE (vtable) = atype;
2313 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
2314 layout_decl (vtable, 0);
2318 /* True iff FNDECL and BASE_FNDECL (both non-static member functions)
2319 have the same signature. */
2322 same_signature_p (const_tree fndecl, const_tree base_fndecl)
2324 /* One destructor overrides another if they are the same kind of
2325 destructor. */
2326 if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
2327 && special_function_p (base_fndecl) == special_function_p (fndecl))
2328 return 1;
2329 /* But a non-destructor never overrides a destructor, nor vice
2330 versa, nor do different kinds of destructors override
2331 one-another. For example, a complete object destructor does not
2332 override a deleting destructor. */
2333 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
2334 return 0;
2336 if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)
2337 || (DECL_CONV_FN_P (fndecl)
2338 && DECL_CONV_FN_P (base_fndecl)
2339 && same_type_p (DECL_CONV_FN_TYPE (fndecl),
2340 DECL_CONV_FN_TYPE (base_fndecl))))
2342 tree fntype = TREE_TYPE (fndecl);
2343 tree base_fntype = TREE_TYPE (base_fndecl);
2344 if (type_memfn_quals (fntype) == type_memfn_quals (base_fntype)
2345 && type_memfn_rqual (fntype) == type_memfn_rqual (base_fntype)
2346 && compparms (FUNCTION_FIRST_USER_PARMTYPE (fndecl),
2347 FUNCTION_FIRST_USER_PARMTYPE (base_fndecl)))
2348 return 1;
2350 return 0;
2353 /* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
2354 subobject. */
2356 static bool
2357 base_derived_from (tree derived, tree base)
2359 tree probe;
2361 for (probe = base; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
2363 if (probe == derived)
2364 return true;
2365 else if (BINFO_VIRTUAL_P (probe))
2366 /* If we meet a virtual base, we can't follow the inheritance
2367 any more. See if the complete type of DERIVED contains
2368 such a virtual base. */
2369 return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (derived))
2370 != NULL_TREE);
2372 return false;
2375 struct find_final_overrider_data {
2376 /* The function for which we are trying to find a final overrider. */
2377 tree fn;
2378 /* The base class in which the function was declared. */
2379 tree declaring_base;
2380 /* The candidate overriders. */
2381 tree candidates;
2382 /* Path to most derived. */
2383 vec<tree> path;
2386 /* Add the overrider along the current path to FFOD->CANDIDATES.
2387 Returns true if an overrider was found; false otherwise. */
2389 static bool
2390 dfs_find_final_overrider_1 (tree binfo,
2391 find_final_overrider_data *ffod,
2392 unsigned depth)
2394 tree method;
2396 /* If BINFO is not the most derived type, try a more derived class.
2397 A definition there will overrider a definition here. */
2398 if (depth)
2400 depth--;
2401 if (dfs_find_final_overrider_1
2402 (ffod->path[depth], ffod, depth))
2403 return true;
2406 method = look_for_overrides_here (BINFO_TYPE (binfo), ffod->fn);
2407 if (method)
2409 tree *candidate = &ffod->candidates;
2411 /* Remove any candidates overridden by this new function. */
2412 while (*candidate)
2414 /* If *CANDIDATE overrides METHOD, then METHOD
2415 cannot override anything else on the list. */
2416 if (base_derived_from (TREE_VALUE (*candidate), binfo))
2417 return true;
2418 /* If METHOD overrides *CANDIDATE, remove *CANDIDATE. */
2419 if (base_derived_from (binfo, TREE_VALUE (*candidate)))
2420 *candidate = TREE_CHAIN (*candidate);
2421 else
2422 candidate = &TREE_CHAIN (*candidate);
2425 /* Add the new function. */
2426 ffod->candidates = tree_cons (method, binfo, ffod->candidates);
2427 return true;
2430 return false;
2433 /* Called from find_final_overrider via dfs_walk. */
2435 static tree
2436 dfs_find_final_overrider_pre (tree binfo, void *data)
2438 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
2440 if (binfo == ffod->declaring_base)
2441 dfs_find_final_overrider_1 (binfo, ffod, ffod->path.length ());
2442 ffod->path.safe_push (binfo);
2444 return NULL_TREE;
2447 static tree
2448 dfs_find_final_overrider_post (tree /*binfo*/, void *data)
2450 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
2451 ffod->path.pop ();
2453 return NULL_TREE;
2456 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
2457 FN and whose TREE_VALUE is the binfo for the base where the
2458 overriding occurs. BINFO (in the hierarchy dominated by the binfo
2459 DERIVED) is the base object in which FN is declared. */
2461 static tree
2462 find_final_overrider (tree derived, tree binfo, tree fn)
2464 find_final_overrider_data ffod;
2466 /* Getting this right is a little tricky. This is valid:
2468 struct S { virtual void f (); };
2469 struct T { virtual void f (); };
2470 struct U : public S, public T { };
2472 even though calling `f' in `U' is ambiguous. But,
2474 struct R { virtual void f(); };
2475 struct S : virtual public R { virtual void f (); };
2476 struct T : virtual public R { virtual void f (); };
2477 struct U : public S, public T { };
2479 is not -- there's no way to decide whether to put `S::f' or
2480 `T::f' in the vtable for `R'.
2482 The solution is to look at all paths to BINFO. If we find
2483 different overriders along any two, then there is a problem. */
2484 if (DECL_THUNK_P (fn))
2485 fn = THUNK_TARGET (fn);
2487 /* Determine the depth of the hierarchy. */
2488 ffod.fn = fn;
2489 ffod.declaring_base = binfo;
2490 ffod.candidates = NULL_TREE;
2491 ffod.path.create (30);
2493 dfs_walk_all (derived, dfs_find_final_overrider_pre,
2494 dfs_find_final_overrider_post, &ffod);
2496 ffod.path.release ();
2498 /* If there was no winner, issue an error message. */
2499 if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
2500 return error_mark_node;
2502 return ffod.candidates;
2505 /* Return the index of the vcall offset for FN when TYPE is used as a
2506 virtual base. */
2508 static tree
2509 get_vcall_index (tree fn, tree type)
2511 vec<tree_pair_s, va_gc> *indices = CLASSTYPE_VCALL_INDICES (type);
2512 tree_pair_p p;
2513 unsigned ix;
2515 FOR_EACH_VEC_SAFE_ELT (indices, ix, p)
2516 if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (p->purpose))
2517 || same_signature_p (fn, p->purpose))
2518 return p->value;
2520 /* There should always be an appropriate index. */
2521 gcc_unreachable ();
2524 /* Update an entry in the vtable for BINFO, which is in the hierarchy
2525 dominated by T. FN is the old function; VIRTUALS points to the
2526 corresponding position in the new BINFO_VIRTUALS list. IX is the index
2527 of that entry in the list. */
2529 static void
2530 update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
2531 unsigned ix)
2533 tree b;
2534 tree overrider;
2535 tree delta;
2536 tree virtual_base;
2537 tree first_defn;
2538 tree overrider_fn, overrider_target;
2539 tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
2540 tree over_return, base_return;
2541 bool lost = false;
2543 /* Find the nearest primary base (possibly binfo itself) which defines
2544 this function; this is the class the caller will convert to when
2545 calling FN through BINFO. */
2546 for (b = binfo; ; b = get_primary_binfo (b))
2548 gcc_assert (b);
2549 if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
2550 break;
2552 /* The nearest definition is from a lost primary. */
2553 if (BINFO_LOST_PRIMARY_P (b))
2554 lost = true;
2556 first_defn = b;
2558 /* Find the final overrider. */
2559 overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
2560 if (overrider == error_mark_node)
2562 error ("no unique final overrider for %qD in %qT", target_fn, t);
2563 return;
2565 overrider_target = overrider_fn = TREE_PURPOSE (overrider);
2567 /* Check for adjusting covariant return types. */
2568 over_return = TREE_TYPE (TREE_TYPE (overrider_target));
2569 base_return = TREE_TYPE (TREE_TYPE (target_fn));
2571 if (POINTER_TYPE_P (over_return)
2572 && TREE_CODE (over_return) == TREE_CODE (base_return)
2573 && CLASS_TYPE_P (TREE_TYPE (over_return))
2574 && CLASS_TYPE_P (TREE_TYPE (base_return))
2575 /* If the overrider is invalid, don't even try. */
2576 && !DECL_INVALID_OVERRIDER_P (overrider_target))
2578 /* If FN is a covariant thunk, we must figure out the adjustment
2579 to the final base FN was converting to. As OVERRIDER_TARGET might
2580 also be converting to the return type of FN, we have to
2581 combine the two conversions here. */
2582 tree fixed_offset, virtual_offset;
2584 over_return = TREE_TYPE (over_return);
2585 base_return = TREE_TYPE (base_return);
2587 if (DECL_THUNK_P (fn))
2589 gcc_assert (DECL_RESULT_THUNK_P (fn));
2590 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
2591 virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
2593 else
2594 fixed_offset = virtual_offset = NULL_TREE;
2596 if (virtual_offset)
2597 /* Find the equivalent binfo within the return type of the
2598 overriding function. We will want the vbase offset from
2599 there. */
2600 virtual_offset = binfo_for_vbase (BINFO_TYPE (virtual_offset),
2601 over_return);
2602 else if (!same_type_ignoring_top_level_qualifiers_p
2603 (over_return, base_return))
2605 /* There was no existing virtual thunk (which takes
2606 precedence). So find the binfo of the base function's
2607 return type within the overriding function's return type.
2608 We cannot call lookup base here, because we're inside a
2609 dfs_walk, and will therefore clobber the BINFO_MARKED
2610 flags. Fortunately we know the covariancy is valid (it
2611 has already been checked), so we can just iterate along
2612 the binfos, which have been chained in inheritance graph
2613 order. Of course it is lame that we have to repeat the
2614 search here anyway -- we should really be caching pieces
2615 of the vtable and avoiding this repeated work. */
2616 tree thunk_binfo, base_binfo;
2618 /* Find the base binfo within the overriding function's
2619 return type. We will always find a thunk_binfo, except
2620 when the covariancy is invalid (which we will have
2621 already diagnosed). */
2622 for (base_binfo = TYPE_BINFO (base_return),
2623 thunk_binfo = TYPE_BINFO (over_return);
2624 thunk_binfo;
2625 thunk_binfo = TREE_CHAIN (thunk_binfo))
2626 if (SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo),
2627 BINFO_TYPE (base_binfo)))
2628 break;
2630 /* See if virtual inheritance is involved. */
2631 for (virtual_offset = thunk_binfo;
2632 virtual_offset;
2633 virtual_offset = BINFO_INHERITANCE_CHAIN (virtual_offset))
2634 if (BINFO_VIRTUAL_P (virtual_offset))
2635 break;
2637 if (virtual_offset
2638 || (thunk_binfo && !BINFO_OFFSET_ZEROP (thunk_binfo)))
2640 tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
2642 if (virtual_offset)
2644 /* We convert via virtual base. Adjust the fixed
2645 offset to be from there. */
2646 offset =
2647 size_diffop (offset,
2648 convert (ssizetype,
2649 BINFO_OFFSET (virtual_offset)));
2651 if (fixed_offset)
2652 /* There was an existing fixed offset, this must be
2653 from the base just converted to, and the base the
2654 FN was thunking to. */
2655 fixed_offset = size_binop (PLUS_EXPR, fixed_offset, offset);
2656 else
2657 fixed_offset = offset;
2661 if (fixed_offset || virtual_offset)
2662 /* Replace the overriding function with a covariant thunk. We
2663 will emit the overriding function in its own slot as
2664 well. */
2665 overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2666 fixed_offset, virtual_offset);
2668 else
2669 gcc_assert (DECL_INVALID_OVERRIDER_P (overrider_target) ||
2670 !DECL_THUNK_P (fn));
2672 /* If we need a covariant thunk, then we may need to adjust first_defn.
2673 The ABI specifies that the thunks emitted with a function are
2674 determined by which bases the function overrides, so we need to be
2675 sure that we're using a thunk for some overridden base; even if we
2676 know that the necessary this adjustment is zero, there may not be an
2677 appropriate zero-this-adjusment thunk for us to use since thunks for
2678 overriding virtual bases always use the vcall offset.
2680 Furthermore, just choosing any base that overrides this function isn't
2681 quite right, as this slot won't be used for calls through a type that
2682 puts a covariant thunk here. Calling the function through such a type
2683 will use a different slot, and that slot is the one that determines
2684 the thunk emitted for that base.
2686 So, keep looking until we find the base that we're really overriding
2687 in this slot: the nearest primary base that doesn't use a covariant
2688 thunk in this slot. */
2689 if (overrider_target != overrider_fn)
2691 if (BINFO_TYPE (b) == DECL_CONTEXT (overrider_target))
2692 /* We already know that the overrider needs a covariant thunk. */
2693 b = get_primary_binfo (b);
2694 for (; ; b = get_primary_binfo (b))
2696 tree main_binfo = TYPE_BINFO (BINFO_TYPE (b));
2697 tree bv = chain_index (ix, BINFO_VIRTUALS (main_binfo));
2698 if (!DECL_THUNK_P (TREE_VALUE (bv)))
2699 break;
2700 if (BINFO_LOST_PRIMARY_P (b))
2701 lost = true;
2703 first_defn = b;
2706 /* Assume that we will produce a thunk that convert all the way to
2707 the final overrider, and not to an intermediate virtual base. */
2708 virtual_base = NULL_TREE;
2710 /* See if we can convert to an intermediate virtual base first, and then
2711 use the vcall offset located there to finish the conversion. */
2712 for (; b; b = BINFO_INHERITANCE_CHAIN (b))
2714 /* If we find the final overrider, then we can stop
2715 walking. */
2716 if (SAME_BINFO_TYPE_P (BINFO_TYPE (b),
2717 BINFO_TYPE (TREE_VALUE (overrider))))
2718 break;
2720 /* If we find a virtual base, and we haven't yet found the
2721 overrider, then there is a virtual base between the
2722 declaring base (first_defn) and the final overrider. */
2723 if (BINFO_VIRTUAL_P (b))
2725 virtual_base = b;
2726 break;
2730 /* Compute the constant adjustment to the `this' pointer. The
2731 `this' pointer, when this function is called, will point at BINFO
2732 (or one of its primary bases, which are at the same offset). */
2733 if (virtual_base)
2734 /* The `this' pointer needs to be adjusted from the declaration to
2735 the nearest virtual base. */
2736 delta = size_diffop_loc (input_location,
2737 convert (ssizetype, BINFO_OFFSET (virtual_base)),
2738 convert (ssizetype, BINFO_OFFSET (first_defn)));
2739 else if (lost)
2740 /* If the nearest definition is in a lost primary, we don't need an
2741 entry in our vtable. Except possibly in a constructor vtable,
2742 if we happen to get our primary back. In that case, the offset
2743 will be zero, as it will be a primary base. */
2744 delta = size_zero_node;
2745 else
2746 /* The `this' pointer needs to be adjusted from pointing to
2747 BINFO to pointing at the base where the final overrider
2748 appears. */
2749 delta = size_diffop_loc (input_location,
2750 convert (ssizetype,
2751 BINFO_OFFSET (TREE_VALUE (overrider))),
2752 convert (ssizetype, BINFO_OFFSET (binfo)));
2754 modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
2756 if (virtual_base)
2757 BV_VCALL_INDEX (*virtuals)
2758 = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
2759 else
2760 BV_VCALL_INDEX (*virtuals) = NULL_TREE;
2762 BV_LOST_PRIMARY (*virtuals) = lost;
2765 /* Called from modify_all_vtables via dfs_walk. */
2767 static tree
2768 dfs_modify_vtables (tree binfo, void* data)
2770 tree t = (tree) data;
2771 tree virtuals;
2772 tree old_virtuals;
2773 unsigned ix;
2775 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2776 /* A base without a vtable needs no modification, and its bases
2777 are uninteresting. */
2778 return dfs_skip_bases;
2780 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t)
2781 && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2782 /* Don't do the primary vtable, if it's new. */
2783 return NULL_TREE;
2785 if (BINFO_PRIMARY_P (binfo) && !BINFO_VIRTUAL_P (binfo))
2786 /* There's no need to modify the vtable for a non-virtual primary
2787 base; we're not going to use that vtable anyhow. We do still
2788 need to do this for virtual primary bases, as they could become
2789 non-primary in a construction vtable. */
2790 return NULL_TREE;
2792 make_new_vtable (t, binfo);
2794 /* Now, go through each of the virtual functions in the virtual
2795 function table for BINFO. Find the final overrider, and update
2796 the BINFO_VIRTUALS list appropriately. */
2797 for (ix = 0, virtuals = BINFO_VIRTUALS (binfo),
2798 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2799 virtuals;
2800 ix++, virtuals = TREE_CHAIN (virtuals),
2801 old_virtuals = TREE_CHAIN (old_virtuals))
2802 update_vtable_entry_for_fn (t,
2803 binfo,
2804 BV_FN (old_virtuals),
2805 &virtuals, ix);
2807 return NULL_TREE;
2810 /* Update all of the primary and secondary vtables for T. Create new
2811 vtables as required, and initialize their RTTI information. Each
2812 of the functions in VIRTUALS is declared in T and may override a
2813 virtual function from a base class; find and modify the appropriate
2814 entries to point to the overriding functions. Returns a list, in
2815 declaration order, of the virtual functions that are declared in T,
2816 but do not appear in the primary base class vtable, and which
2817 should therefore be appended to the end of the vtable for T. */
2819 static tree
2820 modify_all_vtables (tree t, tree virtuals)
2822 tree binfo = TYPE_BINFO (t);
2823 tree *fnsp;
2825 /* Mangle the vtable name before entering dfs_walk (c++/51884). */
2826 if (TYPE_CONTAINS_VPTR_P (t))
2827 get_vtable_decl (t, false);
2829 /* Update all of the vtables. */
2830 dfs_walk_once (binfo, dfs_modify_vtables, NULL, t);
2832 /* Add virtual functions not already in our primary vtable. These
2833 will be both those introduced by this class, and those overridden
2834 from secondary bases. It does not include virtuals merely
2835 inherited from secondary bases. */
2836 for (fnsp = &virtuals; *fnsp; )
2838 tree fn = TREE_VALUE (*fnsp);
2840 if (!value_member (fn, BINFO_VIRTUALS (binfo))
2841 || DECL_VINDEX (fn) == error_mark_node)
2843 /* We don't need to adjust the `this' pointer when
2844 calling this function. */
2845 BV_DELTA (*fnsp) = integer_zero_node;
2846 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2848 /* This is a function not already in our vtable. Keep it. */
2849 fnsp = &TREE_CHAIN (*fnsp);
2851 else
2852 /* We've already got an entry for this function. Skip it. */
2853 *fnsp = TREE_CHAIN (*fnsp);
2856 return virtuals;
2859 /* Get the base virtual function declarations in T that have the
2860 indicated NAME. */
2862 static void
2863 get_basefndecls (tree name, tree t, vec<tree> *base_fndecls)
2865 tree methods;
2866 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
2867 int i;
2869 /* Find virtual functions in T with the indicated NAME. */
2870 i = lookup_fnfields_1 (t, name);
2871 bool found_decls = false;
2872 if (i != -1)
2873 for (methods = (*CLASSTYPE_METHOD_VEC (t))[i];
2874 methods;
2875 methods = OVL_NEXT (methods))
2877 tree method = OVL_CURRENT (methods);
2879 if (TREE_CODE (method) == FUNCTION_DECL
2880 && DECL_VINDEX (method))
2882 base_fndecls->safe_push (method);
2883 found_decls = true;
2887 if (found_decls)
2888 return;
2890 for (i = 0; i < n_baseclasses; i++)
2892 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
2893 get_basefndecls (name, basetype, base_fndecls);
2897 /* If this declaration supersedes the declaration of
2898 a method declared virtual in the base class, then
2899 mark this field as being virtual as well. */
2901 void
2902 check_for_override (tree decl, tree ctype)
2904 bool overrides_found = false;
2905 if (TREE_CODE (decl) == TEMPLATE_DECL)
2906 /* In [temp.mem] we have:
2908 A specialization of a member function template does not
2909 override a virtual function from a base class. */
2910 return;
2911 if ((DECL_DESTRUCTOR_P (decl)
2912 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2913 || DECL_CONV_FN_P (decl))
2914 && look_for_overrides (ctype, decl)
2915 && !DECL_STATIC_FUNCTION_P (decl))
2916 /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2917 the error_mark_node so that we know it is an overriding
2918 function. */
2920 DECL_VINDEX (decl) = decl;
2921 overrides_found = true;
2922 if (warn_override && !DECL_OVERRIDE_P (decl)
2923 && !DECL_DESTRUCTOR_P (decl))
2924 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wsuggest_override,
2925 "%qD can be marked override", decl);
2928 if (DECL_VIRTUAL_P (decl))
2930 if (!DECL_VINDEX (decl))
2931 DECL_VINDEX (decl) = error_mark_node;
2932 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2933 if (DECL_DESTRUCTOR_P (decl))
2934 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (ctype) = true;
2936 else if (DECL_FINAL_P (decl))
2937 error ("%q+#D marked %<final%>, but is not virtual", decl);
2938 if (DECL_OVERRIDE_P (decl) && !overrides_found)
2939 error ("%q+#D marked %<override%>, but does not override", decl);
2942 /* Warn about hidden virtual functions that are not overridden in t.
2943 We know that constructors and destructors don't apply. */
2945 static void
2946 warn_hidden (tree t)
2948 vec<tree, va_gc> *method_vec = CLASSTYPE_METHOD_VEC (t);
2949 tree fns;
2950 size_t i;
2952 /* We go through each separately named virtual function. */
2953 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
2954 vec_safe_iterate (method_vec, i, &fns);
2955 ++i)
2957 tree fn;
2958 tree name;
2959 tree fndecl;
2960 tree base_binfo;
2961 tree binfo;
2962 int j;
2964 /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2965 have the same name. Figure out what name that is. */
2966 name = DECL_NAME (OVL_CURRENT (fns));
2967 /* There are no possibly hidden functions yet. */
2968 auto_vec<tree, 20> base_fndecls;
2969 /* Iterate through all of the base classes looking for possibly
2970 hidden functions. */
2971 for (binfo = TYPE_BINFO (t), j = 0;
2972 BINFO_BASE_ITERATE (binfo, j, base_binfo); j++)
2974 tree basetype = BINFO_TYPE (base_binfo);
2975 get_basefndecls (name, basetype, &base_fndecls);
2978 /* If there are no functions to hide, continue. */
2979 if (base_fndecls.is_empty ())
2980 continue;
2982 /* Remove any overridden functions. */
2983 for (fn = fns; fn; fn = OVL_NEXT (fn))
2985 fndecl = OVL_CURRENT (fn);
2986 if (TREE_CODE (fndecl) == FUNCTION_DECL
2987 && DECL_VINDEX (fndecl))
2989 /* If the method from the base class has the same
2990 signature as the method from the derived class, it
2991 has been overridden. */
2992 for (size_t k = 0; k < base_fndecls.length (); k++)
2993 if (base_fndecls[k]
2994 && same_signature_p (fndecl, base_fndecls[k]))
2995 base_fndecls[k] = NULL_TREE;
2999 /* Now give a warning for all base functions without overriders,
3000 as they are hidden. */
3001 size_t k;
3002 tree base_fndecl;
3003 FOR_EACH_VEC_ELT (base_fndecls, k, base_fndecl)
3004 if (base_fndecl)
3006 /* Here we know it is a hider, and no overrider exists. */
3007 warning_at (location_of (base_fndecl),
3008 OPT_Woverloaded_virtual,
3009 "%qD was hidden", base_fndecl);
3010 warning_at (location_of (fns),
3011 OPT_Woverloaded_virtual, " by %qD", fns);
3016 /* Recursive helper for finish_struct_anon. */
3018 static void
3019 finish_struct_anon_r (tree field, bool complain)
3021 bool is_union = TREE_CODE (TREE_TYPE (field)) == UNION_TYPE;
3022 tree elt = TYPE_FIELDS (TREE_TYPE (field));
3023 for (; elt; elt = DECL_CHAIN (elt))
3025 /* We're generally only interested in entities the user
3026 declared, but we also find nested classes by noticing
3027 the TYPE_DECL that we create implicitly. You're
3028 allowed to put one anonymous union inside another,
3029 though, so we explicitly tolerate that. We use
3030 TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
3031 we also allow unnamed types used for defining fields. */
3032 if (DECL_ARTIFICIAL (elt)
3033 && (!DECL_IMPLICIT_TYPEDEF_P (elt)
3034 || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
3035 continue;
3037 if (TREE_CODE (elt) != FIELD_DECL)
3039 /* We already complained about static data members in
3040 finish_static_data_member_decl. */
3041 if (complain && !VAR_P (elt))
3043 if (is_union)
3044 permerror (DECL_SOURCE_LOCATION (elt),
3045 "%q#D invalid; an anonymous union can "
3046 "only have non-static data members", elt);
3047 else
3048 permerror (DECL_SOURCE_LOCATION (elt),
3049 "%q#D invalid; an anonymous struct can "
3050 "only have non-static data members", elt);
3052 continue;
3055 if (complain)
3057 if (TREE_PRIVATE (elt))
3059 if (is_union)
3060 permerror (DECL_SOURCE_LOCATION (elt),
3061 "private member %q#D in anonymous union", elt);
3062 else
3063 permerror (DECL_SOURCE_LOCATION (elt),
3064 "private member %q#D in anonymous struct", elt);
3066 else if (TREE_PROTECTED (elt))
3068 if (is_union)
3069 permerror (DECL_SOURCE_LOCATION (elt),
3070 "protected member %q#D in anonymous union", elt);
3071 else
3072 permerror (DECL_SOURCE_LOCATION (elt),
3073 "protected member %q#D in anonymous struct", elt);
3077 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
3078 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
3080 /* Recurse into the anonymous aggregates to handle correctly
3081 access control (c++/24926):
3083 class A {
3084 union {
3085 union {
3086 int i;
3091 int j=A().i; */
3092 if (DECL_NAME (elt) == NULL_TREE
3093 && ANON_AGGR_TYPE_P (TREE_TYPE (elt)))
3094 finish_struct_anon_r (elt, /*complain=*/false);
3098 /* Check for things that are invalid. There are probably plenty of other
3099 things we should check for also. */
3101 static void
3102 finish_struct_anon (tree t)
3104 for (tree field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
3106 if (TREE_STATIC (field))
3107 continue;
3108 if (TREE_CODE (field) != FIELD_DECL)
3109 continue;
3111 if (DECL_NAME (field) == NULL_TREE
3112 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
3113 finish_struct_anon_r (field, /*complain=*/true);
3117 /* Add T to CLASSTYPE_DECL_LIST of current_class_type which
3118 will be used later during class template instantiation.
3119 When FRIEND_P is zero, T can be a static member data (VAR_DECL),
3120 a non-static member data (FIELD_DECL), a member function
3121 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
3122 a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
3123 When FRIEND_P is nonzero, T is either a friend class
3124 (RECORD_TYPE, TEMPLATE_DECL) or a friend function
3125 (FUNCTION_DECL, TEMPLATE_DECL). */
3127 void
3128 maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
3130 /* Save some memory by not creating TREE_LIST if TYPE is not template. */
3131 if (CLASSTYPE_TEMPLATE_INFO (type))
3132 CLASSTYPE_DECL_LIST (type)
3133 = tree_cons (friend_p ? NULL_TREE : type,
3134 t, CLASSTYPE_DECL_LIST (type));
3137 /* This function is called from declare_virt_assop_and_dtor via
3138 dfs_walk_all.
3140 DATA is a type that direcly or indirectly inherits the base
3141 represented by BINFO. If BINFO contains a virtual assignment [copy
3142 assignment or move assigment] operator or a virtual constructor,
3143 declare that function in DATA if it hasn't been already declared. */
3145 static tree
3146 dfs_declare_virt_assop_and_dtor (tree binfo, void *data)
3148 tree bv, fn, t = (tree)data;
3149 tree opname = ansi_assopname (NOP_EXPR);
3151 gcc_assert (t && CLASS_TYPE_P (t));
3152 gcc_assert (binfo && TREE_CODE (binfo) == TREE_BINFO);
3154 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
3155 /* A base without a vtable needs no modification, and its bases
3156 are uninteresting. */
3157 return dfs_skip_bases;
3159 if (BINFO_PRIMARY_P (binfo))
3160 /* If this is a primary base, then we have already looked at the
3161 virtual functions of its vtable. */
3162 return NULL_TREE;
3164 for (bv = BINFO_VIRTUALS (binfo); bv; bv = TREE_CHAIN (bv))
3166 fn = BV_FN (bv);
3168 if (DECL_NAME (fn) == opname)
3170 if (CLASSTYPE_LAZY_COPY_ASSIGN (t))
3171 lazily_declare_fn (sfk_copy_assignment, t);
3172 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
3173 lazily_declare_fn (sfk_move_assignment, t);
3175 else if (DECL_DESTRUCTOR_P (fn)
3176 && CLASSTYPE_LAZY_DESTRUCTOR (t))
3177 lazily_declare_fn (sfk_destructor, t);
3180 return NULL_TREE;
3183 /* If the class type T has a direct or indirect base that contains a
3184 virtual assignment operator or a virtual destructor, declare that
3185 function in T if it hasn't been already declared. */
3187 static void
3188 declare_virt_assop_and_dtor (tree t)
3190 if (!(TYPE_POLYMORPHIC_P (t)
3191 && (CLASSTYPE_LAZY_COPY_ASSIGN (t)
3192 || CLASSTYPE_LAZY_MOVE_ASSIGN (t)
3193 || CLASSTYPE_LAZY_DESTRUCTOR (t))))
3194 return;
3196 dfs_walk_all (TYPE_BINFO (t),
3197 dfs_declare_virt_assop_and_dtor,
3198 NULL, t);
3201 /* Declare the inheriting constructor for class T inherited from base
3202 constructor CTOR with the parameter array PARMS of size NPARMS. */
3204 static void
3205 one_inheriting_sig (tree t, tree ctor, tree *parms, int nparms)
3207 /* We don't declare an inheriting ctor that would be a default,
3208 copy or move ctor for derived or base. */
3209 if (nparms == 0)
3210 return;
3211 if (nparms == 1
3212 && TREE_CODE (parms[0]) == REFERENCE_TYPE)
3214 tree parm = TYPE_MAIN_VARIANT (TREE_TYPE (parms[0]));
3215 if (parm == t || parm == DECL_CONTEXT (ctor))
3216 return;
3219 tree parmlist = void_list_node;
3220 for (int i = nparms - 1; i >= 0; i--)
3221 parmlist = tree_cons (NULL_TREE, parms[i], parmlist);
3222 tree fn = implicitly_declare_fn (sfk_inheriting_constructor,
3223 t, false, ctor, parmlist);
3224 gcc_assert (TYPE_MAIN_VARIANT (t) == t);
3225 if (add_method (t, fn, NULL_TREE))
3227 DECL_CHAIN (fn) = TYPE_METHODS (t);
3228 TYPE_METHODS (t) = fn;
3232 /* Declare all the inheriting constructors for class T inherited from base
3233 constructor CTOR. */
3235 static void
3236 one_inherited_ctor (tree ctor, tree t)
3238 tree parms = FUNCTION_FIRST_USER_PARMTYPE (ctor);
3240 tree *new_parms = XALLOCAVEC (tree, list_length (parms));
3241 int i = 0;
3242 for (; parms && parms != void_list_node; parms = TREE_CHAIN (parms))
3244 if (TREE_PURPOSE (parms))
3245 one_inheriting_sig (t, ctor, new_parms, i);
3246 new_parms[i++] = TREE_VALUE (parms);
3248 one_inheriting_sig (t, ctor, new_parms, i);
3249 if (parms == NULL_TREE)
3251 if (warning (OPT_Winherited_variadic_ctor,
3252 "the ellipsis in %qD is not inherited", ctor))
3253 inform (DECL_SOURCE_LOCATION (ctor), "%qD declared here", ctor);
3257 /* Create default constructors, assignment operators, and so forth for
3258 the type indicated by T, if they are needed. CANT_HAVE_CONST_CTOR,
3259 and CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason,
3260 the class cannot have a default constructor, copy constructor
3261 taking a const reference argument, or an assignment operator taking
3262 a const reference, respectively. */
3264 static void
3265 add_implicitly_declared_members (tree t, tree* access_decls,
3266 int cant_have_const_cctor,
3267 int cant_have_const_assignment)
3269 bool move_ok = false;
3271 if (cxx_dialect >= cxx11 && !CLASSTYPE_DESTRUCTORS (t)
3272 && !TYPE_HAS_COPY_CTOR (t) && !TYPE_HAS_COPY_ASSIGN (t)
3273 && !type_has_move_constructor (t) && !type_has_move_assign (t))
3274 move_ok = true;
3276 /* Destructor. */
3277 if (!CLASSTYPE_DESTRUCTORS (t))
3279 /* In general, we create destructors lazily. */
3280 CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
3282 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3283 && TYPE_FOR_JAVA (t))
3284 /* But if this is a Java class, any non-trivial destructor is
3285 invalid, even if compiler-generated. Therefore, if the
3286 destructor is non-trivial we create it now. */
3287 lazily_declare_fn (sfk_destructor, t);
3290 /* [class.ctor]
3292 If there is no user-declared constructor for a class, a default
3293 constructor is implicitly declared. */
3294 if (! TYPE_HAS_USER_CONSTRUCTOR (t))
3296 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 1;
3297 CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 1;
3298 if (cxx_dialect >= cxx11)
3299 TYPE_HAS_CONSTEXPR_CTOR (t)
3300 /* This might force the declaration. */
3301 = type_has_constexpr_default_constructor (t);
3304 /* [class.ctor]
3306 If a class definition does not explicitly declare a copy
3307 constructor, one is declared implicitly. */
3308 if (! TYPE_HAS_COPY_CTOR (t) && ! TYPE_FOR_JAVA (t))
3310 TYPE_HAS_COPY_CTOR (t) = 1;
3311 TYPE_HAS_CONST_COPY_CTOR (t) = !cant_have_const_cctor;
3312 CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
3313 if (move_ok)
3314 CLASSTYPE_LAZY_MOVE_CTOR (t) = 1;
3317 /* If there is no assignment operator, one will be created if and
3318 when it is needed. For now, just record whether or not the type
3319 of the parameter to the assignment operator will be a const or
3320 non-const reference. */
3321 if (!TYPE_HAS_COPY_ASSIGN (t) && !TYPE_FOR_JAVA (t))
3323 TYPE_HAS_COPY_ASSIGN (t) = 1;
3324 TYPE_HAS_CONST_COPY_ASSIGN (t) = !cant_have_const_assignment;
3325 CLASSTYPE_LAZY_COPY_ASSIGN (t) = 1;
3326 if (move_ok && !LAMBDA_TYPE_P (t))
3327 CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 1;
3330 /* We can't be lazy about declaring functions that might override
3331 a virtual function from a base class. */
3332 declare_virt_assop_and_dtor (t);
3334 while (*access_decls)
3336 tree using_decl = TREE_VALUE (*access_decls);
3337 tree decl = USING_DECL_DECLS (using_decl);
3338 if (DECL_NAME (using_decl) == ctor_identifier)
3340 /* declare, then remove the decl */
3341 tree ctor_list = decl;
3342 location_t loc = input_location;
3343 input_location = DECL_SOURCE_LOCATION (using_decl);
3344 if (ctor_list)
3345 for (; ctor_list; ctor_list = OVL_NEXT (ctor_list))
3346 one_inherited_ctor (OVL_CURRENT (ctor_list), t);
3347 *access_decls = TREE_CHAIN (*access_decls);
3348 input_location = loc;
3350 else
3351 access_decls = &TREE_CHAIN (*access_decls);
3355 /* Subroutine of insert_into_classtype_sorted_fields. Recursively
3356 count the number of fields in TYPE, including anonymous union
3357 members. */
3359 static int
3360 count_fields (tree fields)
3362 tree x;
3363 int n_fields = 0;
3364 for (x = fields; x; x = DECL_CHAIN (x))
3366 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
3367 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
3368 else
3369 n_fields += 1;
3371 return n_fields;
3374 /* Subroutine of insert_into_classtype_sorted_fields. Recursively add
3375 all the fields in the TREE_LIST FIELDS to the SORTED_FIELDS_TYPE
3376 elts, starting at offset IDX. */
3378 static int
3379 add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
3381 tree x;
3382 for (x = fields; x; x = DECL_CHAIN (x))
3384 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
3385 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
3386 else
3387 field_vec->elts[idx++] = x;
3389 return idx;
3392 /* Add all of the enum values of ENUMTYPE, to the FIELD_VEC elts,
3393 starting at offset IDX. */
3395 static int
3396 add_enum_fields_to_record_type (tree enumtype,
3397 struct sorted_fields_type *field_vec,
3398 int idx)
3400 tree values;
3401 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
3402 field_vec->elts[idx++] = TREE_VALUE (values);
3403 return idx;
3406 /* FIELD is a bit-field. We are finishing the processing for its
3407 enclosing type. Issue any appropriate messages and set appropriate
3408 flags. Returns false if an error has been diagnosed. */
3410 static bool
3411 check_bitfield_decl (tree field)
3413 tree type = TREE_TYPE (field);
3414 tree w;
3416 /* Extract the declared width of the bitfield, which has been
3417 temporarily stashed in DECL_INITIAL. */
3418 w = DECL_INITIAL (field);
3419 gcc_assert (w != NULL_TREE);
3420 /* Remove the bit-field width indicator so that the rest of the
3421 compiler does not treat that value as an initializer. */
3422 DECL_INITIAL (field) = NULL_TREE;
3424 /* Detect invalid bit-field type. */
3425 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
3427 error ("bit-field %q+#D with non-integral type", field);
3428 w = error_mark_node;
3430 else
3432 location_t loc = input_location;
3433 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
3434 STRIP_NOPS (w);
3436 /* detect invalid field size. */
3437 input_location = DECL_SOURCE_LOCATION (field);
3438 w = cxx_constant_value (w);
3439 input_location = loc;
3441 if (TREE_CODE (w) != INTEGER_CST)
3443 error ("bit-field %q+D width not an integer constant", field);
3444 w = error_mark_node;
3446 else if (tree_int_cst_sgn (w) < 0)
3448 error ("negative width in bit-field %q+D", field);
3449 w = error_mark_node;
3451 else if (integer_zerop (w) && DECL_NAME (field) != 0)
3453 error ("zero width for bit-field %q+D", field);
3454 w = error_mark_node;
3456 else if ((TREE_CODE (type) != ENUMERAL_TYPE
3457 && TREE_CODE (type) != BOOLEAN_TYPE
3458 && compare_tree_int (w, TYPE_PRECISION (type)) > 0)
3459 || ((TREE_CODE (type) == ENUMERAL_TYPE
3460 || TREE_CODE (type) == BOOLEAN_TYPE)
3461 && tree_int_cst_lt (TYPE_SIZE (type), w)))
3462 warning_at (DECL_SOURCE_LOCATION (field), 0,
3463 "width of %qD exceeds its type", field);
3464 else if (TREE_CODE (type) == ENUMERAL_TYPE
3465 && (0 > (compare_tree_int
3466 (w, TYPE_PRECISION (ENUM_UNDERLYING_TYPE (type))))))
3467 warning_at (DECL_SOURCE_LOCATION (field), 0,
3468 "%qD is too small to hold all values of %q#T",
3469 field, type);
3472 if (w != error_mark_node)
3474 DECL_SIZE (field) = convert (bitsizetype, w);
3475 DECL_BIT_FIELD (field) = 1;
3476 return true;
3478 else
3480 /* Non-bit-fields are aligned for their type. */
3481 DECL_BIT_FIELD (field) = 0;
3482 CLEAR_DECL_C_BIT_FIELD (field);
3483 return false;
3487 /* FIELD is a non bit-field. We are finishing the processing for its
3488 enclosing type T. Issue any appropriate messages and set appropriate
3489 flags. */
3491 static void
3492 check_field_decl (tree field,
3493 tree t,
3494 int* cant_have_const_ctor,
3495 int* no_const_asn_ref,
3496 int* any_default_members)
3498 tree type = strip_array_types (TREE_TYPE (field));
3500 /* In C++98 an anonymous union cannot contain any fields which would change
3501 the settings of CANT_HAVE_CONST_CTOR and friends. */
3502 if (ANON_UNION_TYPE_P (type) && cxx_dialect < cxx11)
3504 /* And, we don't set TYPE_HAS_CONST_COPY_CTOR, etc., for anonymous
3505 structs. So, we recurse through their fields here. */
3506 else if (ANON_AGGR_TYPE_P (type))
3508 tree fields;
3510 for (fields = TYPE_FIELDS (type); fields; fields = DECL_CHAIN (fields))
3511 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
3512 check_field_decl (fields, t, cant_have_const_ctor,
3513 no_const_asn_ref, any_default_members);
3515 /* Check members with class type for constructors, destructors,
3516 etc. */
3517 else if (CLASS_TYPE_P (type))
3519 /* Never let anything with uninheritable virtuals
3520 make it through without complaint. */
3521 abstract_virtuals_error (field, type);
3523 if (TREE_CODE (t) == UNION_TYPE && cxx_dialect < cxx11)
3525 static bool warned;
3526 int oldcount = errorcount;
3527 if (TYPE_NEEDS_CONSTRUCTING (type))
3528 error ("member %q+#D with constructor not allowed in union",
3529 field);
3530 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3531 error ("member %q+#D with destructor not allowed in union", field);
3532 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
3533 error ("member %q+#D with copy assignment operator not allowed in union",
3534 field);
3535 if (!warned && errorcount > oldcount)
3537 inform (DECL_SOURCE_LOCATION (field), "unrestricted unions "
3538 "only available with -std=c++11 or -std=gnu++11");
3539 warned = true;
3542 else
3544 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
3545 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3546 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
3547 TYPE_HAS_COMPLEX_COPY_ASSIGN (t)
3548 |= (TYPE_HAS_COMPLEX_COPY_ASSIGN (type)
3549 || !TYPE_HAS_COPY_ASSIGN (type));
3550 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= (TYPE_HAS_COMPLEX_COPY_CTOR (type)
3551 || !TYPE_HAS_COPY_CTOR (type));
3552 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_HAS_COMPLEX_MOVE_ASSIGN (type);
3553 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_HAS_COMPLEX_MOVE_CTOR (type);
3554 TYPE_HAS_COMPLEX_DFLT (t) |= (!TYPE_HAS_DEFAULT_CONSTRUCTOR (type)
3555 || TYPE_HAS_COMPLEX_DFLT (type));
3558 if (TYPE_HAS_COPY_CTOR (type)
3559 && !TYPE_HAS_CONST_COPY_CTOR (type))
3560 *cant_have_const_ctor = 1;
3562 if (TYPE_HAS_COPY_ASSIGN (type)
3563 && !TYPE_HAS_CONST_COPY_ASSIGN (type))
3564 *no_const_asn_ref = 1;
3567 check_abi_tags (t, field);
3569 if (DECL_INITIAL (field) != NULL_TREE)
3571 /* `build_class_init_list' does not recognize
3572 non-FIELD_DECLs. */
3573 if (TREE_CODE (t) == UNION_TYPE && *any_default_members != 0)
3574 error ("multiple fields in union %qT initialized", t);
3575 *any_default_members = 1;
3579 /* Check the data members (both static and non-static), class-scoped
3580 typedefs, etc., appearing in the declaration of T. Issue
3581 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
3582 declaration order) of access declarations; each TREE_VALUE in this
3583 list is a USING_DECL.
3585 In addition, set the following flags:
3587 EMPTY_P
3588 The class is empty, i.e., contains no non-static data members.
3590 CANT_HAVE_CONST_CTOR_P
3591 This class cannot have an implicitly generated copy constructor
3592 taking a const reference.
3594 CANT_HAVE_CONST_ASN_REF
3595 This class cannot have an implicitly generated assignment
3596 operator taking a const reference.
3598 All of these flags should be initialized before calling this
3599 function.
3601 Returns a pointer to the end of the TYPE_FIELDs chain; additional
3602 fields can be added by adding to this chain. */
3604 static void
3605 check_field_decls (tree t, tree *access_decls,
3606 int *cant_have_const_ctor_p,
3607 int *no_const_asn_ref_p)
3609 tree *field;
3610 tree *next;
3611 bool has_pointers;
3612 int any_default_members;
3613 int cant_pack = 0;
3614 int field_access = -1;
3616 /* Assume there are no access declarations. */
3617 *access_decls = NULL_TREE;
3618 /* Assume this class has no pointer members. */
3619 has_pointers = false;
3620 /* Assume none of the members of this class have default
3621 initializations. */
3622 any_default_members = 0;
3624 for (field = &TYPE_FIELDS (t); *field; field = next)
3626 tree x = *field;
3627 tree type = TREE_TYPE (x);
3628 int this_field_access;
3630 next = &DECL_CHAIN (x);
3632 if (TREE_CODE (x) == USING_DECL)
3634 /* Save the access declarations for our caller. */
3635 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
3636 continue;
3639 if (TREE_CODE (x) == TYPE_DECL
3640 || TREE_CODE (x) == TEMPLATE_DECL)
3641 continue;
3643 /* If we've gotten this far, it's a data member, possibly static,
3644 or an enumerator. */
3645 if (TREE_CODE (x) != CONST_DECL)
3646 DECL_CONTEXT (x) = t;
3648 /* When this goes into scope, it will be a non-local reference. */
3649 DECL_NONLOCAL (x) = 1;
3651 if (TREE_CODE (t) == UNION_TYPE
3652 && cxx_dialect < cxx11)
3654 /* [class.union] (C++98)
3656 If a union contains a static data member, or a member of
3657 reference type, the program is ill-formed.
3659 In C++11 this limitation doesn't exist anymore. */
3660 if (VAR_P (x))
3662 error ("in C++98 %q+D may not be static because it is "
3663 "a member of a union", x);
3664 continue;
3666 if (TREE_CODE (type) == REFERENCE_TYPE)
3668 error ("in C++98 %q+D may not have reference type %qT "
3669 "because it is a member of a union", x, type);
3670 continue;
3674 /* Perform error checking that did not get done in
3675 grokdeclarator. */
3676 if (TREE_CODE (type) == FUNCTION_TYPE)
3678 error ("field %q+D invalidly declared function type", x);
3679 type = build_pointer_type (type);
3680 TREE_TYPE (x) = type;
3682 else if (TREE_CODE (type) == METHOD_TYPE)
3684 error ("field %q+D invalidly declared method type", x);
3685 type = build_pointer_type (type);
3686 TREE_TYPE (x) = type;
3689 if (type == error_mark_node)
3690 continue;
3692 if (TREE_CODE (x) == CONST_DECL || VAR_P (x))
3693 continue;
3695 /* Now it can only be a FIELD_DECL. */
3697 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
3698 CLASSTYPE_NON_AGGREGATE (t) = 1;
3700 /* If at least one non-static data member is non-literal, the whole
3701 class becomes non-literal. Per Core/1453, volatile non-static
3702 data members and base classes are also not allowed.
3703 Note: if the type is incomplete we will complain later on. */
3704 if (COMPLETE_TYPE_P (type)
3705 && (!literal_type_p (type) || CP_TYPE_VOLATILE_P (type)))
3706 CLASSTYPE_LITERAL_P (t) = false;
3708 /* A standard-layout class is a class that:
3710 has the same access control (Clause 11) for all non-static data members,
3711 ... */
3712 this_field_access = TREE_PROTECTED (x) ? 1 : TREE_PRIVATE (x) ? 2 : 0;
3713 if (field_access == -1)
3714 field_access = this_field_access;
3715 else if (this_field_access != field_access)
3716 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3718 /* If this is of reference type, check if it needs an init. */
3719 if (TREE_CODE (type) == REFERENCE_TYPE)
3721 CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3722 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3723 if (DECL_INITIAL (x) == NULL_TREE)
3724 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3725 if (cxx_dialect < cxx11)
3727 /* ARM $12.6.2: [A member initializer list] (or, for an
3728 aggregate, initialization by a brace-enclosed list) is the
3729 only way to initialize nonstatic const and reference
3730 members. */
3731 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
3732 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) = 1;
3736 type = strip_array_types (type);
3738 if (TYPE_PACKED (t))
3740 if (!layout_pod_type_p (type) && !TYPE_PACKED (type))
3742 warning_at
3743 (DECL_SOURCE_LOCATION (x), 0,
3744 "ignoring packed attribute because of unpacked non-POD field %q#D",
3746 cant_pack = 1;
3748 else if (DECL_C_BIT_FIELD (x)
3749 || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
3750 DECL_PACKED (x) = 1;
3753 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
3754 /* We don't treat zero-width bitfields as making a class
3755 non-empty. */
3757 else
3759 /* The class is non-empty. */
3760 CLASSTYPE_EMPTY_P (t) = 0;
3761 /* The class is not even nearly empty. */
3762 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3763 /* If one of the data members contains an empty class,
3764 so does T. */
3765 if (CLASS_TYPE_P (type)
3766 && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3767 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
3770 /* This is used by -Weffc++ (see below). Warn only for pointers
3771 to members which might hold dynamic memory. So do not warn
3772 for pointers to functions or pointers to members. */
3773 if (TYPE_PTR_P (type)
3774 && !TYPE_PTRFN_P (type))
3775 has_pointers = true;
3777 if (CLASS_TYPE_P (type))
3779 if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
3780 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3781 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
3782 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3785 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
3786 CLASSTYPE_HAS_MUTABLE (t) = 1;
3788 if (DECL_MUTABLE_P (x))
3790 if (CP_TYPE_CONST_P (type))
3792 error ("member %q+D cannot be declared both %<const%> "
3793 "and %<mutable%>", x);
3794 continue;
3796 if (TREE_CODE (type) == REFERENCE_TYPE)
3798 error ("member %q+D cannot be declared as a %<mutable%> "
3799 "reference", x);
3800 continue;
3804 if (! layout_pod_type_p (type))
3805 /* DR 148 now allows pointers to members (which are POD themselves),
3806 to be allowed in POD structs. */
3807 CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3809 if (!std_layout_type_p (type))
3810 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3812 if (! zero_init_p (type))
3813 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
3815 /* We set DECL_C_BIT_FIELD in grokbitfield.
3816 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
3817 if (! DECL_C_BIT_FIELD (x) || ! check_bitfield_decl (x))
3818 check_field_decl (x, t,
3819 cant_have_const_ctor_p,
3820 no_const_asn_ref_p,
3821 &any_default_members);
3823 /* Now that we've removed bit-field widths from DECL_INITIAL,
3824 anything left in DECL_INITIAL is an NSDMI that makes the class
3825 non-aggregate in C++11. */
3826 if (DECL_INITIAL (x) && cxx_dialect < cxx14)
3827 CLASSTYPE_NON_AGGREGATE (t) = true;
3829 /* If any field is const, the structure type is pseudo-const. */
3830 if (CP_TYPE_CONST_P (type))
3832 C_TYPE_FIELDS_READONLY (t) = 1;
3833 if (DECL_INITIAL (x) == NULL_TREE)
3834 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3835 if (cxx_dialect < cxx11)
3837 /* ARM $12.6.2: [A member initializer list] (or, for an
3838 aggregate, initialization by a brace-enclosed list) is the
3839 only way to initialize nonstatic const and reference
3840 members. */
3841 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
3842 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) = 1;
3845 /* A field that is pseudo-const makes the structure likewise. */
3846 else if (CLASS_TYPE_P (type))
3848 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
3849 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
3850 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
3851 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
3854 /* Core issue 80: A nonstatic data member is required to have a
3855 different name from the class iff the class has a
3856 user-declared constructor. */
3857 if (constructor_name_p (DECL_NAME (x), t)
3858 && TYPE_HAS_USER_CONSTRUCTOR (t))
3859 permerror (DECL_SOURCE_LOCATION (x),
3860 "field %q#D with same name as class", x);
3863 /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
3864 it should also define a copy constructor and an assignment operator to
3865 implement the correct copy semantic (deep vs shallow, etc.). As it is
3866 not feasible to check whether the constructors do allocate dynamic memory
3867 and store it within members, we approximate the warning like this:
3869 -- Warn only if there are members which are pointers
3870 -- Warn only if there is a non-trivial constructor (otherwise,
3871 there cannot be memory allocated).
3872 -- Warn only if there is a non-trivial destructor. We assume that the
3873 user at least implemented the cleanup correctly, and a destructor
3874 is needed to free dynamic memory.
3876 This seems enough for practical purposes. */
3877 if (warn_ecpp
3878 && has_pointers
3879 && TYPE_HAS_USER_CONSTRUCTOR (t)
3880 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3881 && !(TYPE_HAS_COPY_CTOR (t) && TYPE_HAS_COPY_ASSIGN (t)))
3883 warning (OPT_Weffc__, "%q#T has pointer data members", t);
3885 if (! TYPE_HAS_COPY_CTOR (t))
3887 warning (OPT_Weffc__,
3888 " but does not override %<%T(const %T&)%>", t, t);
3889 if (!TYPE_HAS_COPY_ASSIGN (t))
3890 warning (OPT_Weffc__, " or %<operator=(const %T&)%>", t);
3892 else if (! TYPE_HAS_COPY_ASSIGN (t))
3893 warning (OPT_Weffc__,
3894 " but does not override %<operator=(const %T&)%>", t);
3897 /* Non-static data member initializers make the default constructor
3898 non-trivial. */
3899 if (any_default_members)
3901 TYPE_NEEDS_CONSTRUCTING (t) = true;
3902 TYPE_HAS_COMPLEX_DFLT (t) = true;
3905 /* If any of the fields couldn't be packed, unset TYPE_PACKED. */
3906 if (cant_pack)
3907 TYPE_PACKED (t) = 0;
3909 /* Check anonymous struct/anonymous union fields. */
3910 finish_struct_anon (t);
3912 /* We've built up the list of access declarations in reverse order.
3913 Fix that now. */
3914 *access_decls = nreverse (*access_decls);
3917 /* If TYPE is an empty class type, records its OFFSET in the table of
3918 OFFSETS. */
3920 static int
3921 record_subobject_offset (tree type, tree offset, splay_tree offsets)
3923 splay_tree_node n;
3925 if (!is_empty_class (type))
3926 return 0;
3928 /* Record the location of this empty object in OFFSETS. */
3929 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3930 if (!n)
3931 n = splay_tree_insert (offsets,
3932 (splay_tree_key) offset,
3933 (splay_tree_value) NULL_TREE);
3934 n->value = ((splay_tree_value)
3935 tree_cons (NULL_TREE,
3936 type,
3937 (tree) n->value));
3939 return 0;
3942 /* Returns nonzero if TYPE is an empty class type and there is
3943 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
3945 static int
3946 check_subobject_offset (tree type, tree offset, splay_tree offsets)
3948 splay_tree_node n;
3949 tree t;
3951 if (!is_empty_class (type))
3952 return 0;
3954 /* Record the location of this empty object in OFFSETS. */
3955 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3956 if (!n)
3957 return 0;
3959 for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3960 if (same_type_p (TREE_VALUE (t), type))
3961 return 1;
3963 return 0;
3966 /* Walk through all the subobjects of TYPE (located at OFFSET). Call
3967 F for every subobject, passing it the type, offset, and table of
3968 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3969 be traversed.
3971 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3972 than MAX_OFFSET will not be walked.
3974 If F returns a nonzero value, the traversal ceases, and that value
3975 is returned. Otherwise, returns zero. */
3977 static int
3978 walk_subobject_offsets (tree type,
3979 subobject_offset_fn f,
3980 tree offset,
3981 splay_tree offsets,
3982 tree max_offset,
3983 int vbases_p)
3985 int r = 0;
3986 tree type_binfo = NULL_TREE;
3988 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3989 stop. */
3990 if (max_offset && tree_int_cst_lt (max_offset, offset))
3991 return 0;
3993 if (type == error_mark_node)
3994 return 0;
3996 if (!TYPE_P (type))
3998 type_binfo = type;
3999 type = BINFO_TYPE (type);
4002 if (CLASS_TYPE_P (type))
4004 tree field;
4005 tree binfo;
4006 int i;
4008 /* Avoid recursing into objects that are not interesting. */
4009 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
4010 return 0;
4012 /* Record the location of TYPE. */
4013 r = (*f) (type, offset, offsets);
4014 if (r)
4015 return r;
4017 /* Iterate through the direct base classes of TYPE. */
4018 if (!type_binfo)
4019 type_binfo = TYPE_BINFO (type);
4020 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
4022 tree binfo_offset;
4024 if (BINFO_VIRTUAL_P (binfo))
4025 continue;
4027 tree orig_binfo;
4028 /* We cannot rely on BINFO_OFFSET being set for the base
4029 class yet, but the offsets for direct non-virtual
4030 bases can be calculated by going back to the TYPE. */
4031 orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
4032 binfo_offset = size_binop (PLUS_EXPR,
4033 offset,
4034 BINFO_OFFSET (orig_binfo));
4036 r = walk_subobject_offsets (binfo,
4038 binfo_offset,
4039 offsets,
4040 max_offset,
4041 /*vbases_p=*/0);
4042 if (r)
4043 return r;
4046 if (CLASSTYPE_VBASECLASSES (type))
4048 unsigned ix;
4049 vec<tree, va_gc> *vbases;
4051 /* Iterate through the virtual base classes of TYPE. In G++
4052 3.2, we included virtual bases in the direct base class
4053 loop above, which results in incorrect results; the
4054 correct offsets for virtual bases are only known when
4055 working with the most derived type. */
4056 if (vbases_p)
4057 for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
4058 vec_safe_iterate (vbases, ix, &binfo); ix++)
4060 r = walk_subobject_offsets (binfo,
4062 size_binop (PLUS_EXPR,
4063 offset,
4064 BINFO_OFFSET (binfo)),
4065 offsets,
4066 max_offset,
4067 /*vbases_p=*/0);
4068 if (r)
4069 return r;
4071 else
4073 /* We still have to walk the primary base, if it is
4074 virtual. (If it is non-virtual, then it was walked
4075 above.) */
4076 tree vbase = get_primary_binfo (type_binfo);
4078 if (vbase && BINFO_VIRTUAL_P (vbase)
4079 && BINFO_PRIMARY_P (vbase)
4080 && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
4082 r = (walk_subobject_offsets
4083 (vbase, f, offset,
4084 offsets, max_offset, /*vbases_p=*/0));
4085 if (r)
4086 return r;
4091 /* Iterate through the fields of TYPE. */
4092 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
4093 if (TREE_CODE (field) == FIELD_DECL
4094 && TREE_TYPE (field) != error_mark_node
4095 && !DECL_ARTIFICIAL (field))
4097 tree field_offset;
4099 field_offset = byte_position (field);
4101 r = walk_subobject_offsets (TREE_TYPE (field),
4103 size_binop (PLUS_EXPR,
4104 offset,
4105 field_offset),
4106 offsets,
4107 max_offset,
4108 /*vbases_p=*/1);
4109 if (r)
4110 return r;
4113 else if (TREE_CODE (type) == ARRAY_TYPE)
4115 tree element_type = strip_array_types (type);
4116 tree domain = TYPE_DOMAIN (type);
4117 tree index;
4119 /* Avoid recursing into objects that are not interesting. */
4120 if (!CLASS_TYPE_P (element_type)
4121 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
4122 return 0;
4124 /* Step through each of the elements in the array. */
4125 for (index = size_zero_node;
4126 !tree_int_cst_lt (TYPE_MAX_VALUE (domain), index);
4127 index = size_binop (PLUS_EXPR, index, size_one_node))
4129 r = walk_subobject_offsets (TREE_TYPE (type),
4131 offset,
4132 offsets,
4133 max_offset,
4134 /*vbases_p=*/1);
4135 if (r)
4136 return r;
4137 offset = size_binop (PLUS_EXPR, offset,
4138 TYPE_SIZE_UNIT (TREE_TYPE (type)));
4139 /* If this new OFFSET is bigger than the MAX_OFFSET, then
4140 there's no point in iterating through the remaining
4141 elements of the array. */
4142 if (max_offset && tree_int_cst_lt (max_offset, offset))
4143 break;
4147 return 0;
4150 /* Record all of the empty subobjects of TYPE (either a type or a
4151 binfo). If IS_DATA_MEMBER is true, then a non-static data member
4152 is being placed at OFFSET; otherwise, it is a base class that is
4153 being placed at OFFSET. */
4155 static void
4156 record_subobject_offsets (tree type,
4157 tree offset,
4158 splay_tree offsets,
4159 bool is_data_member)
4161 tree max_offset;
4162 /* If recording subobjects for a non-static data member or a
4163 non-empty base class , we do not need to record offsets beyond
4164 the size of the biggest empty class. Additional data members
4165 will go at the end of the class. Additional base classes will go
4166 either at offset zero (if empty, in which case they cannot
4167 overlap with offsets past the size of the biggest empty class) or
4168 at the end of the class.
4170 However, if we are placing an empty base class, then we must record
4171 all offsets, as either the empty class is at offset zero (where
4172 other empty classes might later be placed) or at the end of the
4173 class (where other objects might then be placed, so other empty
4174 subobjects might later overlap). */
4175 if (is_data_member
4176 || !is_empty_class (BINFO_TYPE (type)))
4177 max_offset = sizeof_biggest_empty_class;
4178 else
4179 max_offset = NULL_TREE;
4180 walk_subobject_offsets (type, record_subobject_offset, offset,
4181 offsets, max_offset, is_data_member);
4184 /* Returns nonzero if any of the empty subobjects of TYPE (located at
4185 OFFSET) conflict with entries in OFFSETS. If VBASES_P is nonzero,
4186 virtual bases of TYPE are examined. */
4188 static int
4189 layout_conflict_p (tree type,
4190 tree offset,
4191 splay_tree offsets,
4192 int vbases_p)
4194 splay_tree_node max_node;
4196 /* Get the node in OFFSETS that indicates the maximum offset where
4197 an empty subobject is located. */
4198 max_node = splay_tree_max (offsets);
4199 /* If there aren't any empty subobjects, then there's no point in
4200 performing this check. */
4201 if (!max_node)
4202 return 0;
4204 return walk_subobject_offsets (type, check_subobject_offset, offset,
4205 offsets, (tree) (max_node->key),
4206 vbases_p);
4209 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
4210 non-static data member of the type indicated by RLI. BINFO is the
4211 binfo corresponding to the base subobject, OFFSETS maps offsets to
4212 types already located at those offsets. This function determines
4213 the position of the DECL. */
4215 static void
4216 layout_nonempty_base_or_field (record_layout_info rli,
4217 tree decl,
4218 tree binfo,
4219 splay_tree offsets)
4221 tree offset = NULL_TREE;
4222 bool field_p;
4223 tree type;
4225 if (binfo)
4227 /* For the purposes of determining layout conflicts, we want to
4228 use the class type of BINFO; TREE_TYPE (DECL) will be the
4229 CLASSTYPE_AS_BASE version, which does not contain entries for
4230 zero-sized bases. */
4231 type = TREE_TYPE (binfo);
4232 field_p = false;
4234 else
4236 type = TREE_TYPE (decl);
4237 field_p = true;
4240 /* Try to place the field. It may take more than one try if we have
4241 a hard time placing the field without putting two objects of the
4242 same type at the same address. */
4243 while (1)
4245 struct record_layout_info_s old_rli = *rli;
4247 /* Place this field. */
4248 place_field (rli, decl);
4249 offset = byte_position (decl);
4251 /* We have to check to see whether or not there is already
4252 something of the same type at the offset we're about to use.
4253 For example, consider:
4255 struct S {};
4256 struct T : public S { int i; };
4257 struct U : public S, public T {};
4259 Here, we put S at offset zero in U. Then, we can't put T at
4260 offset zero -- its S component would be at the same address
4261 as the S we already allocated. So, we have to skip ahead.
4262 Since all data members, including those whose type is an
4263 empty class, have nonzero size, any overlap can happen only
4264 with a direct or indirect base-class -- it can't happen with
4265 a data member. */
4266 /* In a union, overlap is permitted; all members are placed at
4267 offset zero. */
4268 if (TREE_CODE (rli->t) == UNION_TYPE)
4269 break;
4270 if (layout_conflict_p (field_p ? type : binfo, offset,
4271 offsets, field_p))
4273 /* Strip off the size allocated to this field. That puts us
4274 at the first place we could have put the field with
4275 proper alignment. */
4276 *rli = old_rli;
4278 /* Bump up by the alignment required for the type. */
4279 rli->bitpos
4280 = size_binop (PLUS_EXPR, rli->bitpos,
4281 bitsize_int (binfo
4282 ? CLASSTYPE_ALIGN (type)
4283 : TYPE_ALIGN (type)));
4284 normalize_rli (rli);
4286 else if (TREE_CODE (type) == NULLPTR_TYPE
4287 && warn_abi && abi_version_crosses (9))
4289 /* Before ABI v9, we were giving nullptr_t alignment of 1; if
4290 the offset wasn't aligned like a pointer when we started to
4291 layout this field, that affects its position. */
4292 tree pos = rli_size_unit_so_far (&old_rli);
4293 if (int_cst_value (pos) % TYPE_ALIGN_UNIT (ptr_type_node) != 0)
4295 if (abi_version_at_least (9))
4296 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wabi,
4297 "alignment of %qD increased in -fabi-version=9 "
4298 "(GCC 5.2)", decl);
4299 else
4300 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wabi, "alignment "
4301 "of %qD will increase in -fabi-version=9", decl);
4303 break;
4305 else
4306 /* There was no conflict. We're done laying out this field. */
4307 break;
4310 /* Now that we know where it will be placed, update its
4311 BINFO_OFFSET. */
4312 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
4313 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
4314 this point because their BINFO_OFFSET is copied from another
4315 hierarchy. Therefore, we may not need to add the entire
4316 OFFSET. */
4317 propagate_binfo_offsets (binfo,
4318 size_diffop_loc (input_location,
4319 convert (ssizetype, offset),
4320 convert (ssizetype,
4321 BINFO_OFFSET (binfo))));
4324 /* Returns true if TYPE is empty and OFFSET is nonzero. */
4326 static int
4327 empty_base_at_nonzero_offset_p (tree type,
4328 tree offset,
4329 splay_tree /*offsets*/)
4331 return is_empty_class (type) && !integer_zerop (offset);
4334 /* Layout the empty base BINFO. EOC indicates the byte currently just
4335 past the end of the class, and should be correctly aligned for a
4336 class of the type indicated by BINFO; OFFSETS gives the offsets of
4337 the empty bases allocated so far. T is the most derived
4338 type. Return nonzero iff we added it at the end. */
4340 static bool
4341 layout_empty_base (record_layout_info rli, tree binfo,
4342 tree eoc, splay_tree offsets)
4344 tree alignment;
4345 tree basetype = BINFO_TYPE (binfo);
4346 bool atend = false;
4348 /* This routine should only be used for empty classes. */
4349 gcc_assert (is_empty_class (basetype));
4350 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
4352 if (!integer_zerop (BINFO_OFFSET (binfo)))
4353 propagate_binfo_offsets
4354 (binfo, size_diffop_loc (input_location,
4355 size_zero_node, BINFO_OFFSET (binfo)));
4357 /* This is an empty base class. We first try to put it at offset
4358 zero. */
4359 if (layout_conflict_p (binfo,
4360 BINFO_OFFSET (binfo),
4361 offsets,
4362 /*vbases_p=*/0))
4364 /* That didn't work. Now, we move forward from the next
4365 available spot in the class. */
4366 atend = true;
4367 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
4368 while (1)
4370 if (!layout_conflict_p (binfo,
4371 BINFO_OFFSET (binfo),
4372 offsets,
4373 /*vbases_p=*/0))
4374 /* We finally found a spot where there's no overlap. */
4375 break;
4377 /* There's overlap here, too. Bump along to the next spot. */
4378 propagate_binfo_offsets (binfo, alignment);
4382 if (CLASSTYPE_USER_ALIGN (basetype))
4384 rli->record_align = MAX (rli->record_align, CLASSTYPE_ALIGN (basetype));
4385 if (warn_packed)
4386 rli->unpacked_align = MAX (rli->unpacked_align, CLASSTYPE_ALIGN (basetype));
4387 TYPE_USER_ALIGN (rli->t) = 1;
4390 return atend;
4393 /* Layout the base given by BINFO in the class indicated by RLI.
4394 *BASE_ALIGN is a running maximum of the alignments of
4395 any base class. OFFSETS gives the location of empty base
4396 subobjects. T is the most derived type. Return nonzero if the new
4397 object cannot be nearly-empty. A new FIELD_DECL is inserted at
4398 *NEXT_FIELD, unless BINFO is for an empty base class.
4400 Returns the location at which the next field should be inserted. */
4402 static tree *
4403 build_base_field (record_layout_info rli, tree binfo,
4404 splay_tree offsets, tree *next_field)
4406 tree t = rli->t;
4407 tree basetype = BINFO_TYPE (binfo);
4409 if (!COMPLETE_TYPE_P (basetype))
4410 /* This error is now reported in xref_tag, thus giving better
4411 location information. */
4412 return next_field;
4414 /* Place the base class. */
4415 if (!is_empty_class (basetype))
4417 tree decl;
4419 /* The containing class is non-empty because it has a non-empty
4420 base class. */
4421 CLASSTYPE_EMPTY_P (t) = 0;
4423 /* Create the FIELD_DECL. */
4424 decl = build_decl (input_location,
4425 FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
4426 DECL_ARTIFICIAL (decl) = 1;
4427 DECL_IGNORED_P (decl) = 1;
4428 DECL_FIELD_CONTEXT (decl) = t;
4429 if (CLASSTYPE_AS_BASE (basetype))
4431 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
4432 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
4433 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
4434 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
4435 DECL_MODE (decl) = TYPE_MODE (basetype);
4436 DECL_FIELD_IS_BASE (decl) = 1;
4438 /* Try to place the field. It may take more than one try if we
4439 have a hard time placing the field without putting two
4440 objects of the same type at the same address. */
4441 layout_nonempty_base_or_field (rli, decl, binfo, offsets);
4442 /* Add the new FIELD_DECL to the list of fields for T. */
4443 DECL_CHAIN (decl) = *next_field;
4444 *next_field = decl;
4445 next_field = &DECL_CHAIN (decl);
4448 else
4450 tree eoc;
4451 bool atend;
4453 /* On some platforms (ARM), even empty classes will not be
4454 byte-aligned. */
4455 eoc = round_up_loc (input_location,
4456 rli_size_unit_so_far (rli),
4457 CLASSTYPE_ALIGN_UNIT (basetype));
4458 atend = layout_empty_base (rli, binfo, eoc, offsets);
4459 /* A nearly-empty class "has no proper base class that is empty,
4460 not morally virtual, and at an offset other than zero." */
4461 if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
4463 if (atend)
4464 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4465 /* The check above (used in G++ 3.2) is insufficient because
4466 an empty class placed at offset zero might itself have an
4467 empty base at a nonzero offset. */
4468 else if (walk_subobject_offsets (basetype,
4469 empty_base_at_nonzero_offset_p,
4470 size_zero_node,
4471 /*offsets=*/NULL,
4472 /*max_offset=*/NULL_TREE,
4473 /*vbases_p=*/true))
4474 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4477 /* We do not create a FIELD_DECL for empty base classes because
4478 it might overlap some other field. We want to be able to
4479 create CONSTRUCTORs for the class by iterating over the
4480 FIELD_DECLs, and the back end does not handle overlapping
4481 FIELD_DECLs. */
4483 /* An empty virtual base causes a class to be non-empty
4484 -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
4485 here because that was already done when the virtual table
4486 pointer was created. */
4489 /* Record the offsets of BINFO and its base subobjects. */
4490 record_subobject_offsets (binfo,
4491 BINFO_OFFSET (binfo),
4492 offsets,
4493 /*is_data_member=*/false);
4495 return next_field;
4498 /* Layout all of the non-virtual base classes. Record empty
4499 subobjects in OFFSETS. T is the most derived type. Return nonzero
4500 if the type cannot be nearly empty. The fields created
4501 corresponding to the base classes will be inserted at
4502 *NEXT_FIELD. */
4504 static void
4505 build_base_fields (record_layout_info rli,
4506 splay_tree offsets, tree *next_field)
4508 /* Chain to hold all the new FIELD_DECLs which stand in for base class
4509 subobjects. */
4510 tree t = rli->t;
4511 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
4512 int i;
4514 /* The primary base class is always allocated first. */
4515 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4516 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
4517 offsets, next_field);
4519 /* Now allocate the rest of the bases. */
4520 for (i = 0; i < n_baseclasses; ++i)
4522 tree base_binfo;
4524 base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
4526 /* The primary base was already allocated above, so we don't
4527 need to allocate it again here. */
4528 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
4529 continue;
4531 /* Virtual bases are added at the end (a primary virtual base
4532 will have already been added). */
4533 if (BINFO_VIRTUAL_P (base_binfo))
4534 continue;
4536 next_field = build_base_field (rli, base_binfo,
4537 offsets, next_field);
4541 /* Go through the TYPE_METHODS of T issuing any appropriate
4542 diagnostics, figuring out which methods override which other
4543 methods, and so forth. */
4545 static void
4546 check_methods (tree t)
4548 tree x;
4550 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
4552 check_for_override (x, t);
4553 if (DECL_PURE_VIRTUAL_P (x) && (TREE_CODE (x) != FUNCTION_DECL || ! DECL_VINDEX (x)))
4554 error ("initializer specified for non-virtual method %q+D", x);
4555 /* The name of the field is the original field name
4556 Save this in auxiliary field for later overloading. */
4557 if (TREE_CODE (x) == FUNCTION_DECL && DECL_VINDEX (x))
4559 TYPE_POLYMORPHIC_P (t) = 1;
4560 if (DECL_PURE_VIRTUAL_P (x))
4561 vec_safe_push (CLASSTYPE_PURE_VIRTUALS (t), x);
4563 /* All user-provided destructors are non-trivial.
4564 Constructors and assignment ops are handled in
4565 grok_special_member_properties. */
4566 if (DECL_DESTRUCTOR_P (x) && user_provided_p (x))
4567 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
4568 if (!DECL_VIRTUAL_P (x)
4569 && lookup_attribute ("transaction_safe_dynamic", DECL_ATTRIBUTES (x)))
4570 error_at (DECL_SOURCE_LOCATION (x),
4571 "%<transaction_safe_dynamic%> may only be specified for "
4572 "a virtual function");
4576 /* FN is a constructor or destructor. Clone the declaration to create
4577 a specialized in-charge or not-in-charge version, as indicated by
4578 NAME. */
4580 static tree
4581 build_clone (tree fn, tree name)
4583 tree parms;
4584 tree clone;
4586 /* Copy the function. */
4587 clone = copy_decl (fn);
4588 /* Reset the function name. */
4589 DECL_NAME (clone) = name;
4590 /* Remember where this function came from. */
4591 DECL_ABSTRACT_ORIGIN (clone) = fn;
4592 /* Make it easy to find the CLONE given the FN. */
4593 DECL_CHAIN (clone) = DECL_CHAIN (fn);
4594 DECL_CHAIN (fn) = clone;
4596 /* If this is a template, do the rest on the DECL_TEMPLATE_RESULT. */
4597 if (TREE_CODE (clone) == TEMPLATE_DECL)
4599 tree result = build_clone (DECL_TEMPLATE_RESULT (clone), name);
4600 DECL_TEMPLATE_RESULT (clone) = result;
4601 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
4602 DECL_TI_TEMPLATE (result) = clone;
4603 TREE_TYPE (clone) = TREE_TYPE (result);
4604 return clone;
4606 else
4608 // Clone constraints.
4609 if (flag_concepts)
4610 if (tree ci = get_constraints (fn))
4611 set_constraints (clone, copy_node (ci));
4615 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
4616 DECL_CLONED_FUNCTION (clone) = fn;
4617 /* There's no pending inline data for this function. */
4618 DECL_PENDING_INLINE_INFO (clone) = NULL;
4619 DECL_PENDING_INLINE_P (clone) = 0;
4621 /* The base-class destructor is not virtual. */
4622 if (name == base_dtor_identifier)
4624 DECL_VIRTUAL_P (clone) = 0;
4625 if (TREE_CODE (clone) != TEMPLATE_DECL)
4626 DECL_VINDEX (clone) = NULL_TREE;
4629 /* If there was an in-charge parameter, drop it from the function
4630 type. */
4631 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4633 tree basetype;
4634 tree parmtypes;
4635 tree exceptions;
4637 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
4638 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4639 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
4640 /* Skip the `this' parameter. */
4641 parmtypes = TREE_CHAIN (parmtypes);
4642 /* Skip the in-charge parameter. */
4643 parmtypes = TREE_CHAIN (parmtypes);
4644 /* And the VTT parm, in a complete [cd]tor. */
4645 if (DECL_HAS_VTT_PARM_P (fn)
4646 && ! DECL_NEEDS_VTT_PARM_P (clone))
4647 parmtypes = TREE_CHAIN (parmtypes);
4648 /* If this is subobject constructor or destructor, add the vtt
4649 parameter. */
4650 TREE_TYPE (clone)
4651 = build_method_type_directly (basetype,
4652 TREE_TYPE (TREE_TYPE (clone)),
4653 parmtypes);
4654 if (exceptions)
4655 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
4656 exceptions);
4657 TREE_TYPE (clone)
4658 = cp_build_type_attribute_variant (TREE_TYPE (clone),
4659 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
4662 /* Copy the function parameters. */
4663 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
4664 /* Remove the in-charge parameter. */
4665 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4667 DECL_CHAIN (DECL_ARGUMENTS (clone))
4668 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
4669 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
4671 /* And the VTT parm, in a complete [cd]tor. */
4672 if (DECL_HAS_VTT_PARM_P (fn))
4674 if (DECL_NEEDS_VTT_PARM_P (clone))
4675 DECL_HAS_VTT_PARM_P (clone) = 1;
4676 else
4678 DECL_CHAIN (DECL_ARGUMENTS (clone))
4679 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
4680 DECL_HAS_VTT_PARM_P (clone) = 0;
4684 for (parms = DECL_ARGUMENTS (clone); parms; parms = DECL_CHAIN (parms))
4686 DECL_CONTEXT (parms) = clone;
4687 cxx_dup_lang_specific_decl (parms);
4690 /* Create the RTL for this function. */
4691 SET_DECL_RTL (clone, NULL);
4692 rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
4694 return clone;
4697 /* Implementation of DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P, do
4698 not invoke this function directly.
4700 For a non-thunk function, returns the address of the slot for storing
4701 the function it is a clone of. Otherwise returns NULL_TREE.
4703 If JUST_TESTING, looks through TEMPLATE_DECL and returns NULL if
4704 cloned_function is unset. This is to support the separate
4705 DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P modes; using the latter
4706 on a template makes sense, but not the former. */
4708 tree *
4709 decl_cloned_function_p (const_tree decl, bool just_testing)
4711 tree *ptr;
4712 if (just_testing)
4713 decl = STRIP_TEMPLATE (decl);
4715 if (TREE_CODE (decl) != FUNCTION_DECL
4716 || !DECL_LANG_SPECIFIC (decl)
4717 || DECL_LANG_SPECIFIC (decl)->u.fn.thunk_p)
4719 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
4720 if (!just_testing)
4721 lang_check_failed (__FILE__, __LINE__, __FUNCTION__);
4722 else
4723 #endif
4724 return NULL;
4727 ptr = &DECL_LANG_SPECIFIC (decl)->u.fn.u5.cloned_function;
4728 if (just_testing && *ptr == NULL_TREE)
4729 return NULL;
4730 else
4731 return ptr;
4734 /* Produce declarations for all appropriate clones of FN. If
4735 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
4736 CLASTYPE_METHOD_VEC as well. */
4738 void
4739 clone_function_decl (tree fn, int update_method_vec_p)
4741 tree clone;
4743 /* Avoid inappropriate cloning. */
4744 if (DECL_CHAIN (fn)
4745 && DECL_CLONED_FUNCTION_P (DECL_CHAIN (fn)))
4746 return;
4748 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
4750 /* For each constructor, we need two variants: an in-charge version
4751 and a not-in-charge version. */
4752 clone = build_clone (fn, complete_ctor_identifier);
4753 if (update_method_vec_p)
4754 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4755 clone = build_clone (fn, base_ctor_identifier);
4756 if (update_method_vec_p)
4757 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4759 else
4761 gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
4763 /* For each destructor, we need three variants: an in-charge
4764 version, a not-in-charge version, and an in-charge deleting
4765 version. We clone the deleting version first because that
4766 means it will go second on the TYPE_METHODS list -- and that
4767 corresponds to the correct layout order in the virtual
4768 function table.
4770 For a non-virtual destructor, we do not build a deleting
4771 destructor. */
4772 if (DECL_VIRTUAL_P (fn))
4774 clone = build_clone (fn, deleting_dtor_identifier);
4775 if (update_method_vec_p)
4776 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4778 clone = build_clone (fn, complete_dtor_identifier);
4779 if (update_method_vec_p)
4780 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4781 clone = build_clone (fn, base_dtor_identifier);
4782 if (update_method_vec_p)
4783 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4786 /* Note that this is an abstract function that is never emitted. */
4787 DECL_ABSTRACT_P (fn) = true;
4790 /* DECL is an in charge constructor, which is being defined. This will
4791 have had an in class declaration, from whence clones were
4792 declared. An out-of-class definition can specify additional default
4793 arguments. As it is the clones that are involved in overload
4794 resolution, we must propagate the information from the DECL to its
4795 clones. */
4797 void
4798 adjust_clone_args (tree decl)
4800 tree clone;
4802 for (clone = DECL_CHAIN (decl); clone && DECL_CLONED_FUNCTION_P (clone);
4803 clone = DECL_CHAIN (clone))
4805 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
4806 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
4807 tree decl_parms, clone_parms;
4809 clone_parms = orig_clone_parms;
4811 /* Skip the 'this' parameter. */
4812 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
4813 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4815 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
4816 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4817 if (DECL_HAS_VTT_PARM_P (decl))
4818 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4820 clone_parms = orig_clone_parms;
4821 if (DECL_HAS_VTT_PARM_P (clone))
4822 clone_parms = TREE_CHAIN (clone_parms);
4824 for (decl_parms = orig_decl_parms; decl_parms;
4825 decl_parms = TREE_CHAIN (decl_parms),
4826 clone_parms = TREE_CHAIN (clone_parms))
4828 gcc_assert (same_type_p (TREE_TYPE (decl_parms),
4829 TREE_TYPE (clone_parms)));
4831 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
4833 /* A default parameter has been added. Adjust the
4834 clone's parameters. */
4835 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
4836 tree attrs = TYPE_ATTRIBUTES (TREE_TYPE (clone));
4837 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4838 tree type;
4840 clone_parms = orig_decl_parms;
4842 if (DECL_HAS_VTT_PARM_P (clone))
4844 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
4845 TREE_VALUE (orig_clone_parms),
4846 clone_parms);
4847 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
4849 type = build_method_type_directly (basetype,
4850 TREE_TYPE (TREE_TYPE (clone)),
4851 clone_parms);
4852 if (exceptions)
4853 type = build_exception_variant (type, exceptions);
4854 if (attrs)
4855 type = cp_build_type_attribute_variant (type, attrs);
4856 TREE_TYPE (clone) = type;
4858 clone_parms = NULL_TREE;
4859 break;
4862 gcc_assert (!clone_parms);
4866 /* For each of the constructors and destructors in T, create an
4867 in-charge and not-in-charge variant. */
4869 static void
4870 clone_constructors_and_destructors (tree t)
4872 tree fns;
4874 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4875 out now. */
4876 if (!CLASSTYPE_METHOD_VEC (t))
4877 return;
4879 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4880 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4881 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4882 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4885 /* Deduce noexcept for a destructor DTOR. */
4887 void
4888 deduce_noexcept_on_destructor (tree dtor)
4890 if (!TYPE_RAISES_EXCEPTIONS (TREE_TYPE (dtor)))
4892 tree eh_spec = unevaluated_noexcept_spec ();
4893 TREE_TYPE (dtor) = build_exception_variant (TREE_TYPE (dtor), eh_spec);
4897 /* For each destructor in T, deduce noexcept:
4899 12.4/3: A declaration of a destructor that does not have an
4900 exception-specification is implicitly considered to have the
4901 same exception-specification as an implicit declaration (15.4). */
4903 static void
4904 deduce_noexcept_on_destructors (tree t)
4906 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4907 out now. */
4908 if (!CLASSTYPE_METHOD_VEC (t))
4909 return;
4911 for (tree fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4912 deduce_noexcept_on_destructor (OVL_CURRENT (fns));
4915 /* Subroutine of set_one_vmethod_tm_attributes. Search base classes
4916 of TYPE for virtual functions which FNDECL overrides. Return a
4917 mask of the tm attributes found therein. */
4919 static int
4920 look_for_tm_attr_overrides (tree type, tree fndecl)
4922 tree binfo = TYPE_BINFO (type);
4923 tree base_binfo;
4924 int ix, found = 0;
4926 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ++ix)
4928 tree o, basetype = BINFO_TYPE (base_binfo);
4930 if (!TYPE_POLYMORPHIC_P (basetype))
4931 continue;
4933 o = look_for_overrides_here (basetype, fndecl);
4934 if (o)
4936 if (lookup_attribute ("transaction_safe_dynamic",
4937 DECL_ATTRIBUTES (o)))
4938 /* transaction_safe_dynamic is not inherited. */;
4939 else
4940 found |= tm_attr_to_mask (find_tm_attribute
4941 (TYPE_ATTRIBUTES (TREE_TYPE (o))));
4943 else
4944 found |= look_for_tm_attr_overrides (basetype, fndecl);
4947 return found;
4950 /* Subroutine of set_method_tm_attributes. Handle the checks and
4951 inheritance for one virtual method FNDECL. */
4953 static void
4954 set_one_vmethod_tm_attributes (tree type, tree fndecl)
4956 tree tm_attr;
4957 int found, have;
4959 found = look_for_tm_attr_overrides (type, fndecl);
4961 /* If FNDECL doesn't actually override anything (i.e. T is the
4962 class that first declares FNDECL virtual), then we're done. */
4963 if (found == 0)
4964 return;
4966 tm_attr = find_tm_attribute (TYPE_ATTRIBUTES (TREE_TYPE (fndecl)));
4967 have = tm_attr_to_mask (tm_attr);
4969 /* Intel STM Language Extension 3.0, Section 4.2 table 4:
4970 tm_pure must match exactly, otherwise no weakening of
4971 tm_safe > tm_callable > nothing. */
4972 /* ??? The tm_pure attribute didn't make the transition to the
4973 multivendor language spec. */
4974 if (have == TM_ATTR_PURE)
4976 if (found != TM_ATTR_PURE)
4978 found &= -found;
4979 goto err_override;
4982 /* If the overridden function is tm_pure, then FNDECL must be. */
4983 else if (found == TM_ATTR_PURE && tm_attr)
4984 goto err_override;
4985 /* Look for base class combinations that cannot be satisfied. */
4986 else if (found != TM_ATTR_PURE && (found & TM_ATTR_PURE))
4988 found &= ~TM_ATTR_PURE;
4989 found &= -found;
4990 error_at (DECL_SOURCE_LOCATION (fndecl),
4991 "method overrides both %<transaction_pure%> and %qE methods",
4992 tm_mask_to_attr (found));
4994 /* If FNDECL did not declare an attribute, then inherit the most
4995 restrictive one. */
4996 else if (tm_attr == NULL)
4998 apply_tm_attr (fndecl, tm_mask_to_attr (found & -found));
5000 /* Otherwise validate that we're not weaker than a function
5001 that is being overridden. */
5002 else
5004 found &= -found;
5005 if (found <= TM_ATTR_CALLABLE && have > found)
5006 goto err_override;
5008 return;
5010 err_override:
5011 error_at (DECL_SOURCE_LOCATION (fndecl),
5012 "method declared %qE overriding %qE method",
5013 tm_attr, tm_mask_to_attr (found));
5016 /* For each of the methods in T, propagate a class-level tm attribute. */
5018 static void
5019 set_method_tm_attributes (tree t)
5021 tree class_tm_attr, fndecl;
5023 /* Don't bother collecting tm attributes if transactional memory
5024 support is not enabled. */
5025 if (!flag_tm)
5026 return;
5028 /* Process virtual methods first, as they inherit directly from the
5029 base virtual function and also require validation of new attributes. */
5030 if (TYPE_CONTAINS_VPTR_P (t))
5032 tree vchain;
5033 for (vchain = BINFO_VIRTUALS (TYPE_BINFO (t)); vchain;
5034 vchain = TREE_CHAIN (vchain))
5036 fndecl = BV_FN (vchain);
5037 if (DECL_THUNK_P (fndecl))
5038 fndecl = THUNK_TARGET (fndecl);
5039 set_one_vmethod_tm_attributes (t, fndecl);
5043 /* If the class doesn't have an attribute, nothing more to do. */
5044 class_tm_attr = find_tm_attribute (TYPE_ATTRIBUTES (t));
5045 if (class_tm_attr == NULL)
5046 return;
5048 /* Any method that does not yet have a tm attribute inherits
5049 the one from the class. */
5050 for (fndecl = TYPE_METHODS (t); fndecl; fndecl = TREE_CHAIN (fndecl))
5052 if (!find_tm_attribute (TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
5053 apply_tm_attr (fndecl, class_tm_attr);
5057 /* Returns true iff class T has a user-defined constructor other than
5058 the default constructor. */
5060 bool
5061 type_has_user_nondefault_constructor (tree t)
5063 tree fns;
5065 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
5066 return false;
5068 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5070 tree fn = OVL_CURRENT (fns);
5071 if (!DECL_ARTIFICIAL (fn)
5072 && (TREE_CODE (fn) == TEMPLATE_DECL
5073 || (skip_artificial_parms_for (fn, DECL_ARGUMENTS (fn))
5074 != NULL_TREE)))
5075 return true;
5078 return false;
5081 /* Returns the defaulted constructor if T has one. Otherwise, returns
5082 NULL_TREE. */
5084 tree
5085 in_class_defaulted_default_constructor (tree t)
5087 tree fns, args;
5089 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
5090 return NULL_TREE;
5092 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5094 tree fn = OVL_CURRENT (fns);
5096 if (DECL_DEFAULTED_IN_CLASS_P (fn))
5098 args = FUNCTION_FIRST_USER_PARMTYPE (fn);
5099 while (args && TREE_PURPOSE (args))
5100 args = TREE_CHAIN (args);
5101 if (!args || args == void_list_node)
5102 return fn;
5106 return NULL_TREE;
5109 /* Returns true iff FN is a user-provided function, i.e. user-declared
5110 and not defaulted at its first declaration; or explicit, private,
5111 protected, or non-const. */
5113 bool
5114 user_provided_p (tree fn)
5116 if (TREE_CODE (fn) == TEMPLATE_DECL)
5117 return true;
5118 else
5119 return (!DECL_ARTIFICIAL (fn)
5120 && !(DECL_INITIALIZED_IN_CLASS_P (fn)
5121 && (DECL_DEFAULTED_FN (fn) || DECL_DELETED_FN (fn))));
5124 /* Returns true iff class T has a user-provided constructor. */
5126 bool
5127 type_has_user_provided_constructor (tree t)
5129 tree fns;
5131 if (!CLASS_TYPE_P (t))
5132 return false;
5134 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
5135 return false;
5137 /* This can happen in error cases; avoid crashing. */
5138 if (!CLASSTYPE_METHOD_VEC (t))
5139 return false;
5141 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5142 if (user_provided_p (OVL_CURRENT (fns)))
5143 return true;
5145 return false;
5148 /* Returns true iff class T has a user-provided or explicit constructor. */
5150 bool
5151 type_has_user_provided_or_explicit_constructor (tree t)
5153 tree fns;
5155 if (!CLASS_TYPE_P (t))
5156 return false;
5158 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
5159 return false;
5161 /* This can happen in error cases; avoid crashing. */
5162 if (!CLASSTYPE_METHOD_VEC (t))
5163 return false;
5165 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5167 tree fn = OVL_CURRENT (fns);
5168 if (user_provided_p (fn) || DECL_NONCONVERTING_P (fn))
5169 return true;
5172 return false;
5175 /* Returns true iff class T has a non-user-provided (i.e. implicitly
5176 declared or explicitly defaulted in the class body) default
5177 constructor. */
5179 bool
5180 type_has_non_user_provided_default_constructor (tree t)
5182 tree fns;
5184 if (!TYPE_HAS_DEFAULT_CONSTRUCTOR (t))
5185 return false;
5186 if (CLASSTYPE_LAZY_DEFAULT_CTOR (t))
5187 return true;
5189 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5191 tree fn = OVL_CURRENT (fns);
5192 if (TREE_CODE (fn) == FUNCTION_DECL
5193 && !user_provided_p (fn)
5194 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)))
5195 return true;
5198 return false;
5201 /* TYPE is being used as a virtual base, and has a non-trivial move
5202 assignment. Return true if this is due to there being a user-provided
5203 move assignment in TYPE or one of its subobjects; if there isn't, then
5204 multiple move assignment can't cause any harm. */
5206 bool
5207 vbase_has_user_provided_move_assign (tree type)
5209 /* Does the type itself have a user-provided move assignment operator? */
5210 for (tree fns
5211 = lookup_fnfields_slot_nolazy (type, ansi_assopname (NOP_EXPR));
5212 fns; fns = OVL_NEXT (fns))
5214 tree fn = OVL_CURRENT (fns);
5215 if (move_fn_p (fn) && user_provided_p (fn))
5216 return true;
5219 /* Do any of its bases? */
5220 tree binfo = TYPE_BINFO (type);
5221 tree base_binfo;
5222 for (int i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
5223 if (vbase_has_user_provided_move_assign (BINFO_TYPE (base_binfo)))
5224 return true;
5226 /* Or non-static data members? */
5227 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
5229 if (TREE_CODE (field) == FIELD_DECL
5230 && CLASS_TYPE_P (TREE_TYPE (field))
5231 && vbase_has_user_provided_move_assign (TREE_TYPE (field)))
5232 return true;
5235 /* Seems not. */
5236 return false;
5239 /* If default-initialization leaves part of TYPE uninitialized, returns
5240 a DECL for the field or TYPE itself (DR 253). */
5242 tree
5243 default_init_uninitialized_part (tree type)
5245 tree t, r, binfo;
5246 int i;
5248 type = strip_array_types (type);
5249 if (!CLASS_TYPE_P (type))
5250 return type;
5251 if (!type_has_non_user_provided_default_constructor (type))
5252 return NULL_TREE;
5253 for (binfo = TYPE_BINFO (type), i = 0;
5254 BINFO_BASE_ITERATE (binfo, i, t); ++i)
5256 r = default_init_uninitialized_part (BINFO_TYPE (t));
5257 if (r)
5258 return r;
5260 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
5261 if (TREE_CODE (t) == FIELD_DECL
5262 && !DECL_ARTIFICIAL (t)
5263 && !DECL_INITIAL (t))
5265 r = default_init_uninitialized_part (TREE_TYPE (t));
5266 if (r)
5267 return DECL_P (r) ? r : t;
5270 return NULL_TREE;
5273 /* Returns true iff for class T, a trivial synthesized default constructor
5274 would be constexpr. */
5276 bool
5277 trivial_default_constructor_is_constexpr (tree t)
5279 /* A defaulted trivial default constructor is constexpr
5280 if there is nothing to initialize. */
5281 gcc_assert (!TYPE_HAS_COMPLEX_DFLT (t));
5282 return is_really_empty_class (t);
5285 /* Returns true iff class T has a constexpr default constructor. */
5287 bool
5288 type_has_constexpr_default_constructor (tree t)
5290 tree fns;
5292 if (!CLASS_TYPE_P (t))
5294 /* The caller should have stripped an enclosing array. */
5295 gcc_assert (TREE_CODE (t) != ARRAY_TYPE);
5296 return false;
5298 if (CLASSTYPE_LAZY_DEFAULT_CTOR (t))
5300 if (!TYPE_HAS_COMPLEX_DFLT (t))
5301 return trivial_default_constructor_is_constexpr (t);
5302 /* Non-trivial, we need to check subobject constructors. */
5303 lazily_declare_fn (sfk_constructor, t);
5305 fns = locate_ctor (t);
5306 return (fns && DECL_DECLARED_CONSTEXPR_P (fns));
5309 /* Returns true iff class TYPE has a virtual destructor. */
5311 bool
5312 type_has_virtual_destructor (tree type)
5314 tree dtor;
5316 if (!CLASS_TYPE_P (type))
5317 return false;
5319 gcc_assert (COMPLETE_TYPE_P (type));
5320 dtor = CLASSTYPE_DESTRUCTORS (type);
5321 return (dtor && DECL_VIRTUAL_P (dtor));
5324 /* Returns true iff class T has a move constructor. */
5326 bool
5327 type_has_move_constructor (tree t)
5329 tree fns;
5331 if (CLASSTYPE_LAZY_MOVE_CTOR (t))
5333 gcc_assert (COMPLETE_TYPE_P (t));
5334 lazily_declare_fn (sfk_move_constructor, t);
5337 if (!CLASSTYPE_METHOD_VEC (t))
5338 return false;
5340 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5341 if (move_fn_p (OVL_CURRENT (fns)))
5342 return true;
5344 return false;
5347 /* Returns true iff class T has a move assignment operator. */
5349 bool
5350 type_has_move_assign (tree t)
5352 tree fns;
5354 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
5356 gcc_assert (COMPLETE_TYPE_P (t));
5357 lazily_declare_fn (sfk_move_assignment, t);
5360 for (fns = lookup_fnfields_slot_nolazy (t, ansi_assopname (NOP_EXPR));
5361 fns; fns = OVL_NEXT (fns))
5362 if (move_fn_p (OVL_CURRENT (fns)))
5363 return true;
5365 return false;
5368 /* Returns true iff class T has a move constructor that was explicitly
5369 declared in the class body. Note that this is different from
5370 "user-provided", which doesn't include functions that are defaulted in
5371 the class. */
5373 bool
5374 type_has_user_declared_move_constructor (tree t)
5376 tree fns;
5378 if (CLASSTYPE_LAZY_MOVE_CTOR (t))
5379 return false;
5381 if (!CLASSTYPE_METHOD_VEC (t))
5382 return false;
5384 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5386 tree fn = OVL_CURRENT (fns);
5387 if (move_fn_p (fn) && !DECL_ARTIFICIAL (fn))
5388 return true;
5391 return false;
5394 /* Returns true iff class T has a move assignment operator that was
5395 explicitly declared in the class body. */
5397 bool
5398 type_has_user_declared_move_assign (tree t)
5400 tree fns;
5402 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
5403 return false;
5405 for (fns = lookup_fnfields_slot_nolazy (t, ansi_assopname (NOP_EXPR));
5406 fns; fns = OVL_NEXT (fns))
5408 tree fn = OVL_CURRENT (fns);
5409 if (move_fn_p (fn) && !DECL_ARTIFICIAL (fn))
5410 return true;
5413 return false;
5416 /* Nonzero if we need to build up a constructor call when initializing an
5417 object of this class, either because it has a user-declared constructor
5418 or because it doesn't have a default constructor (so we need to give an
5419 error if no initializer is provided). Use TYPE_NEEDS_CONSTRUCTING when
5420 what you care about is whether or not an object can be produced by a
5421 constructor (e.g. so we don't set TREE_READONLY on const variables of
5422 such type); use this function when what you care about is whether or not
5423 to try to call a constructor to create an object. The latter case is
5424 the former plus some cases of constructors that cannot be called. */
5426 bool
5427 type_build_ctor_call (tree t)
5429 tree inner;
5430 if (TYPE_NEEDS_CONSTRUCTING (t))
5431 return true;
5432 inner = strip_array_types (t);
5433 if (!CLASS_TYPE_P (inner) || ANON_AGGR_TYPE_P (inner))
5434 return false;
5435 if (!TYPE_HAS_DEFAULT_CONSTRUCTOR (inner))
5436 return true;
5437 if (cxx_dialect < cxx11)
5438 return false;
5439 /* A user-declared constructor might be private, and a constructor might
5440 be trivial but deleted. */
5441 for (tree fns = lookup_fnfields_slot (inner, complete_ctor_identifier);
5442 fns; fns = OVL_NEXT (fns))
5444 tree fn = OVL_CURRENT (fns);
5445 if (!DECL_ARTIFICIAL (fn)
5446 || DECL_DELETED_FN (fn))
5447 return true;
5449 return false;
5452 /* Like type_build_ctor_call, but for destructors. */
5454 bool
5455 type_build_dtor_call (tree t)
5457 tree inner;
5458 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
5459 return true;
5460 inner = strip_array_types (t);
5461 if (!CLASS_TYPE_P (inner) || ANON_AGGR_TYPE_P (inner)
5462 || !COMPLETE_TYPE_P (inner))
5463 return false;
5464 if (cxx_dialect < cxx11)
5465 return false;
5466 /* A user-declared destructor might be private, and a destructor might
5467 be trivial but deleted. */
5468 for (tree fns = lookup_fnfields_slot (inner, complete_dtor_identifier);
5469 fns; fns = OVL_NEXT (fns))
5471 tree fn = OVL_CURRENT (fns);
5472 if (!DECL_ARTIFICIAL (fn)
5473 || DECL_DELETED_FN (fn))
5474 return true;
5476 return false;
5479 /* Remove all zero-width bit-fields from T. */
5481 static void
5482 remove_zero_width_bit_fields (tree t)
5484 tree *fieldsp;
5486 fieldsp = &TYPE_FIELDS (t);
5487 while (*fieldsp)
5489 if (TREE_CODE (*fieldsp) == FIELD_DECL
5490 && DECL_C_BIT_FIELD (*fieldsp)
5491 /* We should not be confused by the fact that grokbitfield
5492 temporarily sets the width of the bit field into
5493 DECL_INITIAL (*fieldsp).
5494 check_bitfield_decl eventually sets DECL_SIZE (*fieldsp)
5495 to that width. */
5496 && (DECL_SIZE (*fieldsp) == NULL_TREE
5497 || integer_zerop (DECL_SIZE (*fieldsp))))
5498 *fieldsp = DECL_CHAIN (*fieldsp);
5499 else
5500 fieldsp = &DECL_CHAIN (*fieldsp);
5504 /* Returns TRUE iff we need a cookie when dynamically allocating an
5505 array whose elements have the indicated class TYPE. */
5507 static bool
5508 type_requires_array_cookie (tree type)
5510 tree fns;
5511 bool has_two_argument_delete_p = false;
5513 gcc_assert (CLASS_TYPE_P (type));
5515 /* If there's a non-trivial destructor, we need a cookie. In order
5516 to iterate through the array calling the destructor for each
5517 element, we'll have to know how many elements there are. */
5518 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
5519 return true;
5521 /* If the usual deallocation function is a two-argument whose second
5522 argument is of type `size_t', then we have to pass the size of
5523 the array to the deallocation function, so we will need to store
5524 a cookie. */
5525 fns = lookup_fnfields (TYPE_BINFO (type),
5526 ansi_opname (VEC_DELETE_EXPR),
5527 /*protect=*/0);
5528 /* If there are no `operator []' members, or the lookup is
5529 ambiguous, then we don't need a cookie. */
5530 if (!fns || fns == error_mark_node)
5531 return false;
5532 /* Loop through all of the functions. */
5533 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
5535 tree fn;
5536 tree second_parm;
5538 /* Select the current function. */
5539 fn = OVL_CURRENT (fns);
5540 /* See if this function is a one-argument delete function. If
5541 it is, then it will be the usual deallocation function. */
5542 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
5543 if (second_parm == void_list_node)
5544 return false;
5545 /* Do not consider this function if its second argument is an
5546 ellipsis. */
5547 if (!second_parm)
5548 continue;
5549 /* Otherwise, if we have a two-argument function and the second
5550 argument is `size_t', it will be the usual deallocation
5551 function -- unless there is one-argument function, too. */
5552 if (TREE_CHAIN (second_parm) == void_list_node
5553 && same_type_p (TREE_VALUE (second_parm), size_type_node))
5554 has_two_argument_delete_p = true;
5557 return has_two_argument_delete_p;
5560 /* Finish computing the `literal type' property of class type T.
5562 At this point, we have already processed base classes and
5563 non-static data members. We need to check whether the copy
5564 constructor is trivial, the destructor is trivial, and there
5565 is a trivial default constructor or at least one constexpr
5566 constructor other than the copy constructor. */
5568 static void
5569 finalize_literal_type_property (tree t)
5571 tree fn;
5573 if (cxx_dialect < cxx11
5574 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
5575 CLASSTYPE_LITERAL_P (t) = false;
5576 else if (CLASSTYPE_LITERAL_P (t) && !TYPE_HAS_TRIVIAL_DFLT (t)
5577 && CLASSTYPE_NON_AGGREGATE (t)
5578 && !TYPE_HAS_CONSTEXPR_CTOR (t))
5579 CLASSTYPE_LITERAL_P (t) = false;
5581 if (!CLASSTYPE_LITERAL_P (t))
5582 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
5583 if (DECL_DECLARED_CONSTEXPR_P (fn)
5584 && TREE_CODE (fn) != TEMPLATE_DECL
5585 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
5586 && !DECL_CONSTRUCTOR_P (fn))
5588 DECL_DECLARED_CONSTEXPR_P (fn) = false;
5589 if (!DECL_GENERATED_P (fn))
5591 error ("enclosing class of constexpr non-static member "
5592 "function %q+#D is not a literal type", fn);
5593 explain_non_literal_class (t);
5598 /* T is a non-literal type used in a context which requires a constant
5599 expression. Explain why it isn't literal. */
5601 void
5602 explain_non_literal_class (tree t)
5604 static hash_set<tree> *diagnosed;
5606 if (!CLASS_TYPE_P (t))
5607 return;
5608 t = TYPE_MAIN_VARIANT (t);
5610 if (diagnosed == NULL)
5611 diagnosed = new hash_set<tree>;
5612 if (diagnosed->add (t))
5613 /* Already explained. */
5614 return;
5616 inform (0, "%q+T is not literal because:", t);
5617 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
5618 inform (0, " %q+T has a non-trivial destructor", t);
5619 else if (CLASSTYPE_NON_AGGREGATE (t)
5620 && !TYPE_HAS_TRIVIAL_DFLT (t)
5621 && !TYPE_HAS_CONSTEXPR_CTOR (t))
5623 inform (0, " %q+T is not an aggregate, does not have a trivial "
5624 "default constructor, and has no constexpr constructor that "
5625 "is not a copy or move constructor", t);
5626 if (type_has_non_user_provided_default_constructor (t))
5628 /* Note that we can't simply call locate_ctor because when the
5629 constructor is deleted it just returns NULL_TREE. */
5630 tree fns;
5631 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5633 tree fn = OVL_CURRENT (fns);
5634 tree parms = TYPE_ARG_TYPES (TREE_TYPE (fn));
5636 parms = skip_artificial_parms_for (fn, parms);
5638 if (sufficient_parms_p (parms))
5640 if (DECL_DELETED_FN (fn))
5641 maybe_explain_implicit_delete (fn);
5642 else
5643 explain_invalid_constexpr_fn (fn);
5644 break;
5649 else
5651 tree binfo, base_binfo, field; int i;
5652 for (binfo = TYPE_BINFO (t), i = 0;
5653 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
5655 tree basetype = TREE_TYPE (base_binfo);
5656 if (!CLASSTYPE_LITERAL_P (basetype))
5658 inform (0, " base class %qT of %q+T is non-literal",
5659 basetype, t);
5660 explain_non_literal_class (basetype);
5661 return;
5664 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
5666 tree ftype;
5667 if (TREE_CODE (field) != FIELD_DECL)
5668 continue;
5669 ftype = TREE_TYPE (field);
5670 if (!literal_type_p (ftype))
5672 inform (DECL_SOURCE_LOCATION (field),
5673 " non-static data member %qD has non-literal type",
5674 field);
5675 if (CLASS_TYPE_P (ftype))
5676 explain_non_literal_class (ftype);
5678 if (CP_TYPE_VOLATILE_P (ftype))
5679 inform (DECL_SOURCE_LOCATION (field),
5680 " non-static data member %qD has volatile type", field);
5685 /* Check the validity of the bases and members declared in T. Add any
5686 implicitly-generated functions (like copy-constructors and
5687 assignment operators). Compute various flag bits (like
5688 CLASSTYPE_NON_LAYOUT_POD_T) for T. This routine works purely at the C++
5689 level: i.e., independently of the ABI in use. */
5691 static void
5692 check_bases_and_members (tree t)
5694 /* Nonzero if the implicitly generated copy constructor should take
5695 a non-const reference argument. */
5696 int cant_have_const_ctor;
5697 /* Nonzero if the implicitly generated assignment operator
5698 should take a non-const reference argument. */
5699 int no_const_asn_ref;
5700 tree access_decls;
5701 bool saved_complex_asn_ref;
5702 bool saved_nontrivial_dtor;
5703 tree fn;
5705 /* By default, we use const reference arguments and generate default
5706 constructors. */
5707 cant_have_const_ctor = 0;
5708 no_const_asn_ref = 0;
5710 /* Check all the base-classes. */
5711 check_bases (t, &cant_have_const_ctor,
5712 &no_const_asn_ref);
5714 /* Deduce noexcept on destructors. This needs to happen after we've set
5715 triviality flags appropriately for our bases. */
5716 if (cxx_dialect >= cxx11)
5717 deduce_noexcept_on_destructors (t);
5719 /* Check all the method declarations. */
5720 check_methods (t);
5722 /* Save the initial values of these flags which only indicate whether
5723 or not the class has user-provided functions. As we analyze the
5724 bases and members we can set these flags for other reasons. */
5725 saved_complex_asn_ref = TYPE_HAS_COMPLEX_COPY_ASSIGN (t);
5726 saved_nontrivial_dtor = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
5728 /* Check all the data member declarations. We cannot call
5729 check_field_decls until we have called check_bases check_methods,
5730 as check_field_decls depends on TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5731 being set appropriately. */
5732 check_field_decls (t, &access_decls,
5733 &cant_have_const_ctor,
5734 &no_const_asn_ref);
5736 /* A nearly-empty class has to be vptr-containing; a nearly empty
5737 class contains just a vptr. */
5738 if (!TYPE_CONTAINS_VPTR_P (t))
5739 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
5741 /* Do some bookkeeping that will guide the generation of implicitly
5742 declared member functions. */
5743 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
5744 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
5745 /* We need to call a constructor for this class if it has a
5746 user-provided constructor, or if the default constructor is going
5747 to initialize the vptr. (This is not an if-and-only-if;
5748 TYPE_NEEDS_CONSTRUCTING is set elsewhere if bases or members
5749 themselves need constructing.) */
5750 TYPE_NEEDS_CONSTRUCTING (t)
5751 |= (type_has_user_provided_constructor (t) || TYPE_CONTAINS_VPTR_P (t));
5752 /* [dcl.init.aggr]
5754 An aggregate is an array or a class with no user-provided
5755 constructors ... and no virtual functions.
5757 Again, other conditions for being an aggregate are checked
5758 elsewhere. */
5759 CLASSTYPE_NON_AGGREGATE (t)
5760 |= (type_has_user_provided_or_explicit_constructor (t)
5761 || TYPE_POLYMORPHIC_P (t));
5762 /* This is the C++98/03 definition of POD; it changed in C++0x, but we
5763 retain the old definition internally for ABI reasons. */
5764 CLASSTYPE_NON_LAYOUT_POD_P (t)
5765 |= (CLASSTYPE_NON_AGGREGATE (t)
5766 || saved_nontrivial_dtor || saved_complex_asn_ref);
5767 CLASSTYPE_NON_STD_LAYOUT (t) |= TYPE_CONTAINS_VPTR_P (t);
5768 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
5769 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
5770 TYPE_HAS_COMPLEX_DFLT (t) |= TYPE_CONTAINS_VPTR_P (t);
5772 /* If the only explicitly declared default constructor is user-provided,
5773 set TYPE_HAS_COMPLEX_DFLT. */
5774 if (!TYPE_HAS_COMPLEX_DFLT (t)
5775 && TYPE_HAS_DEFAULT_CONSTRUCTOR (t)
5776 && !type_has_non_user_provided_default_constructor (t))
5777 TYPE_HAS_COMPLEX_DFLT (t) = true;
5779 /* Warn if a public base of a polymorphic type has an accessible
5780 non-virtual destructor. It is only now that we know the class is
5781 polymorphic. Although a polymorphic base will have a already
5782 been diagnosed during its definition, we warn on use too. */
5783 if (TYPE_POLYMORPHIC_P (t) && warn_nonvdtor)
5785 tree binfo = TYPE_BINFO (t);
5786 vec<tree, va_gc> *accesses = BINFO_BASE_ACCESSES (binfo);
5787 tree base_binfo;
5788 unsigned i;
5790 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
5792 tree basetype = TREE_TYPE (base_binfo);
5794 if ((*accesses)[i] == access_public_node
5795 && (TYPE_POLYMORPHIC_P (basetype) || warn_ecpp)
5796 && accessible_nvdtor_p (basetype))
5797 warning (OPT_Wnon_virtual_dtor,
5798 "base class %q#T has accessible non-virtual destructor",
5799 basetype);
5803 /* If the class has no user-declared constructor, but does have
5804 non-static const or reference data members that can never be
5805 initialized, issue a warning. */
5806 if (warn_uninitialized
5807 /* Classes with user-declared constructors are presumed to
5808 initialize these members. */
5809 && !TYPE_HAS_USER_CONSTRUCTOR (t)
5810 /* Aggregates can be initialized with brace-enclosed
5811 initializers. */
5812 && CLASSTYPE_NON_AGGREGATE (t))
5814 tree field;
5816 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
5818 tree type;
5820 if (TREE_CODE (field) != FIELD_DECL
5821 || DECL_INITIAL (field) != NULL_TREE)
5822 continue;
5824 type = TREE_TYPE (field);
5825 if (TREE_CODE (type) == REFERENCE_TYPE)
5826 warning_at (DECL_SOURCE_LOCATION (field),
5827 OPT_Wuninitialized, "non-static reference %q#D "
5828 "in class without a constructor", field);
5829 else if (CP_TYPE_CONST_P (type)
5830 && (!CLASS_TYPE_P (type)
5831 || !TYPE_HAS_DEFAULT_CONSTRUCTOR (type)))
5832 warning_at (DECL_SOURCE_LOCATION (field),
5833 OPT_Wuninitialized, "non-static const member %q#D "
5834 "in class without a constructor", field);
5838 /* Synthesize any needed methods. */
5839 add_implicitly_declared_members (t, &access_decls,
5840 cant_have_const_ctor,
5841 no_const_asn_ref);
5843 /* Check defaulted declarations here so we have cant_have_const_ctor
5844 and don't need to worry about clones. */
5845 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
5846 if (!DECL_ARTIFICIAL (fn) && DECL_DEFAULTED_IN_CLASS_P (fn))
5848 int copy = copy_fn_p (fn);
5849 if (copy > 0)
5851 bool imp_const_p
5852 = (DECL_CONSTRUCTOR_P (fn) ? !cant_have_const_ctor
5853 : !no_const_asn_ref);
5854 bool fn_const_p = (copy == 2);
5856 if (fn_const_p && !imp_const_p)
5857 /* If the function is defaulted outside the class, we just
5858 give the synthesis error. */
5859 error ("%q+D declared to take const reference, but implicit "
5860 "declaration would take non-const", fn);
5862 defaulted_late_check (fn);
5865 if (LAMBDA_TYPE_P (t))
5867 /* "This class type is not an aggregate." */
5868 CLASSTYPE_NON_AGGREGATE (t) = 1;
5871 /* Compute the 'literal type' property before we
5872 do anything with non-static member functions. */
5873 finalize_literal_type_property (t);
5875 /* Create the in-charge and not-in-charge variants of constructors
5876 and destructors. */
5877 clone_constructors_and_destructors (t);
5879 /* Process the using-declarations. */
5880 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
5881 handle_using_decl (TREE_VALUE (access_decls), t);
5883 /* Build and sort the CLASSTYPE_METHOD_VEC. */
5884 finish_struct_methods (t);
5886 /* Figure out whether or not we will need a cookie when dynamically
5887 allocating an array of this type. */
5888 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
5889 = type_requires_array_cookie (t);
5892 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
5893 accordingly. If a new vfield was created (because T doesn't have a
5894 primary base class), then the newly created field is returned. It
5895 is not added to the TYPE_FIELDS list; it is the caller's
5896 responsibility to do that. Accumulate declared virtual functions
5897 on VIRTUALS_P. */
5899 static tree
5900 create_vtable_ptr (tree t, tree* virtuals_p)
5902 tree fn;
5904 /* Collect the virtual functions declared in T. */
5905 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
5906 if (TREE_CODE (fn) == FUNCTION_DECL
5907 && DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
5908 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
5910 tree new_virtual = make_node (TREE_LIST);
5912 BV_FN (new_virtual) = fn;
5913 BV_DELTA (new_virtual) = integer_zero_node;
5914 BV_VCALL_INDEX (new_virtual) = NULL_TREE;
5916 TREE_CHAIN (new_virtual) = *virtuals_p;
5917 *virtuals_p = new_virtual;
5920 /* If we couldn't find an appropriate base class, create a new field
5921 here. Even if there weren't any new virtual functions, we might need a
5922 new virtual function table if we're supposed to include vptrs in
5923 all classes that need them. */
5924 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
5926 /* We build this decl with vtbl_ptr_type_node, which is a
5927 `vtable_entry_type*'. It might seem more precise to use
5928 `vtable_entry_type (*)[N]' where N is the number of virtual
5929 functions. However, that would require the vtable pointer in
5930 base classes to have a different type than the vtable pointer
5931 in derived classes. We could make that happen, but that
5932 still wouldn't solve all the problems. In particular, the
5933 type-based alias analysis code would decide that assignments
5934 to the base class vtable pointer can't alias assignments to
5935 the derived class vtable pointer, since they have different
5936 types. Thus, in a derived class destructor, where the base
5937 class constructor was inlined, we could generate bad code for
5938 setting up the vtable pointer.
5940 Therefore, we use one type for all vtable pointers. We still
5941 use a type-correct type; it's just doesn't indicate the array
5942 bounds. That's better than using `void*' or some such; it's
5943 cleaner, and it let's the alias analysis code know that these
5944 stores cannot alias stores to void*! */
5945 tree field;
5947 field = build_decl (input_location,
5948 FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
5949 DECL_VIRTUAL_P (field) = 1;
5950 DECL_ARTIFICIAL (field) = 1;
5951 DECL_FIELD_CONTEXT (field) = t;
5952 DECL_FCONTEXT (field) = t;
5953 if (TYPE_PACKED (t))
5954 DECL_PACKED (field) = 1;
5956 TYPE_VFIELD (t) = field;
5958 /* This class is non-empty. */
5959 CLASSTYPE_EMPTY_P (t) = 0;
5961 return field;
5964 return NULL_TREE;
5967 /* Add OFFSET to all base types of BINFO which is a base in the
5968 hierarchy dominated by T.
5970 OFFSET, which is a type offset, is number of bytes. */
5972 static void
5973 propagate_binfo_offsets (tree binfo, tree offset)
5975 int i;
5976 tree primary_binfo;
5977 tree base_binfo;
5979 /* Update BINFO's offset. */
5980 BINFO_OFFSET (binfo)
5981 = convert (sizetype,
5982 size_binop (PLUS_EXPR,
5983 convert (ssizetype, BINFO_OFFSET (binfo)),
5984 offset));
5986 /* Find the primary base class. */
5987 primary_binfo = get_primary_binfo (binfo);
5989 if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
5990 propagate_binfo_offsets (primary_binfo, offset);
5992 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
5993 downwards. */
5994 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
5996 /* Don't do the primary base twice. */
5997 if (base_binfo == primary_binfo)
5998 continue;
6000 if (BINFO_VIRTUAL_P (base_binfo))
6001 continue;
6003 propagate_binfo_offsets (base_binfo, offset);
6007 /* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
6008 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
6009 empty subobjects of T. */
6011 static void
6012 layout_virtual_bases (record_layout_info rli, splay_tree offsets)
6014 tree vbase;
6015 tree t = rli->t;
6016 tree *next_field;
6018 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
6019 return;
6021 /* Find the last field. The artificial fields created for virtual
6022 bases will go after the last extant field to date. */
6023 next_field = &TYPE_FIELDS (t);
6024 while (*next_field)
6025 next_field = &DECL_CHAIN (*next_field);
6027 /* Go through the virtual bases, allocating space for each virtual
6028 base that is not already a primary base class. These are
6029 allocated in inheritance graph order. */
6030 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
6032 if (!BINFO_VIRTUAL_P (vbase))
6033 continue;
6035 if (!BINFO_PRIMARY_P (vbase))
6037 /* This virtual base is not a primary base of any class in the
6038 hierarchy, so we have to add space for it. */
6039 next_field = build_base_field (rli, vbase,
6040 offsets, next_field);
6045 /* Returns the offset of the byte just past the end of the base class
6046 BINFO. */
6048 static tree
6049 end_of_base (tree binfo)
6051 tree size;
6053 if (!CLASSTYPE_AS_BASE (BINFO_TYPE (binfo)))
6054 size = TYPE_SIZE_UNIT (char_type_node);
6055 else if (is_empty_class (BINFO_TYPE (binfo)))
6056 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
6057 allocate some space for it. It cannot have virtual bases, so
6058 TYPE_SIZE_UNIT is fine. */
6059 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
6060 else
6061 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
6063 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
6066 /* Returns the offset of the byte just past the end of the base class
6067 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
6068 only non-virtual bases are included. */
6070 static tree
6071 end_of_class (tree t, int include_virtuals_p)
6073 tree result = size_zero_node;
6074 vec<tree, va_gc> *vbases;
6075 tree binfo;
6076 tree base_binfo;
6077 tree offset;
6078 int i;
6080 for (binfo = TYPE_BINFO (t), i = 0;
6081 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6083 if (!include_virtuals_p
6084 && BINFO_VIRTUAL_P (base_binfo)
6085 && (!BINFO_PRIMARY_P (base_binfo)
6086 || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
6087 continue;
6089 offset = end_of_base (base_binfo);
6090 if (tree_int_cst_lt (result, offset))
6091 result = offset;
6094 if (include_virtuals_p)
6095 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
6096 vec_safe_iterate (vbases, i, &base_binfo); i++)
6098 offset = end_of_base (base_binfo);
6099 if (tree_int_cst_lt (result, offset))
6100 result = offset;
6103 return result;
6106 /* Warn about bases of T that are inaccessible because they are
6107 ambiguous. For example:
6109 struct S {};
6110 struct T : public S {};
6111 struct U : public S, public T {};
6113 Here, `(S*) new U' is not allowed because there are two `S'
6114 subobjects of U. */
6116 static void
6117 warn_about_ambiguous_bases (tree t)
6119 int i;
6120 vec<tree, va_gc> *vbases;
6121 tree basetype;
6122 tree binfo;
6123 tree base_binfo;
6125 /* If there are no repeated bases, nothing can be ambiguous. */
6126 if (!CLASSTYPE_REPEATED_BASE_P (t))
6127 return;
6129 /* Check direct bases. */
6130 for (binfo = TYPE_BINFO (t), i = 0;
6131 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6133 basetype = BINFO_TYPE (base_binfo);
6135 if (!uniquely_derived_from_p (basetype, t))
6136 warning (0, "direct base %qT inaccessible in %qT due to ambiguity",
6137 basetype, t);
6140 /* Check for ambiguous virtual bases. */
6141 if (extra_warnings)
6142 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
6143 vec_safe_iterate (vbases, i, &binfo); i++)
6145 basetype = BINFO_TYPE (binfo);
6147 if (!uniquely_derived_from_p (basetype, t))
6148 warning (OPT_Wextra, "virtual base %qT inaccessible in %qT due "
6149 "to ambiguity", basetype, t);
6153 /* Compare two INTEGER_CSTs K1 and K2. */
6155 static int
6156 splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
6158 return tree_int_cst_compare ((tree) k1, (tree) k2);
6161 /* Increase the size indicated in RLI to account for empty classes
6162 that are "off the end" of the class. */
6164 static void
6165 include_empty_classes (record_layout_info rli)
6167 tree eoc;
6168 tree rli_size;
6170 /* It might be the case that we grew the class to allocate a
6171 zero-sized base class. That won't be reflected in RLI, yet,
6172 because we are willing to overlay multiple bases at the same
6173 offset. However, now we need to make sure that RLI is big enough
6174 to reflect the entire class. */
6175 eoc = end_of_class (rli->t,
6176 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
6177 rli_size = rli_size_unit_so_far (rli);
6178 if (TREE_CODE (rli_size) == INTEGER_CST
6179 && tree_int_cst_lt (rli_size, eoc))
6181 /* The size should have been rounded to a whole byte. */
6182 gcc_assert (tree_int_cst_equal
6183 (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
6184 rli->bitpos
6185 = size_binop (PLUS_EXPR,
6186 rli->bitpos,
6187 size_binop (MULT_EXPR,
6188 convert (bitsizetype,
6189 size_binop (MINUS_EXPR,
6190 eoc, rli_size)),
6191 bitsize_int (BITS_PER_UNIT)));
6192 normalize_rli (rli);
6196 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
6197 BINFO_OFFSETs for all of the base-classes. Position the vtable
6198 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
6200 static void
6201 layout_class_type (tree t, tree *virtuals_p)
6203 tree non_static_data_members;
6204 tree field;
6205 tree vptr;
6206 record_layout_info rli;
6207 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
6208 types that appear at that offset. */
6209 splay_tree empty_base_offsets;
6210 /* True if the last field laid out was a bit-field. */
6211 bool last_field_was_bitfield = false;
6212 /* The location at which the next field should be inserted. */
6213 tree *next_field;
6214 /* T, as a base class. */
6215 tree base_t;
6217 /* Keep track of the first non-static data member. */
6218 non_static_data_members = TYPE_FIELDS (t);
6220 /* Start laying out the record. */
6221 rli = start_record_layout (t);
6223 /* Mark all the primary bases in the hierarchy. */
6224 determine_primary_bases (t);
6226 /* Create a pointer to our virtual function table. */
6227 vptr = create_vtable_ptr (t, virtuals_p);
6229 /* The vptr is always the first thing in the class. */
6230 if (vptr)
6232 DECL_CHAIN (vptr) = TYPE_FIELDS (t);
6233 TYPE_FIELDS (t) = vptr;
6234 next_field = &DECL_CHAIN (vptr);
6235 place_field (rli, vptr);
6237 else
6238 next_field = &TYPE_FIELDS (t);
6240 /* Build FIELD_DECLs for all of the non-virtual base-types. */
6241 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
6242 NULL, NULL);
6243 build_base_fields (rli, empty_base_offsets, next_field);
6245 /* Layout the non-static data members. */
6246 for (field = non_static_data_members; field; field = DECL_CHAIN (field))
6248 tree type;
6249 tree padding;
6251 /* We still pass things that aren't non-static data members to
6252 the back end, in case it wants to do something with them. */
6253 if (TREE_CODE (field) != FIELD_DECL)
6255 place_field (rli, field);
6256 /* If the static data member has incomplete type, keep track
6257 of it so that it can be completed later. (The handling
6258 of pending statics in finish_record_layout is
6259 insufficient; consider:
6261 struct S1;
6262 struct S2 { static S1 s1; };
6264 At this point, finish_record_layout will be called, but
6265 S1 is still incomplete.) */
6266 if (VAR_P (field))
6268 maybe_register_incomplete_var (field);
6269 /* The visibility of static data members is determined
6270 at their point of declaration, not their point of
6271 definition. */
6272 determine_visibility (field);
6274 continue;
6277 type = TREE_TYPE (field);
6278 if (type == error_mark_node)
6279 continue;
6281 padding = NULL_TREE;
6283 /* If this field is a bit-field whose width is greater than its
6284 type, then there are some special rules for allocating
6285 it. */
6286 if (DECL_C_BIT_FIELD (field)
6287 && tree_int_cst_lt (TYPE_SIZE (type), DECL_SIZE (field)))
6289 unsigned int itk;
6290 tree integer_type;
6291 bool was_unnamed_p = false;
6292 /* We must allocate the bits as if suitably aligned for the
6293 longest integer type that fits in this many bits. type
6294 of the field. Then, we are supposed to use the left over
6295 bits as additional padding. */
6296 for (itk = itk_char; itk != itk_none; ++itk)
6297 if (integer_types[itk] != NULL_TREE
6298 && (tree_int_cst_lt (size_int (MAX_FIXED_MODE_SIZE),
6299 TYPE_SIZE (integer_types[itk]))
6300 || tree_int_cst_lt (DECL_SIZE (field),
6301 TYPE_SIZE (integer_types[itk]))))
6302 break;
6304 /* ITK now indicates a type that is too large for the
6305 field. We have to back up by one to find the largest
6306 type that fits. */
6309 --itk;
6310 integer_type = integer_types[itk];
6311 } while (itk > 0 && integer_type == NULL_TREE);
6313 /* Figure out how much additional padding is required. */
6314 if (tree_int_cst_lt (TYPE_SIZE (integer_type), DECL_SIZE (field)))
6316 if (TREE_CODE (t) == UNION_TYPE)
6317 /* In a union, the padding field must have the full width
6318 of the bit-field; all fields start at offset zero. */
6319 padding = DECL_SIZE (field);
6320 else
6321 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
6322 TYPE_SIZE (integer_type));
6325 /* An unnamed bitfield does not normally affect the
6326 alignment of the containing class on a target where
6327 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
6328 make any exceptions for unnamed bitfields when the
6329 bitfields are longer than their types. Therefore, we
6330 temporarily give the field a name. */
6331 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
6333 was_unnamed_p = true;
6334 DECL_NAME (field) = make_anon_name ();
6337 DECL_SIZE (field) = TYPE_SIZE (integer_type);
6338 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
6339 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
6340 layout_nonempty_base_or_field (rli, field, NULL_TREE,
6341 empty_base_offsets);
6342 if (was_unnamed_p)
6343 DECL_NAME (field) = NULL_TREE;
6344 /* Now that layout has been performed, set the size of the
6345 field to the size of its declared type; the rest of the
6346 field is effectively invisible. */
6347 DECL_SIZE (field) = TYPE_SIZE (type);
6348 /* We must also reset the DECL_MODE of the field. */
6349 DECL_MODE (field) = TYPE_MODE (type);
6351 else
6352 layout_nonempty_base_or_field (rli, field, NULL_TREE,
6353 empty_base_offsets);
6355 /* Remember the location of any empty classes in FIELD. */
6356 record_subobject_offsets (TREE_TYPE (field),
6357 byte_position(field),
6358 empty_base_offsets,
6359 /*is_data_member=*/true);
6361 /* If a bit-field does not immediately follow another bit-field,
6362 and yet it starts in the middle of a byte, we have failed to
6363 comply with the ABI. */
6364 if (warn_abi
6365 && DECL_C_BIT_FIELD (field)
6366 /* The TREE_NO_WARNING flag gets set by Objective-C when
6367 laying out an Objective-C class. The ObjC ABI differs
6368 from the C++ ABI, and so we do not want a warning
6369 here. */
6370 && !TREE_NO_WARNING (field)
6371 && !last_field_was_bitfield
6372 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
6373 DECL_FIELD_BIT_OFFSET (field),
6374 bitsize_unit_node)))
6375 warning_at (DECL_SOURCE_LOCATION (field), OPT_Wabi,
6376 "offset of %qD is not ABI-compliant and may "
6377 "change in a future version of GCC", field);
6379 /* The middle end uses the type of expressions to determine the
6380 possible range of expression values. In order to optimize
6381 "x.i > 7" to "false" for a 2-bit bitfield "i", the middle end
6382 must be made aware of the width of "i", via its type.
6384 Because C++ does not have integer types of arbitrary width,
6385 we must (for the purposes of the front end) convert from the
6386 type assigned here to the declared type of the bitfield
6387 whenever a bitfield expression is used as an rvalue.
6388 Similarly, when assigning a value to a bitfield, the value
6389 must be converted to the type given the bitfield here. */
6390 if (DECL_C_BIT_FIELD (field))
6392 unsigned HOST_WIDE_INT width;
6393 tree ftype = TREE_TYPE (field);
6394 width = tree_to_uhwi (DECL_SIZE (field));
6395 if (width != TYPE_PRECISION (ftype))
6397 TREE_TYPE (field)
6398 = c_build_bitfield_integer_type (width,
6399 TYPE_UNSIGNED (ftype));
6400 TREE_TYPE (field)
6401 = cp_build_qualified_type (TREE_TYPE (field),
6402 cp_type_quals (ftype));
6406 /* If we needed additional padding after this field, add it
6407 now. */
6408 if (padding)
6410 tree padding_field;
6412 padding_field = build_decl (input_location,
6413 FIELD_DECL,
6414 NULL_TREE,
6415 char_type_node);
6416 DECL_BIT_FIELD (padding_field) = 1;
6417 DECL_SIZE (padding_field) = padding;
6418 DECL_CONTEXT (padding_field) = t;
6419 DECL_ARTIFICIAL (padding_field) = 1;
6420 DECL_IGNORED_P (padding_field) = 1;
6421 layout_nonempty_base_or_field (rli, padding_field,
6422 NULL_TREE,
6423 empty_base_offsets);
6426 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
6429 if (!integer_zerop (rli->bitpos))
6431 /* Make sure that we are on a byte boundary so that the size of
6432 the class without virtual bases will always be a round number
6433 of bytes. */
6434 rli->bitpos = round_up_loc (input_location, rli->bitpos, BITS_PER_UNIT);
6435 normalize_rli (rli);
6438 /* Delete all zero-width bit-fields from the list of fields. Now
6439 that the type is laid out they are no longer important. */
6440 remove_zero_width_bit_fields (t);
6442 /* Create the version of T used for virtual bases. We do not use
6443 make_class_type for this version; this is an artificial type. For
6444 a POD type, we just reuse T. */
6445 if (CLASSTYPE_NON_LAYOUT_POD_P (t) || CLASSTYPE_EMPTY_P (t))
6447 base_t = make_node (TREE_CODE (t));
6449 /* Set the size and alignment for the new type. */
6450 tree eoc;
6452 /* If the ABI version is not at least two, and the last
6453 field was a bit-field, RLI may not be on a byte
6454 boundary. In particular, rli_size_unit_so_far might
6455 indicate the last complete byte, while rli_size_so_far
6456 indicates the total number of bits used. Therefore,
6457 rli_size_so_far, rather than rli_size_unit_so_far, is
6458 used to compute TYPE_SIZE_UNIT. */
6459 eoc = end_of_class (t, /*include_virtuals_p=*/0);
6460 TYPE_SIZE_UNIT (base_t)
6461 = size_binop (MAX_EXPR,
6462 convert (sizetype,
6463 size_binop (CEIL_DIV_EXPR,
6464 rli_size_so_far (rli),
6465 bitsize_int (BITS_PER_UNIT))),
6466 eoc);
6467 TYPE_SIZE (base_t)
6468 = size_binop (MAX_EXPR,
6469 rli_size_so_far (rli),
6470 size_binop (MULT_EXPR,
6471 convert (bitsizetype, eoc),
6472 bitsize_int (BITS_PER_UNIT)));
6473 TYPE_ALIGN (base_t) = rli->record_align;
6474 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
6476 /* Copy the fields from T. */
6477 next_field = &TYPE_FIELDS (base_t);
6478 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
6479 if (TREE_CODE (field) == FIELD_DECL)
6481 *next_field = build_decl (input_location,
6482 FIELD_DECL,
6483 DECL_NAME (field),
6484 TREE_TYPE (field));
6485 DECL_CONTEXT (*next_field) = base_t;
6486 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
6487 DECL_FIELD_BIT_OFFSET (*next_field)
6488 = DECL_FIELD_BIT_OFFSET (field);
6489 DECL_SIZE (*next_field) = DECL_SIZE (field);
6490 DECL_MODE (*next_field) = DECL_MODE (field);
6491 next_field = &DECL_CHAIN (*next_field);
6494 /* Record the base version of the type. */
6495 CLASSTYPE_AS_BASE (t) = base_t;
6496 TYPE_CONTEXT (base_t) = t;
6498 else
6499 CLASSTYPE_AS_BASE (t) = t;
6501 /* Every empty class contains an empty class. */
6502 if (CLASSTYPE_EMPTY_P (t))
6503 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
6505 /* Set the TYPE_DECL for this type to contain the right
6506 value for DECL_OFFSET, so that we can use it as part
6507 of a COMPONENT_REF for multiple inheritance. */
6508 layout_decl (TYPE_MAIN_DECL (t), 0);
6510 /* Now fix up any virtual base class types that we left lying
6511 around. We must get these done before we try to lay out the
6512 virtual function table. As a side-effect, this will remove the
6513 base subobject fields. */
6514 layout_virtual_bases (rli, empty_base_offsets);
6516 /* Make sure that empty classes are reflected in RLI at this
6517 point. */
6518 include_empty_classes(rli);
6520 /* Make sure not to create any structures with zero size. */
6521 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
6522 place_field (rli,
6523 build_decl (input_location,
6524 FIELD_DECL, NULL_TREE, char_type_node));
6526 /* If this is a non-POD, declaring it packed makes a difference to how it
6527 can be used as a field; don't let finalize_record_size undo it. */
6528 if (TYPE_PACKED (t) && !layout_pod_type_p (t))
6529 rli->packed_maybe_necessary = true;
6531 /* Let the back end lay out the type. */
6532 finish_record_layout (rli, /*free_p=*/true);
6534 if (TYPE_SIZE_UNIT (t)
6535 && TREE_CODE (TYPE_SIZE_UNIT (t)) == INTEGER_CST
6536 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (t))
6537 && !valid_constant_size_p (TYPE_SIZE_UNIT (t)))
6538 error ("type %qT is too large", t);
6540 /* Warn about bases that can't be talked about due to ambiguity. */
6541 warn_about_ambiguous_bases (t);
6543 /* Now that we're done with layout, give the base fields the real types. */
6544 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
6545 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
6546 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
6548 /* Clean up. */
6549 splay_tree_delete (empty_base_offsets);
6551 if (CLASSTYPE_EMPTY_P (t)
6552 && tree_int_cst_lt (sizeof_biggest_empty_class,
6553 TYPE_SIZE_UNIT (t)))
6554 sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t);
6557 /* Determine the "key method" for the class type indicated by TYPE,
6558 and set CLASSTYPE_KEY_METHOD accordingly. */
6560 void
6561 determine_key_method (tree type)
6563 tree method;
6565 if (TYPE_FOR_JAVA (type)
6566 || processing_template_decl
6567 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
6568 || CLASSTYPE_INTERFACE_KNOWN (type))
6569 return;
6571 /* The key method is the first non-pure virtual function that is not
6572 inline at the point of class definition. On some targets the
6573 key function may not be inline; those targets should not call
6574 this function until the end of the translation unit. */
6575 for (method = TYPE_METHODS (type); method != NULL_TREE;
6576 method = DECL_CHAIN (method))
6577 if (TREE_CODE (method) == FUNCTION_DECL
6578 && DECL_VINDEX (method) != NULL_TREE
6579 && ! DECL_DECLARED_INLINE_P (method)
6580 && ! DECL_PURE_VIRTUAL_P (method))
6582 CLASSTYPE_KEY_METHOD (type) = method;
6583 break;
6586 return;
6590 /* Allocate and return an instance of struct sorted_fields_type with
6591 N fields. */
6593 static struct sorted_fields_type *
6594 sorted_fields_type_new (int n)
6596 struct sorted_fields_type *sft;
6597 sft = (sorted_fields_type *) ggc_internal_alloc (sizeof (sorted_fields_type)
6598 + n * sizeof (tree));
6599 sft->len = n;
6601 return sft;
6605 /* Perform processing required when the definition of T (a class type)
6606 is complete. */
6608 void
6609 finish_struct_1 (tree t)
6611 tree x;
6612 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
6613 tree virtuals = NULL_TREE;
6615 if (COMPLETE_TYPE_P (t))
6617 gcc_assert (MAYBE_CLASS_TYPE_P (t));
6618 error ("redefinition of %q#T", t);
6619 popclass ();
6620 return;
6623 /* If this type was previously laid out as a forward reference,
6624 make sure we lay it out again. */
6625 TYPE_SIZE (t) = NULL_TREE;
6626 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
6628 /* Make assumptions about the class; we'll reset the flags if
6629 necessary. */
6630 CLASSTYPE_EMPTY_P (t) = 1;
6631 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
6632 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
6633 CLASSTYPE_LITERAL_P (t) = true;
6635 /* Do end-of-class semantic processing: checking the validity of the
6636 bases and members and add implicitly generated methods. */
6637 check_bases_and_members (t);
6639 /* Find the key method. */
6640 if (TYPE_CONTAINS_VPTR_P (t))
6642 /* The Itanium C++ ABI permits the key method to be chosen when
6643 the class is defined -- even though the key method so
6644 selected may later turn out to be an inline function. On
6645 some systems (such as ARM Symbian OS) the key method cannot
6646 be determined until the end of the translation unit. On such
6647 systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
6648 will cause the class to be added to KEYED_CLASSES. Then, in
6649 finish_file we will determine the key method. */
6650 if (targetm.cxx.key_method_may_be_inline ())
6651 determine_key_method (t);
6653 /* If a polymorphic class has no key method, we may emit the vtable
6654 in every translation unit where the class definition appears. If
6655 we're devirtualizing, we can look into the vtable even if we
6656 aren't emitting it. */
6657 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
6658 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
6661 /* Layout the class itself. */
6662 layout_class_type (t, &virtuals);
6663 if (CLASSTYPE_AS_BASE (t) != t)
6664 /* We use the base type for trivial assignments, and hence it
6665 needs a mode. */
6666 compute_record_mode (CLASSTYPE_AS_BASE (t));
6668 virtuals = modify_all_vtables (t, nreverse (virtuals));
6670 /* If necessary, create the primary vtable for this class. */
6671 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
6673 /* We must enter these virtuals into the table. */
6674 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
6675 build_primary_vtable (NULL_TREE, t);
6676 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
6677 /* Here we know enough to change the type of our virtual
6678 function table, but we will wait until later this function. */
6679 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
6681 /* If we're warning about ABI tags, check the types of the new
6682 virtual functions. */
6683 if (warn_abi_tag)
6684 for (tree v = virtuals; v; v = TREE_CHAIN (v))
6685 check_abi_tags (t, TREE_VALUE (v));
6688 if (TYPE_CONTAINS_VPTR_P (t))
6690 int vindex;
6691 tree fn;
6693 if (BINFO_VTABLE (TYPE_BINFO (t)))
6694 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
6695 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
6696 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
6698 /* Add entries for virtual functions introduced by this class. */
6699 BINFO_VIRTUALS (TYPE_BINFO (t))
6700 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
6702 /* Set DECL_VINDEX for all functions declared in this class. */
6703 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
6705 fn = TREE_CHAIN (fn),
6706 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
6707 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
6709 tree fndecl = BV_FN (fn);
6711 if (DECL_THUNK_P (fndecl))
6712 /* A thunk. We should never be calling this entry directly
6713 from this vtable -- we'd use the entry for the non
6714 thunk base function. */
6715 DECL_VINDEX (fndecl) = NULL_TREE;
6716 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
6717 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
6721 finish_struct_bits (t);
6722 set_method_tm_attributes (t);
6723 if (flag_openmp || flag_openmp_simd)
6724 finish_omp_declare_simd_methods (t);
6726 /* Complete the rtl for any static member objects of the type we're
6727 working on. */
6728 for (x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
6729 if (VAR_P (x) && TREE_STATIC (x)
6730 && TREE_TYPE (x) != error_mark_node
6731 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
6732 DECL_MODE (x) = TYPE_MODE (t);
6734 /* Done with FIELDS...now decide whether to sort these for
6735 faster lookups later.
6737 We use a small number because most searches fail (succeeding
6738 ultimately as the search bores through the inheritance
6739 hierarchy), and we want this failure to occur quickly. */
6741 insert_into_classtype_sorted_fields (TYPE_FIELDS (t), t, 8);
6743 /* Complain if one of the field types requires lower visibility. */
6744 constrain_class_visibility (t);
6746 /* Make the rtl for any new vtables we have created, and unmark
6747 the base types we marked. */
6748 finish_vtbls (t);
6750 /* Build the VTT for T. */
6751 build_vtt (t);
6753 /* This warning does not make sense for Java classes, since they
6754 cannot have destructors. */
6755 if (!TYPE_FOR_JAVA (t) && warn_nonvdtor
6756 && TYPE_POLYMORPHIC_P (t) && accessible_nvdtor_p (t)
6757 && !CLASSTYPE_FINAL (t))
6758 warning (OPT_Wnon_virtual_dtor,
6759 "%q#T has virtual functions and accessible"
6760 " non-virtual destructor", t);
6762 complete_vars (t);
6764 if (warn_overloaded_virtual)
6765 warn_hidden (t);
6767 /* Class layout, assignment of virtual table slots, etc., is now
6768 complete. Give the back end a chance to tweak the visibility of
6769 the class or perform any other required target modifications. */
6770 targetm.cxx.adjust_class_at_definition (t);
6772 maybe_suppress_debug_info (t);
6774 if (flag_vtable_verify)
6775 vtv_save_class_info (t);
6777 dump_class_hierarchy (t);
6779 /* Finish debugging output for this type. */
6780 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
6782 if (TYPE_TRANSPARENT_AGGR (t))
6784 tree field = first_field (t);
6785 if (field == NULL_TREE || error_operand_p (field))
6787 error ("type transparent %q#T does not have any fields", t);
6788 TYPE_TRANSPARENT_AGGR (t) = 0;
6790 else if (DECL_ARTIFICIAL (field))
6792 if (DECL_FIELD_IS_BASE (field))
6793 error ("type transparent class %qT has base classes", t);
6794 else
6796 gcc_checking_assert (DECL_VIRTUAL_P (field));
6797 error ("type transparent class %qT has virtual functions", t);
6799 TYPE_TRANSPARENT_AGGR (t) = 0;
6801 else if (TYPE_MODE (t) != DECL_MODE (field))
6803 error ("type transparent %q#T cannot be made transparent because "
6804 "the type of the first field has a different ABI from the "
6805 "class overall", t);
6806 TYPE_TRANSPARENT_AGGR (t) = 0;
6811 /* Insert FIELDS into T for the sorted case if the FIELDS count is
6812 equal to THRESHOLD or greater than THRESHOLD. */
6814 static void
6815 insert_into_classtype_sorted_fields (tree fields, tree t, int threshold)
6817 int n_fields = count_fields (fields);
6818 if (n_fields >= threshold)
6820 struct sorted_fields_type *field_vec = sorted_fields_type_new (n_fields);
6821 add_fields_to_record_type (fields, field_vec, 0);
6822 qsort (field_vec->elts, n_fields, sizeof (tree), field_decl_cmp);
6823 CLASSTYPE_SORTED_FIELDS (t) = field_vec;
6827 /* Insert lately defined enum ENUMTYPE into T for the sorted case. */
6829 void
6830 insert_late_enum_def_into_classtype_sorted_fields (tree enumtype, tree t)
6832 struct sorted_fields_type *sorted_fields = CLASSTYPE_SORTED_FIELDS (t);
6833 if (sorted_fields)
6835 int i;
6836 int n_fields
6837 = list_length (TYPE_VALUES (enumtype)) + sorted_fields->len;
6838 struct sorted_fields_type *field_vec = sorted_fields_type_new (n_fields);
6840 for (i = 0; i < sorted_fields->len; ++i)
6841 field_vec->elts[i] = sorted_fields->elts[i];
6843 add_enum_fields_to_record_type (enumtype, field_vec,
6844 sorted_fields->len);
6845 qsort (field_vec->elts, n_fields, sizeof (tree), field_decl_cmp);
6846 CLASSTYPE_SORTED_FIELDS (t) = field_vec;
6850 /* When T was built up, the member declarations were added in reverse
6851 order. Rearrange them to declaration order. */
6853 void
6854 unreverse_member_declarations (tree t)
6856 tree next;
6857 tree prev;
6858 tree x;
6860 /* The following lists are all in reverse order. Put them in
6861 declaration order now. */
6862 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
6863 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
6865 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
6866 reverse order, so we can't just use nreverse. */
6867 prev = NULL_TREE;
6868 for (x = TYPE_FIELDS (t);
6869 x && TREE_CODE (x) != TYPE_DECL;
6870 x = next)
6872 next = DECL_CHAIN (x);
6873 DECL_CHAIN (x) = prev;
6874 prev = x;
6876 if (prev)
6878 DECL_CHAIN (TYPE_FIELDS (t)) = x;
6879 if (prev)
6880 TYPE_FIELDS (t) = prev;
6884 tree
6885 finish_struct (tree t, tree attributes)
6887 location_t saved_loc = input_location;
6889 /* Now that we've got all the field declarations, reverse everything
6890 as necessary. */
6891 unreverse_member_declarations (t);
6893 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6894 fixup_attribute_variants (t);
6896 /* Nadger the current location so that diagnostics point to the start of
6897 the struct, not the end. */
6898 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
6900 if (processing_template_decl)
6902 tree x;
6904 finish_struct_methods (t);
6905 TYPE_SIZE (t) = bitsize_zero_node;
6906 TYPE_SIZE_UNIT (t) = size_zero_node;
6908 /* We need to emit an error message if this type was used as a parameter
6909 and it is an abstract type, even if it is a template. We construct
6910 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
6911 account and we call complete_vars with this type, which will check
6912 the PARM_DECLS. Note that while the type is being defined,
6913 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
6914 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
6915 CLASSTYPE_PURE_VIRTUALS (t) = NULL;
6916 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
6917 if (DECL_PURE_VIRTUAL_P (x))
6918 vec_safe_push (CLASSTYPE_PURE_VIRTUALS (t), x);
6919 complete_vars (t);
6920 /* We need to add the target functions to the CLASSTYPE_METHOD_VEC if
6921 an enclosing scope is a template class, so that this function be
6922 found by lookup_fnfields_1 when the using declaration is not
6923 instantiated yet. */
6924 for (x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
6925 if (TREE_CODE (x) == USING_DECL)
6927 tree fn = strip_using_decl (x);
6928 if (is_overloaded_fn (fn))
6929 for (; fn; fn = OVL_NEXT (fn))
6930 add_method (t, OVL_CURRENT (fn), x);
6933 /* Remember current #pragma pack value. */
6934 TYPE_PRECISION (t) = maximum_field_alignment;
6936 /* Fix up any variants we've already built. */
6937 for (x = TYPE_NEXT_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
6939 TYPE_SIZE (x) = TYPE_SIZE (t);
6940 TYPE_SIZE_UNIT (x) = TYPE_SIZE_UNIT (t);
6941 TYPE_FIELDS (x) = TYPE_FIELDS (t);
6942 TYPE_METHODS (x) = TYPE_METHODS (t);
6945 else
6946 finish_struct_1 (t);
6948 if (is_std_init_list (t))
6950 /* People keep complaining that the compiler crashes on an invalid
6951 definition of initializer_list, so I guess we should explicitly
6952 reject it. What the compiler internals care about is that it's a
6953 template and has a pointer field followed by an integer field. */
6954 bool ok = false;
6955 if (processing_template_decl)
6957 tree f = next_initializable_field (TYPE_FIELDS (t));
6958 if (f && TREE_CODE (TREE_TYPE (f)) == POINTER_TYPE)
6960 f = next_initializable_field (DECL_CHAIN (f));
6961 if (f && same_type_p (TREE_TYPE (f), size_type_node))
6962 ok = true;
6965 if (!ok)
6966 fatal_error (input_location,
6967 "definition of std::initializer_list does not match "
6968 "#include <initializer_list>");
6971 input_location = saved_loc;
6973 TYPE_BEING_DEFINED (t) = 0;
6975 if (current_class_type)
6976 popclass ();
6977 else
6978 error ("trying to finish struct, but kicked out due to previous parse errors");
6980 if (processing_template_decl && at_function_scope_p ()
6981 /* Lambdas are defined by the LAMBDA_EXPR. */
6982 && !LAMBDA_TYPE_P (t))
6983 add_stmt (build_min (TAG_DEFN, t));
6985 return t;
6988 /* Hash table to avoid endless recursion when handling references. */
6989 static hash_table<nofree_ptr_hash<tree_node> > *fixed_type_or_null_ref_ht;
6991 /* Return the dynamic type of INSTANCE, if known.
6992 Used to determine whether the virtual function table is needed
6993 or not.
6995 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
6996 of our knowledge of its type. *NONNULL should be initialized
6997 before this function is called. */
6999 static tree
7000 fixed_type_or_null (tree instance, int *nonnull, int *cdtorp)
7002 #define RECUR(T) fixed_type_or_null((T), nonnull, cdtorp)
7004 switch (TREE_CODE (instance))
7006 case INDIRECT_REF:
7007 if (POINTER_TYPE_P (TREE_TYPE (instance)))
7008 return NULL_TREE;
7009 else
7010 return RECUR (TREE_OPERAND (instance, 0));
7012 case CALL_EXPR:
7013 /* This is a call to a constructor, hence it's never zero. */
7014 if (TREE_HAS_CONSTRUCTOR (instance))
7016 if (nonnull)
7017 *nonnull = 1;
7018 return TREE_TYPE (instance);
7020 return NULL_TREE;
7022 case SAVE_EXPR:
7023 /* This is a call to a constructor, hence it's never zero. */
7024 if (TREE_HAS_CONSTRUCTOR (instance))
7026 if (nonnull)
7027 *nonnull = 1;
7028 return TREE_TYPE (instance);
7030 return RECUR (TREE_OPERAND (instance, 0));
7032 case POINTER_PLUS_EXPR:
7033 case PLUS_EXPR:
7034 case MINUS_EXPR:
7035 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
7036 return RECUR (TREE_OPERAND (instance, 0));
7037 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
7038 /* Propagate nonnull. */
7039 return RECUR (TREE_OPERAND (instance, 0));
7041 return NULL_TREE;
7043 CASE_CONVERT:
7044 return RECUR (TREE_OPERAND (instance, 0));
7046 case ADDR_EXPR:
7047 instance = TREE_OPERAND (instance, 0);
7048 if (nonnull)
7050 /* Just because we see an ADDR_EXPR doesn't mean we're dealing
7051 with a real object -- given &p->f, p can still be null. */
7052 tree t = get_base_address (instance);
7053 /* ??? Probably should check DECL_WEAK here. */
7054 if (t && DECL_P (t))
7055 *nonnull = 1;
7057 return RECUR (instance);
7059 case COMPONENT_REF:
7060 /* If this component is really a base class reference, then the field
7061 itself isn't definitive. */
7062 if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
7063 return RECUR (TREE_OPERAND (instance, 0));
7064 return RECUR (TREE_OPERAND (instance, 1));
7066 case VAR_DECL:
7067 case FIELD_DECL:
7068 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
7069 && MAYBE_CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (instance))))
7071 if (nonnull)
7072 *nonnull = 1;
7073 return TREE_TYPE (TREE_TYPE (instance));
7075 /* fall through... */
7076 case TARGET_EXPR:
7077 case PARM_DECL:
7078 case RESULT_DECL:
7079 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (instance)))
7081 if (nonnull)
7082 *nonnull = 1;
7083 return TREE_TYPE (instance);
7085 else if (instance == current_class_ptr)
7087 if (nonnull)
7088 *nonnull = 1;
7090 /* if we're in a ctor or dtor, we know our type. If
7091 current_class_ptr is set but we aren't in a function, we're in
7092 an NSDMI (and therefore a constructor). */
7093 if (current_scope () != current_function_decl
7094 || (DECL_LANG_SPECIFIC (current_function_decl)
7095 && (DECL_CONSTRUCTOR_P (current_function_decl)
7096 || DECL_DESTRUCTOR_P (current_function_decl))))
7098 if (cdtorp)
7099 *cdtorp = 1;
7100 return TREE_TYPE (TREE_TYPE (instance));
7103 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
7105 /* We only need one hash table because it is always left empty. */
7106 if (!fixed_type_or_null_ref_ht)
7107 fixed_type_or_null_ref_ht
7108 = new hash_table<nofree_ptr_hash<tree_node> > (37);
7110 /* Reference variables should be references to objects. */
7111 if (nonnull)
7112 *nonnull = 1;
7114 /* Enter the INSTANCE in a table to prevent recursion; a
7115 variable's initializer may refer to the variable
7116 itself. */
7117 if (VAR_P (instance)
7118 && DECL_INITIAL (instance)
7119 && !type_dependent_expression_p_push (DECL_INITIAL (instance))
7120 && !fixed_type_or_null_ref_ht->find (instance))
7122 tree type;
7123 tree_node **slot;
7125 slot = fixed_type_or_null_ref_ht->find_slot (instance, INSERT);
7126 *slot = instance;
7127 type = RECUR (DECL_INITIAL (instance));
7128 fixed_type_or_null_ref_ht->remove_elt (instance);
7130 return type;
7133 return NULL_TREE;
7135 default:
7136 return NULL_TREE;
7138 #undef RECUR
7141 /* Return nonzero if the dynamic type of INSTANCE is known, and
7142 equivalent to the static type. We also handle the case where
7143 INSTANCE is really a pointer. Return negative if this is a
7144 ctor/dtor. There the dynamic type is known, but this might not be
7145 the most derived base of the original object, and hence virtual
7146 bases may not be laid out according to this type.
7148 Used to determine whether the virtual function table is needed
7149 or not.
7151 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
7152 of our knowledge of its type. *NONNULL should be initialized
7153 before this function is called. */
7156 resolves_to_fixed_type_p (tree instance, int* nonnull)
7158 tree t = TREE_TYPE (instance);
7159 int cdtorp = 0;
7160 tree fixed;
7162 /* processing_template_decl can be false in a template if we're in
7163 instantiate_non_dependent_expr, but we still want to suppress
7164 this check. */
7165 if (in_template_function ())
7167 /* In a template we only care about the type of the result. */
7168 if (nonnull)
7169 *nonnull = true;
7170 return true;
7173 fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
7174 if (fixed == NULL_TREE)
7175 return 0;
7176 if (POINTER_TYPE_P (t))
7177 t = TREE_TYPE (t);
7178 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
7179 return 0;
7180 return cdtorp ? -1 : 1;
7184 void
7185 init_class_processing (void)
7187 current_class_depth = 0;
7188 current_class_stack_size = 10;
7189 current_class_stack
7190 = XNEWVEC (struct class_stack_node, current_class_stack_size);
7191 vec_alloc (local_classes, 8);
7192 sizeof_biggest_empty_class = size_zero_node;
7194 ridpointers[(int) RID_PUBLIC] = access_public_node;
7195 ridpointers[(int) RID_PRIVATE] = access_private_node;
7196 ridpointers[(int) RID_PROTECTED] = access_protected_node;
7199 /* Restore the cached PREVIOUS_CLASS_LEVEL. */
7201 static void
7202 restore_class_cache (void)
7204 tree type;
7206 /* We are re-entering the same class we just left, so we don't
7207 have to search the whole inheritance matrix to find all the
7208 decls to bind again. Instead, we install the cached
7209 class_shadowed list and walk through it binding names. */
7210 push_binding_level (previous_class_level);
7211 class_binding_level = previous_class_level;
7212 /* Restore IDENTIFIER_TYPE_VALUE. */
7213 for (type = class_binding_level->type_shadowed;
7214 type;
7215 type = TREE_CHAIN (type))
7216 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
7219 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
7220 appropriate for TYPE.
7222 So that we may avoid calls to lookup_name, we cache the _TYPE
7223 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
7225 For multiple inheritance, we perform a two-pass depth-first search
7226 of the type lattice. */
7228 void
7229 pushclass (tree type)
7231 class_stack_node_t csn;
7233 type = TYPE_MAIN_VARIANT (type);
7235 /* Make sure there is enough room for the new entry on the stack. */
7236 if (current_class_depth + 1 >= current_class_stack_size)
7238 current_class_stack_size *= 2;
7239 current_class_stack
7240 = XRESIZEVEC (struct class_stack_node, current_class_stack,
7241 current_class_stack_size);
7244 /* Insert a new entry on the class stack. */
7245 csn = current_class_stack + current_class_depth;
7246 csn->name = current_class_name;
7247 csn->type = current_class_type;
7248 csn->access = current_access_specifier;
7249 csn->names_used = 0;
7250 csn->hidden = 0;
7251 current_class_depth++;
7253 /* Now set up the new type. */
7254 current_class_name = TYPE_NAME (type);
7255 if (TREE_CODE (current_class_name) == TYPE_DECL)
7256 current_class_name = DECL_NAME (current_class_name);
7257 current_class_type = type;
7259 /* By default, things in classes are private, while things in
7260 structures or unions are public. */
7261 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
7262 ? access_private_node
7263 : access_public_node);
7265 if (previous_class_level
7266 && type != previous_class_level->this_entity
7267 && current_class_depth == 1)
7269 /* Forcibly remove any old class remnants. */
7270 invalidate_class_lookup_cache ();
7273 if (!previous_class_level
7274 || type != previous_class_level->this_entity
7275 || current_class_depth > 1)
7276 pushlevel_class ();
7277 else
7278 restore_class_cache ();
7281 /* When we exit a toplevel class scope, we save its binding level so
7282 that we can restore it quickly. Here, we've entered some other
7283 class, so we must invalidate our cache. */
7285 void
7286 invalidate_class_lookup_cache (void)
7288 previous_class_level = NULL;
7291 /* Get out of the current class scope. If we were in a class scope
7292 previously, that is the one popped to. */
7294 void
7295 popclass (void)
7297 poplevel_class ();
7299 current_class_depth--;
7300 current_class_name = current_class_stack[current_class_depth].name;
7301 current_class_type = current_class_stack[current_class_depth].type;
7302 current_access_specifier = current_class_stack[current_class_depth].access;
7303 if (current_class_stack[current_class_depth].names_used)
7304 splay_tree_delete (current_class_stack[current_class_depth].names_used);
7307 /* Mark the top of the class stack as hidden. */
7309 void
7310 push_class_stack (void)
7312 if (current_class_depth)
7313 ++current_class_stack[current_class_depth - 1].hidden;
7316 /* Mark the top of the class stack as un-hidden. */
7318 void
7319 pop_class_stack (void)
7321 if (current_class_depth)
7322 --current_class_stack[current_class_depth - 1].hidden;
7325 /* Returns 1 if the class type currently being defined is either T or
7326 a nested type of T. Returns the type from the current_class_stack,
7327 which might be equivalent to but not equal to T in case of
7328 constrained partial specializations. */
7330 tree
7331 currently_open_class (tree t)
7333 int i;
7335 if (!CLASS_TYPE_P (t))
7336 return NULL_TREE;
7338 t = TYPE_MAIN_VARIANT (t);
7340 /* We start looking from 1 because entry 0 is from global scope,
7341 and has no type. */
7342 for (i = current_class_depth; i > 0; --i)
7344 tree c;
7345 if (i == current_class_depth)
7346 c = current_class_type;
7347 else
7349 if (current_class_stack[i].hidden)
7350 break;
7351 c = current_class_stack[i].type;
7353 if (!c)
7354 continue;
7355 if (same_type_p (c, t))
7356 return c;
7358 return NULL_TREE;
7361 /* If either current_class_type or one of its enclosing classes are derived
7362 from T, return the appropriate type. Used to determine how we found
7363 something via unqualified lookup. */
7365 tree
7366 currently_open_derived_class (tree t)
7368 int i;
7370 /* The bases of a dependent type are unknown. */
7371 if (dependent_type_p (t))
7372 return NULL_TREE;
7374 if (!current_class_type)
7375 return NULL_TREE;
7377 if (DERIVED_FROM_P (t, current_class_type))
7378 return current_class_type;
7380 for (i = current_class_depth - 1; i > 0; --i)
7382 if (current_class_stack[i].hidden)
7383 break;
7384 if (DERIVED_FROM_P (t, current_class_stack[i].type))
7385 return current_class_stack[i].type;
7388 return NULL_TREE;
7391 /* Return the outermost enclosing class type that is still open, or
7392 NULL_TREE. */
7394 tree
7395 outermost_open_class (void)
7397 if (!current_class_type)
7398 return NULL_TREE;
7399 tree r = NULL_TREE;
7400 if (TYPE_BEING_DEFINED (current_class_type))
7401 r = current_class_type;
7402 for (int i = current_class_depth - 1; i > 0; --i)
7404 if (current_class_stack[i].hidden)
7405 break;
7406 tree t = current_class_stack[i].type;
7407 if (!TYPE_BEING_DEFINED (t))
7408 break;
7409 r = t;
7411 return r;
7414 /* Returns the innermost class type which is not a lambda closure type. */
7416 tree
7417 current_nonlambda_class_type (void)
7419 int i;
7421 /* We start looking from 1 because entry 0 is from global scope,
7422 and has no type. */
7423 for (i = current_class_depth; i > 0; --i)
7425 tree c;
7426 if (i == current_class_depth)
7427 c = current_class_type;
7428 else
7430 if (current_class_stack[i].hidden)
7431 break;
7432 c = current_class_stack[i].type;
7434 if (!c)
7435 continue;
7436 if (!LAMBDA_TYPE_P (c))
7437 return c;
7439 return NULL_TREE;
7442 /* When entering a class scope, all enclosing class scopes' names with
7443 static meaning (static variables, static functions, types and
7444 enumerators) have to be visible. This recursive function calls
7445 pushclass for all enclosing class contexts until global or a local
7446 scope is reached. TYPE is the enclosed class. */
7448 void
7449 push_nested_class (tree type)
7451 /* A namespace might be passed in error cases, like A::B:C. */
7452 if (type == NULL_TREE
7453 || !CLASS_TYPE_P (type))
7454 return;
7456 push_nested_class (DECL_CONTEXT (TYPE_MAIN_DECL (type)));
7458 pushclass (type);
7461 /* Undoes a push_nested_class call. */
7463 void
7464 pop_nested_class (void)
7466 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
7468 popclass ();
7469 if (context && CLASS_TYPE_P (context))
7470 pop_nested_class ();
7473 /* Returns the number of extern "LANG" blocks we are nested within. */
7476 current_lang_depth (void)
7478 return vec_safe_length (current_lang_base);
7481 /* Set global variables CURRENT_LANG_NAME to appropriate value
7482 so that behavior of name-mangling machinery is correct. */
7484 void
7485 push_lang_context (tree name)
7487 vec_safe_push (current_lang_base, current_lang_name);
7489 if (name == lang_name_cplusplus)
7491 current_lang_name = name;
7493 else if (name == lang_name_java)
7495 current_lang_name = name;
7496 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
7497 (See record_builtin_java_type in decl.c.) However, that causes
7498 incorrect debug entries if these types are actually used.
7499 So we re-enable debug output after extern "Java". */
7500 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
7501 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
7502 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
7503 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
7504 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
7505 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
7506 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
7507 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
7509 else if (name == lang_name_c)
7511 current_lang_name = name;
7513 else
7514 error ("language string %<\"%E\"%> not recognized", name);
7517 /* Get out of the current language scope. */
7519 void
7520 pop_lang_context (void)
7522 current_lang_name = current_lang_base->pop ();
7525 /* Type instantiation routines. */
7527 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
7528 matches the TARGET_TYPE. If there is no satisfactory match, return
7529 error_mark_node, and issue an error & warning messages under
7530 control of FLAGS. Permit pointers to member function if FLAGS
7531 permits. If TEMPLATE_ONLY, the name of the overloaded function was
7532 a template-id, and EXPLICIT_TARGS are the explicitly provided
7533 template arguments.
7535 If OVERLOAD is for one or more member functions, then ACCESS_PATH
7536 is the base path used to reference those member functions. If
7537 the address is resolved to a member function, access checks will be
7538 performed and errors issued if appropriate. */
7540 static tree
7541 resolve_address_of_overloaded_function (tree target_type,
7542 tree overload,
7543 tsubst_flags_t complain,
7544 bool template_only,
7545 tree explicit_targs,
7546 tree access_path)
7548 /* Here's what the standard says:
7550 [over.over]
7552 If the name is a function template, template argument deduction
7553 is done, and if the argument deduction succeeds, the deduced
7554 arguments are used to generate a single template function, which
7555 is added to the set of overloaded functions considered.
7557 Non-member functions and static member functions match targets of
7558 type "pointer-to-function" or "reference-to-function." Nonstatic
7559 member functions match targets of type "pointer-to-member
7560 function;" the function type of the pointer to member is used to
7561 select the member function from the set of overloaded member
7562 functions. If a nonstatic member function is selected, the
7563 reference to the overloaded function name is required to have the
7564 form of a pointer to member as described in 5.3.1.
7566 If more than one function is selected, any template functions in
7567 the set are eliminated if the set also contains a non-template
7568 function, and any given template function is eliminated if the
7569 set contains a second template function that is more specialized
7570 than the first according to the partial ordering rules 14.5.5.2.
7571 After such eliminations, if any, there shall remain exactly one
7572 selected function. */
7574 int is_ptrmem = 0;
7575 /* We store the matches in a TREE_LIST rooted here. The functions
7576 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
7577 interoperability with most_specialized_instantiation. */
7578 tree matches = NULL_TREE;
7579 tree fn;
7580 tree target_fn_type;
7582 /* By the time we get here, we should be seeing only real
7583 pointer-to-member types, not the internal POINTER_TYPE to
7584 METHOD_TYPE representation. */
7585 gcc_assert (!TYPE_PTR_P (target_type)
7586 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
7588 gcc_assert (is_overloaded_fn (overload));
7590 /* Check that the TARGET_TYPE is reasonable. */
7591 if (TYPE_PTRFN_P (target_type)
7592 || TYPE_REFFN_P (target_type))
7593 /* This is OK. */;
7594 else if (TYPE_PTRMEMFUNC_P (target_type))
7595 /* This is OK, too. */
7596 is_ptrmem = 1;
7597 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
7598 /* This is OK, too. This comes from a conversion to reference
7599 type. */
7600 target_type = build_reference_type (target_type);
7601 else
7603 if (complain & tf_error)
7604 error ("cannot resolve overloaded function %qD based on"
7605 " conversion to type %qT",
7606 DECL_NAME (OVL_FUNCTION (overload)), target_type);
7607 return error_mark_node;
7610 /* Non-member functions and static member functions match targets of type
7611 "pointer-to-function" or "reference-to-function." Nonstatic member
7612 functions match targets of type "pointer-to-member-function;" the
7613 function type of the pointer to member is used to select the member
7614 function from the set of overloaded member functions.
7616 So figure out the FUNCTION_TYPE that we want to match against. */
7617 target_fn_type = static_fn_type (target_type);
7619 /* If we can find a non-template function that matches, we can just
7620 use it. There's no point in generating template instantiations
7621 if we're just going to throw them out anyhow. But, of course, we
7622 can only do this when we don't *need* a template function. */
7623 if (!template_only)
7625 tree fns;
7627 for (fns = overload; fns; fns = OVL_NEXT (fns))
7629 tree fn = OVL_CURRENT (fns);
7631 if (TREE_CODE (fn) == TEMPLATE_DECL)
7632 /* We're not looking for templates just yet. */
7633 continue;
7635 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7636 != is_ptrmem)
7637 /* We're looking for a non-static member, and this isn't
7638 one, or vice versa. */
7639 continue;
7641 /* Ignore functions which haven't been explicitly
7642 declared. */
7643 if (DECL_ANTICIPATED (fn))
7644 continue;
7646 /* See if there's a match. */
7647 tree fntype = static_fn_type (fn);
7648 if (same_type_p (target_fn_type, fntype)
7649 || can_convert_tx_safety (target_fn_type, fntype))
7650 matches = tree_cons (fn, NULL_TREE, matches);
7654 /* Now, if we've already got a match (or matches), there's no need
7655 to proceed to the template functions. But, if we don't have a
7656 match we need to look at them, too. */
7657 if (!matches)
7659 tree target_arg_types;
7660 tree target_ret_type;
7661 tree fns;
7662 tree *args;
7663 unsigned int nargs, ia;
7664 tree arg;
7666 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
7667 target_ret_type = TREE_TYPE (target_fn_type);
7669 nargs = list_length (target_arg_types);
7670 args = XALLOCAVEC (tree, nargs);
7671 for (arg = target_arg_types, ia = 0;
7672 arg != NULL_TREE && arg != void_list_node;
7673 arg = TREE_CHAIN (arg), ++ia)
7674 args[ia] = TREE_VALUE (arg);
7675 nargs = ia;
7677 for (fns = overload; fns; fns = OVL_NEXT (fns))
7679 tree fn = OVL_CURRENT (fns);
7680 tree instantiation;
7681 tree targs;
7683 if (TREE_CODE (fn) != TEMPLATE_DECL)
7684 /* We're only looking for templates. */
7685 continue;
7687 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7688 != is_ptrmem)
7689 /* We're not looking for a non-static member, and this is
7690 one, or vice versa. */
7691 continue;
7693 tree ret = target_ret_type;
7695 /* If the template has a deduced return type, don't expose it to
7696 template argument deduction. */
7697 if (undeduced_auto_decl (fn))
7698 ret = NULL_TREE;
7700 /* Try to do argument deduction. */
7701 targs = make_tree_vec (DECL_NTPARMS (fn));
7702 instantiation = fn_type_unification (fn, explicit_targs, targs, args,
7703 nargs, ret,
7704 DEDUCE_EXACT, LOOKUP_NORMAL,
7705 false, false);
7706 if (instantiation == error_mark_node)
7707 /* Instantiation failed. */
7708 continue;
7710 /* Constraints must be satisfied. This is done before
7711 return type deduction since that instantiates the
7712 function. */
7713 if (flag_concepts && !constraints_satisfied_p (instantiation))
7714 continue;
7716 /* And now force instantiation to do return type deduction. */
7717 if (undeduced_auto_decl (instantiation))
7719 ++function_depth;
7720 instantiate_decl (instantiation, /*defer*/false, /*class*/false);
7721 --function_depth;
7723 require_deduced_type (instantiation);
7726 /* See if there's a match. */
7727 tree fntype = static_fn_type (instantiation);
7728 if (same_type_p (target_fn_type, fntype)
7729 || can_convert_tx_safety (target_fn_type, fntype))
7730 matches = tree_cons (instantiation, fn, matches);
7733 /* Now, remove all but the most specialized of the matches. */
7734 if (matches)
7736 tree match = most_specialized_instantiation (matches);
7738 if (match != error_mark_node)
7739 matches = tree_cons (TREE_PURPOSE (match),
7740 NULL_TREE,
7741 NULL_TREE);
7745 /* Now we should have exactly one function in MATCHES. */
7746 if (matches == NULL_TREE)
7748 /* There were *no* matches. */
7749 if (complain & tf_error)
7751 error ("no matches converting function %qD to type %q#T",
7752 DECL_NAME (OVL_CURRENT (overload)),
7753 target_type);
7755 print_candidates (overload);
7757 return error_mark_node;
7759 else if (TREE_CHAIN (matches))
7761 /* There were too many matches. First check if they're all
7762 the same function. */
7763 tree match = NULL_TREE;
7765 fn = TREE_PURPOSE (matches);
7767 /* For multi-versioned functions, more than one match is just fine and
7768 decls_match will return false as they are different. */
7769 for (match = TREE_CHAIN (matches); match; match = TREE_CHAIN (match))
7770 if (!decls_match (fn, TREE_PURPOSE (match))
7771 && !targetm.target_option.function_versions
7772 (fn, TREE_PURPOSE (match)))
7773 break;
7775 if (match)
7777 if (complain & tf_error)
7779 error ("converting overloaded function %qD to type %q#T is ambiguous",
7780 DECL_NAME (OVL_FUNCTION (overload)),
7781 target_type);
7783 /* Since print_candidates expects the functions in the
7784 TREE_VALUE slot, we flip them here. */
7785 for (match = matches; match; match = TREE_CHAIN (match))
7786 TREE_VALUE (match) = TREE_PURPOSE (match);
7788 print_candidates (matches);
7791 return error_mark_node;
7795 /* Good, exactly one match. Now, convert it to the correct type. */
7796 fn = TREE_PURPOSE (matches);
7798 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
7799 && !(complain & tf_ptrmem_ok) && !flag_ms_extensions)
7801 static int explained;
7803 if (!(complain & tf_error))
7804 return error_mark_node;
7806 permerror (input_location, "assuming pointer to member %qD", fn);
7807 if (!explained)
7809 inform (input_location, "(a pointer to member can only be formed with %<&%E%>)", fn);
7810 explained = 1;
7814 /* If a pointer to a function that is multi-versioned is requested, the
7815 pointer to the dispatcher function is returned instead. This works
7816 well because indirectly calling the function will dispatch the right
7817 function version at run-time. */
7818 if (DECL_FUNCTION_VERSIONED (fn))
7820 fn = get_function_version_dispatcher (fn);
7821 if (fn == NULL)
7822 return error_mark_node;
7823 /* Mark all the versions corresponding to the dispatcher as used. */
7824 if (!(complain & tf_conv))
7825 mark_versions_used (fn);
7828 /* If we're doing overload resolution purely for the purpose of
7829 determining conversion sequences, we should not consider the
7830 function used. If this conversion sequence is selected, the
7831 function will be marked as used at this point. */
7832 if (!(complain & tf_conv))
7834 /* Make =delete work with SFINAE. */
7835 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
7836 return error_mark_node;
7837 if (!mark_used (fn, complain) && !(complain & tf_error))
7838 return error_mark_node;
7841 /* We could not check access to member functions when this
7842 expression was originally created since we did not know at that
7843 time to which function the expression referred. */
7844 if (DECL_FUNCTION_MEMBER_P (fn))
7846 gcc_assert (access_path);
7847 perform_or_defer_access_check (access_path, fn, fn, complain);
7850 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
7851 return cp_build_addr_expr (fn, complain);
7852 else
7854 /* The target must be a REFERENCE_TYPE. Above, cp_build_unary_op
7855 will mark the function as addressed, but here we must do it
7856 explicitly. */
7857 cxx_mark_addressable (fn);
7859 return fn;
7863 /* This function will instantiate the type of the expression given in
7864 RHS to match the type of LHSTYPE. If errors exist, then return
7865 error_mark_node. COMPLAIN is a bit mask. If TF_ERROR is set, then
7866 we complain on errors. If we are not complaining, never modify rhs,
7867 as overload resolution wants to try many possible instantiations, in
7868 the hope that at least one will work.
7870 For non-recursive calls, LHSTYPE should be a function, pointer to
7871 function, or a pointer to member function. */
7873 tree
7874 instantiate_type (tree lhstype, tree rhs, tsubst_flags_t complain)
7876 tsubst_flags_t complain_in = complain;
7877 tree access_path = NULL_TREE;
7879 complain &= ~tf_ptrmem_ok;
7881 if (lhstype == unknown_type_node)
7883 if (complain & tf_error)
7884 error ("not enough type information");
7885 return error_mark_node;
7888 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
7890 tree fntype = non_reference (lhstype);
7891 if (same_type_p (fntype, TREE_TYPE (rhs)))
7892 return rhs;
7893 if (flag_ms_extensions
7894 && TYPE_PTRMEMFUNC_P (fntype)
7895 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
7896 /* Microsoft allows `A::f' to be resolved to a
7897 pointer-to-member. */
7899 else
7901 if (complain & tf_error)
7902 error ("cannot convert %qE from type %qT to type %qT",
7903 rhs, TREE_TYPE (rhs), fntype);
7904 return error_mark_node;
7908 if (BASELINK_P (rhs))
7910 access_path = BASELINK_ACCESS_BINFO (rhs);
7911 rhs = BASELINK_FUNCTIONS (rhs);
7914 /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
7915 deduce any type information. */
7916 if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
7918 if (complain & tf_error)
7919 error ("not enough type information");
7920 return error_mark_node;
7923 /* There only a few kinds of expressions that may have a type
7924 dependent on overload resolution. */
7925 gcc_assert (TREE_CODE (rhs) == ADDR_EXPR
7926 || TREE_CODE (rhs) == COMPONENT_REF
7927 || is_overloaded_fn (rhs)
7928 || (flag_ms_extensions && TREE_CODE (rhs) == FUNCTION_DECL));
7930 /* This should really only be used when attempting to distinguish
7931 what sort of a pointer to function we have. For now, any
7932 arithmetic operation which is not supported on pointers
7933 is rejected as an error. */
7935 switch (TREE_CODE (rhs))
7937 case COMPONENT_REF:
7939 tree member = TREE_OPERAND (rhs, 1);
7941 member = instantiate_type (lhstype, member, complain);
7942 if (member != error_mark_node
7943 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
7944 /* Do not lose object's side effects. */
7945 return build2 (COMPOUND_EXPR, TREE_TYPE (member),
7946 TREE_OPERAND (rhs, 0), member);
7947 return member;
7950 case OFFSET_REF:
7951 rhs = TREE_OPERAND (rhs, 1);
7952 if (BASELINK_P (rhs))
7953 return instantiate_type (lhstype, rhs, complain_in);
7955 /* This can happen if we are forming a pointer-to-member for a
7956 member template. */
7957 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
7959 /* Fall through. */
7961 case TEMPLATE_ID_EXPR:
7963 tree fns = TREE_OPERAND (rhs, 0);
7964 tree args = TREE_OPERAND (rhs, 1);
7966 return
7967 resolve_address_of_overloaded_function (lhstype, fns, complain_in,
7968 /*template_only=*/true,
7969 args, access_path);
7972 case OVERLOAD:
7973 case FUNCTION_DECL:
7974 return
7975 resolve_address_of_overloaded_function (lhstype, rhs, complain_in,
7976 /*template_only=*/false,
7977 /*explicit_targs=*/NULL_TREE,
7978 access_path);
7980 case ADDR_EXPR:
7982 if (PTRMEM_OK_P (rhs))
7983 complain |= tf_ptrmem_ok;
7985 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), complain);
7988 case ERROR_MARK:
7989 return error_mark_node;
7991 default:
7992 gcc_unreachable ();
7994 return error_mark_node;
7997 /* Return the name of the virtual function pointer field
7998 (as an IDENTIFIER_NODE) for the given TYPE. Note that
7999 this may have to look back through base types to find the
8000 ultimate field name. (For single inheritance, these could
8001 all be the same name. Who knows for multiple inheritance). */
8003 static tree
8004 get_vfield_name (tree type)
8006 tree binfo, base_binfo;
8007 char *buf;
8009 for (binfo = TYPE_BINFO (type);
8010 BINFO_N_BASE_BINFOS (binfo);
8011 binfo = base_binfo)
8013 base_binfo = BINFO_BASE_BINFO (binfo, 0);
8015 if (BINFO_VIRTUAL_P (base_binfo)
8016 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
8017 break;
8020 type = BINFO_TYPE (binfo);
8021 buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
8022 + TYPE_NAME_LENGTH (type) + 2);
8023 sprintf (buf, VFIELD_NAME_FORMAT,
8024 IDENTIFIER_POINTER (constructor_name (type)));
8025 return get_identifier (buf);
8028 void
8029 print_class_statistics (void)
8031 if (! GATHER_STATISTICS)
8032 return;
8034 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
8035 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
8036 if (n_vtables)
8038 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
8039 n_vtables, n_vtable_searches);
8040 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
8041 n_vtable_entries, n_vtable_elems);
8045 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
8046 according to [class]:
8047 The class-name is also inserted
8048 into the scope of the class itself. For purposes of access checking,
8049 the inserted class name is treated as if it were a public member name. */
8051 void
8052 build_self_reference (void)
8054 tree name = constructor_name (current_class_type);
8055 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
8056 tree saved_cas;
8058 DECL_NONLOCAL (value) = 1;
8059 DECL_CONTEXT (value) = current_class_type;
8060 DECL_ARTIFICIAL (value) = 1;
8061 SET_DECL_SELF_REFERENCE_P (value);
8062 set_underlying_type (value);
8064 if (processing_template_decl)
8065 value = push_template_decl (value);
8067 saved_cas = current_access_specifier;
8068 current_access_specifier = access_public_node;
8069 finish_member_declaration (value);
8070 current_access_specifier = saved_cas;
8073 /* Returns 1 if TYPE contains only padding bytes. */
8076 is_empty_class (tree type)
8078 if (type == error_mark_node)
8079 return 0;
8081 if (! CLASS_TYPE_P (type))
8082 return 0;
8084 return CLASSTYPE_EMPTY_P (type);
8087 /* Returns true if TYPE contains no actual data, just various
8088 possible combinations of empty classes and possibly a vptr. */
8090 bool
8091 is_really_empty_class (tree type)
8093 if (CLASS_TYPE_P (type))
8095 tree field;
8096 tree binfo;
8097 tree base_binfo;
8098 int i;
8100 /* CLASSTYPE_EMPTY_P isn't set properly until the class is actually laid
8101 out, but we'd like to be able to check this before then. */
8102 if (COMPLETE_TYPE_P (type) && is_empty_class (type))
8103 return true;
8105 for (binfo = TYPE_BINFO (type), i = 0;
8106 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
8107 if (!is_really_empty_class (BINFO_TYPE (base_binfo)))
8108 return false;
8109 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
8110 if (TREE_CODE (field) == FIELD_DECL
8111 && !DECL_ARTIFICIAL (field)
8112 && !is_really_empty_class (TREE_TYPE (field)))
8113 return false;
8114 return true;
8116 else if (TREE_CODE (type) == ARRAY_TYPE)
8117 return is_really_empty_class (TREE_TYPE (type));
8118 return false;
8121 /* Note that NAME was looked up while the current class was being
8122 defined and that the result of that lookup was DECL. */
8124 void
8125 maybe_note_name_used_in_class (tree name, tree decl)
8127 splay_tree names_used;
8129 /* If we're not defining a class, there's nothing to do. */
8130 if (!(innermost_scope_kind() == sk_class
8131 && TYPE_BEING_DEFINED (current_class_type)
8132 && !LAMBDA_TYPE_P (current_class_type)))
8133 return;
8135 /* If there's already a binding for this NAME, then we don't have
8136 anything to worry about. */
8137 if (lookup_member (current_class_type, name,
8138 /*protect=*/0, /*want_type=*/false, tf_warning_or_error))
8139 return;
8141 if (!current_class_stack[current_class_depth - 1].names_used)
8142 current_class_stack[current_class_depth - 1].names_used
8143 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
8144 names_used = current_class_stack[current_class_depth - 1].names_used;
8146 splay_tree_insert (names_used,
8147 (splay_tree_key) name,
8148 (splay_tree_value) decl);
8151 /* Note that NAME was declared (as DECL) in the current class. Check
8152 to see that the declaration is valid. */
8154 void
8155 note_name_declared_in_class (tree name, tree decl)
8157 splay_tree names_used;
8158 splay_tree_node n;
8160 /* Look to see if we ever used this name. */
8161 names_used
8162 = current_class_stack[current_class_depth - 1].names_used;
8163 if (!names_used)
8164 return;
8165 /* The C language allows members to be declared with a type of the same
8166 name, and the C++ standard says this diagnostic is not required. So
8167 allow it in extern "C" blocks unless predantic is specified.
8168 Allow it in all cases if -ms-extensions is specified. */
8169 if ((!pedantic && current_lang_name == lang_name_c)
8170 || flag_ms_extensions)
8171 return;
8172 n = splay_tree_lookup (names_used, (splay_tree_key) name);
8173 if (n)
8175 /* [basic.scope.class]
8177 A name N used in a class S shall refer to the same declaration
8178 in its context and when re-evaluated in the completed scope of
8179 S. */
8180 permerror (input_location, "declaration of %q#D", decl);
8181 permerror (location_of ((tree) n->value),
8182 "changes meaning of %qD from %q#D",
8183 DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
8187 /* Returns the VAR_DECL for the complete vtable associated with BINFO.
8188 Secondary vtables are merged with primary vtables; this function
8189 will return the VAR_DECL for the primary vtable. */
8191 tree
8192 get_vtbl_decl_for_binfo (tree binfo)
8194 tree decl;
8196 decl = BINFO_VTABLE (binfo);
8197 if (decl && TREE_CODE (decl) == POINTER_PLUS_EXPR)
8199 gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
8200 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
8202 if (decl)
8203 gcc_assert (VAR_P (decl));
8204 return decl;
8208 /* Returns the binfo for the primary base of BINFO. If the resulting
8209 BINFO is a virtual base, and it is inherited elsewhere in the
8210 hierarchy, then the returned binfo might not be the primary base of
8211 BINFO in the complete object. Check BINFO_PRIMARY_P or
8212 BINFO_LOST_PRIMARY_P to be sure. */
8214 static tree
8215 get_primary_binfo (tree binfo)
8217 tree primary_base;
8219 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
8220 if (!primary_base)
8221 return NULL_TREE;
8223 return copied_binfo (primary_base, binfo);
8226 /* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
8228 static int
8229 maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
8231 if (!indented_p)
8232 fprintf (stream, "%*s", indent, "");
8233 return 1;
8236 /* Dump the offsets of all the bases rooted at BINFO to STREAM.
8237 INDENT should be zero when called from the top level; it is
8238 incremented recursively. IGO indicates the next expected BINFO in
8239 inheritance graph ordering. */
8241 static tree
8242 dump_class_hierarchy_r (FILE *stream,
8243 int flags,
8244 tree binfo,
8245 tree igo,
8246 int indent)
8248 int indented = 0;
8249 tree base_binfo;
8250 int i;
8252 indented = maybe_indent_hierarchy (stream, indent, 0);
8253 fprintf (stream, "%s (0x" HOST_WIDE_INT_PRINT_HEX ") ",
8254 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
8255 (HOST_WIDE_INT) (uintptr_t) binfo);
8256 if (binfo != igo)
8258 fprintf (stream, "alternative-path\n");
8259 return igo;
8261 igo = TREE_CHAIN (binfo);
8263 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
8264 tree_to_shwi (BINFO_OFFSET (binfo)));
8265 if (is_empty_class (BINFO_TYPE (binfo)))
8266 fprintf (stream, " empty");
8267 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
8268 fprintf (stream, " nearly-empty");
8269 if (BINFO_VIRTUAL_P (binfo))
8270 fprintf (stream, " virtual");
8271 fprintf (stream, "\n");
8273 indented = 0;
8274 if (BINFO_PRIMARY_P (binfo))
8276 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8277 fprintf (stream, " primary-for %s (0x" HOST_WIDE_INT_PRINT_HEX ")",
8278 type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
8279 TFF_PLAIN_IDENTIFIER),
8280 (HOST_WIDE_INT) (uintptr_t) BINFO_INHERITANCE_CHAIN (binfo));
8282 if (BINFO_LOST_PRIMARY_P (binfo))
8284 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8285 fprintf (stream, " lost-primary");
8287 if (indented)
8288 fprintf (stream, "\n");
8290 if (!(flags & TDF_SLIM))
8292 int indented = 0;
8294 if (BINFO_SUBVTT_INDEX (binfo))
8296 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8297 fprintf (stream, " subvttidx=%s",
8298 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
8299 TFF_PLAIN_IDENTIFIER));
8301 if (BINFO_VPTR_INDEX (binfo))
8303 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8304 fprintf (stream, " vptridx=%s",
8305 expr_as_string (BINFO_VPTR_INDEX (binfo),
8306 TFF_PLAIN_IDENTIFIER));
8308 if (BINFO_VPTR_FIELD (binfo))
8310 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8311 fprintf (stream, " vbaseoffset=%s",
8312 expr_as_string (BINFO_VPTR_FIELD (binfo),
8313 TFF_PLAIN_IDENTIFIER));
8315 if (BINFO_VTABLE (binfo))
8317 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8318 fprintf (stream, " vptr=%s",
8319 expr_as_string (BINFO_VTABLE (binfo),
8320 TFF_PLAIN_IDENTIFIER));
8323 if (indented)
8324 fprintf (stream, "\n");
8327 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
8328 igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
8330 return igo;
8333 /* Dump the BINFO hierarchy for T. */
8335 static void
8336 dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
8338 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
8339 fprintf (stream, " size=%lu align=%lu\n",
8340 (unsigned long)(tree_to_shwi (TYPE_SIZE (t)) / BITS_PER_UNIT),
8341 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
8342 fprintf (stream, " base size=%lu base align=%lu\n",
8343 (unsigned long)(tree_to_shwi (TYPE_SIZE (CLASSTYPE_AS_BASE (t)))
8344 / BITS_PER_UNIT),
8345 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
8346 / BITS_PER_UNIT));
8347 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
8348 fprintf (stream, "\n");
8351 /* Debug interface to hierarchy dumping. */
8353 void
8354 debug_class (tree t)
8356 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
8359 static void
8360 dump_class_hierarchy (tree t)
8362 int flags;
8363 FILE *stream = get_dump_info (TDI_class, &flags);
8365 if (stream)
8367 dump_class_hierarchy_1 (stream, flags, t);
8371 static void
8372 dump_array (FILE * stream, tree decl)
8374 tree value;
8375 unsigned HOST_WIDE_INT ix;
8376 HOST_WIDE_INT elt;
8377 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
8379 elt = (tree_to_shwi (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))))
8380 / BITS_PER_UNIT);
8381 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
8382 fprintf (stream, " %s entries",
8383 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
8384 TFF_PLAIN_IDENTIFIER));
8385 fprintf (stream, "\n");
8387 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
8388 ix, value)
8389 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
8390 expr_as_string (value, TFF_PLAIN_IDENTIFIER));
8393 static void
8394 dump_vtable (tree t, tree binfo, tree vtable)
8396 int flags;
8397 FILE *stream = get_dump_info (TDI_class, &flags);
8399 if (!stream)
8400 return;
8402 if (!(flags & TDF_SLIM))
8404 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
8406 fprintf (stream, "%s for %s",
8407 ctor_vtbl_p ? "Construction vtable" : "Vtable",
8408 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
8409 if (ctor_vtbl_p)
8411 if (!BINFO_VIRTUAL_P (binfo))
8412 fprintf (stream, " (0x" HOST_WIDE_INT_PRINT_HEX " instance)",
8413 (HOST_WIDE_INT) (uintptr_t) binfo);
8414 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
8416 fprintf (stream, "\n");
8417 dump_array (stream, vtable);
8418 fprintf (stream, "\n");
8422 static void
8423 dump_vtt (tree t, tree vtt)
8425 int flags;
8426 FILE *stream = get_dump_info (TDI_class, &flags);
8428 if (!stream)
8429 return;
8431 if (!(flags & TDF_SLIM))
8433 fprintf (stream, "VTT for %s\n",
8434 type_as_string (t, TFF_PLAIN_IDENTIFIER));
8435 dump_array (stream, vtt);
8436 fprintf (stream, "\n");
8440 /* Dump a function or thunk and its thunkees. */
8442 static void
8443 dump_thunk (FILE *stream, int indent, tree thunk)
8445 static const char spaces[] = " ";
8446 tree name = DECL_NAME (thunk);
8447 tree thunks;
8449 fprintf (stream, "%.*s%p %s %s", indent, spaces,
8450 (void *)thunk,
8451 !DECL_THUNK_P (thunk) ? "function"
8452 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
8453 name ? IDENTIFIER_POINTER (name) : "<unset>");
8454 if (DECL_THUNK_P (thunk))
8456 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
8457 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
8459 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
8460 if (!virtual_adjust)
8461 /*NOP*/;
8462 else if (DECL_THIS_THUNK_P (thunk))
8463 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
8464 tree_to_shwi (virtual_adjust));
8465 else
8466 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
8467 tree_to_shwi (BINFO_VPTR_FIELD (virtual_adjust)),
8468 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
8469 if (THUNK_ALIAS (thunk))
8470 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
8472 fprintf (stream, "\n");
8473 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
8474 dump_thunk (stream, indent + 2, thunks);
8477 /* Dump the thunks for FN. */
8479 void
8480 debug_thunks (tree fn)
8482 dump_thunk (stderr, 0, fn);
8485 /* Virtual function table initialization. */
8487 /* Create all the necessary vtables for T and its base classes. */
8489 static void
8490 finish_vtbls (tree t)
8492 tree vbase;
8493 vec<constructor_elt, va_gc> *v = NULL;
8494 tree vtable = BINFO_VTABLE (TYPE_BINFO (t));
8496 /* We lay out the primary and secondary vtables in one contiguous
8497 vtable. The primary vtable is first, followed by the non-virtual
8498 secondary vtables in inheritance graph order. */
8499 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t), TYPE_BINFO (t),
8500 vtable, t, &v);
8502 /* Then come the virtual bases, also in inheritance graph order. */
8503 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
8505 if (!BINFO_VIRTUAL_P (vbase))
8506 continue;
8507 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), vtable, t, &v);
8510 if (BINFO_VTABLE (TYPE_BINFO (t)))
8511 initialize_vtable (TYPE_BINFO (t), v);
8514 /* Initialize the vtable for BINFO with the INITS. */
8516 static void
8517 initialize_vtable (tree binfo, vec<constructor_elt, va_gc> *inits)
8519 tree decl;
8521 layout_vtable_decl (binfo, vec_safe_length (inits));
8522 decl = get_vtbl_decl_for_binfo (binfo);
8523 initialize_artificial_var (decl, inits);
8524 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
8527 /* Build the VTT (virtual table table) for T.
8528 A class requires a VTT if it has virtual bases.
8530 This holds
8531 1 - primary virtual pointer for complete object T
8532 2 - secondary VTTs for each direct non-virtual base of T which requires a
8534 3 - secondary virtual pointers for each direct or indirect base of T which
8535 has virtual bases or is reachable via a virtual path from T.
8536 4 - secondary VTTs for each direct or indirect virtual base of T.
8538 Secondary VTTs look like complete object VTTs without part 4. */
8540 static void
8541 build_vtt (tree t)
8543 tree type;
8544 tree vtt;
8545 tree index;
8546 vec<constructor_elt, va_gc> *inits;
8548 /* Build up the initializers for the VTT. */
8549 inits = NULL;
8550 index = size_zero_node;
8551 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
8553 /* If we didn't need a VTT, we're done. */
8554 if (!inits)
8555 return;
8557 /* Figure out the type of the VTT. */
8558 type = build_array_of_n_type (const_ptr_type_node,
8559 inits->length ());
8561 /* Now, build the VTT object itself. */
8562 vtt = build_vtable (t, mangle_vtt_for_type (t), type);
8563 initialize_artificial_var (vtt, inits);
8564 /* Add the VTT to the vtables list. */
8565 DECL_CHAIN (vtt) = DECL_CHAIN (CLASSTYPE_VTABLES (t));
8566 DECL_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
8568 dump_vtt (t, vtt);
8571 /* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
8572 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
8573 and CHAIN the vtable pointer for this binfo after construction is
8574 complete. VALUE can also be another BINFO, in which case we recurse. */
8576 static tree
8577 binfo_ctor_vtable (tree binfo)
8579 tree vt;
8581 while (1)
8583 vt = BINFO_VTABLE (binfo);
8584 if (TREE_CODE (vt) == TREE_LIST)
8585 vt = TREE_VALUE (vt);
8586 if (TREE_CODE (vt) == TREE_BINFO)
8587 binfo = vt;
8588 else
8589 break;
8592 return vt;
8595 /* Data for secondary VTT initialization. */
8596 struct secondary_vptr_vtt_init_data
8598 /* Is this the primary VTT? */
8599 bool top_level_p;
8601 /* Current index into the VTT. */
8602 tree index;
8604 /* Vector of initializers built up. */
8605 vec<constructor_elt, va_gc> *inits;
8607 /* The type being constructed by this secondary VTT. */
8608 tree type_being_constructed;
8611 /* Recursively build the VTT-initializer for BINFO (which is in the
8612 hierarchy dominated by T). INITS points to the end of the initializer
8613 list to date. INDEX is the VTT index where the next element will be
8614 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
8615 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
8616 for virtual bases of T. When it is not so, we build the constructor
8617 vtables for the BINFO-in-T variant. */
8619 static void
8620 build_vtt_inits (tree binfo, tree t, vec<constructor_elt, va_gc> **inits,
8621 tree *index)
8623 int i;
8624 tree b;
8625 tree init;
8626 secondary_vptr_vtt_init_data data;
8627 int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
8629 /* We only need VTTs for subobjects with virtual bases. */
8630 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
8631 return;
8633 /* We need to use a construction vtable if this is not the primary
8634 VTT. */
8635 if (!top_level_p)
8637 build_ctor_vtbl_group (binfo, t);
8639 /* Record the offset in the VTT where this sub-VTT can be found. */
8640 BINFO_SUBVTT_INDEX (binfo) = *index;
8643 /* Add the address of the primary vtable for the complete object. */
8644 init = binfo_ctor_vtable (binfo);
8645 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
8646 if (top_level_p)
8648 gcc_assert (!BINFO_VPTR_INDEX (binfo));
8649 BINFO_VPTR_INDEX (binfo) = *index;
8651 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
8653 /* Recursively add the secondary VTTs for non-virtual bases. */
8654 for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
8655 if (!BINFO_VIRTUAL_P (b))
8656 build_vtt_inits (b, t, inits, index);
8658 /* Add secondary virtual pointers for all subobjects of BINFO with
8659 either virtual bases or reachable along a virtual path, except
8660 subobjects that are non-virtual primary bases. */
8661 data.top_level_p = top_level_p;
8662 data.index = *index;
8663 data.inits = *inits;
8664 data.type_being_constructed = BINFO_TYPE (binfo);
8666 dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
8668 *index = data.index;
8670 /* data.inits might have grown as we added secondary virtual pointers.
8671 Make sure our caller knows about the new vector. */
8672 *inits = data.inits;
8674 if (top_level_p)
8675 /* Add the secondary VTTs for virtual bases in inheritance graph
8676 order. */
8677 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
8679 if (!BINFO_VIRTUAL_P (b))
8680 continue;
8682 build_vtt_inits (b, t, inits, index);
8684 else
8685 /* Remove the ctor vtables we created. */
8686 dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
8689 /* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
8690 in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure. */
8692 static tree
8693 dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
8695 secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
8697 /* We don't care about bases that don't have vtables. */
8698 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
8699 return dfs_skip_bases;
8701 /* We're only interested in proper subobjects of the type being
8702 constructed. */
8703 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
8704 return NULL_TREE;
8706 /* We're only interested in bases with virtual bases or reachable
8707 via a virtual path from the type being constructed. */
8708 if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
8709 || binfo_via_virtual (binfo, data->type_being_constructed)))
8710 return dfs_skip_bases;
8712 /* We're not interested in non-virtual primary bases. */
8713 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
8714 return NULL_TREE;
8716 /* Record the index where this secondary vptr can be found. */
8717 if (data->top_level_p)
8719 gcc_assert (!BINFO_VPTR_INDEX (binfo));
8720 BINFO_VPTR_INDEX (binfo) = data->index;
8722 if (BINFO_VIRTUAL_P (binfo))
8724 /* It's a primary virtual base, and this is not a
8725 construction vtable. Find the base this is primary of in
8726 the inheritance graph, and use that base's vtable
8727 now. */
8728 while (BINFO_PRIMARY_P (binfo))
8729 binfo = BINFO_INHERITANCE_CHAIN (binfo);
8733 /* Add the initializer for the secondary vptr itself. */
8734 CONSTRUCTOR_APPEND_ELT (data->inits, NULL_TREE, binfo_ctor_vtable (binfo));
8736 /* Advance the vtt index. */
8737 data->index = size_binop (PLUS_EXPR, data->index,
8738 TYPE_SIZE_UNIT (ptr_type_node));
8740 return NULL_TREE;
8743 /* Called from build_vtt_inits via dfs_walk. After building
8744 constructor vtables and generating the sub-vtt from them, we need
8745 to restore the BINFO_VTABLES that were scribbled on. DATA is the
8746 binfo of the base whose sub vtt was generated. */
8748 static tree
8749 dfs_fixup_binfo_vtbls (tree binfo, void* data)
8751 tree vtable = BINFO_VTABLE (binfo);
8753 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
8754 /* If this class has no vtable, none of its bases do. */
8755 return dfs_skip_bases;
8757 if (!vtable)
8758 /* This might be a primary base, so have no vtable in this
8759 hierarchy. */
8760 return NULL_TREE;
8762 /* If we scribbled the construction vtable vptr into BINFO, clear it
8763 out now. */
8764 if (TREE_CODE (vtable) == TREE_LIST
8765 && (TREE_PURPOSE (vtable) == (tree) data))
8766 BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
8768 return NULL_TREE;
8771 /* Build the construction vtable group for BINFO which is in the
8772 hierarchy dominated by T. */
8774 static void
8775 build_ctor_vtbl_group (tree binfo, tree t)
8777 tree type;
8778 tree vtbl;
8779 tree id;
8780 tree vbase;
8781 vec<constructor_elt, va_gc> *v;
8783 /* See if we've already created this construction vtable group. */
8784 id = mangle_ctor_vtbl_for_type (t, binfo);
8785 if (IDENTIFIER_GLOBAL_VALUE (id))
8786 return;
8788 gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
8789 /* Build a version of VTBL (with the wrong type) for use in
8790 constructing the addresses of secondary vtables in the
8791 construction vtable group. */
8792 vtbl = build_vtable (t, id, ptr_type_node);
8793 DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
8794 /* Don't export construction vtables from shared libraries. Even on
8795 targets that don't support hidden visibility, this tells
8796 can_refer_decl_in_current_unit_p not to assume that it's safe to
8797 access from a different compilation unit (bz 54314). */
8798 DECL_VISIBILITY (vtbl) = VISIBILITY_HIDDEN;
8799 DECL_VISIBILITY_SPECIFIED (vtbl) = true;
8801 v = NULL;
8802 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
8803 binfo, vtbl, t, &v);
8805 /* Add the vtables for each of our virtual bases using the vbase in T
8806 binfo. */
8807 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
8808 vbase;
8809 vbase = TREE_CHAIN (vbase))
8811 tree b;
8813 if (!BINFO_VIRTUAL_P (vbase))
8814 continue;
8815 b = copied_binfo (vbase, binfo);
8817 accumulate_vtbl_inits (b, vbase, binfo, vtbl, t, &v);
8820 /* Figure out the type of the construction vtable. */
8821 type = build_array_of_n_type (vtable_entry_type, v->length ());
8822 layout_type (type);
8823 TREE_TYPE (vtbl) = type;
8824 DECL_SIZE (vtbl) = DECL_SIZE_UNIT (vtbl) = NULL_TREE;
8825 layout_decl (vtbl, 0);
8827 /* Initialize the construction vtable. */
8828 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
8829 initialize_artificial_var (vtbl, v);
8830 dump_vtable (t, binfo, vtbl);
8833 /* Add the vtbl initializers for BINFO (and its bases other than
8834 non-virtual primaries) to the list of INITS. BINFO is in the
8835 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
8836 the constructor the vtbl inits should be accumulated for. (If this
8837 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
8838 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
8839 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
8840 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
8841 but are not necessarily the same in terms of layout. */
8843 static void
8844 accumulate_vtbl_inits (tree binfo,
8845 tree orig_binfo,
8846 tree rtti_binfo,
8847 tree vtbl,
8848 tree t,
8849 vec<constructor_elt, va_gc> **inits)
8851 int i;
8852 tree base_binfo;
8853 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
8855 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
8857 /* If it doesn't have a vptr, we don't do anything. */
8858 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
8859 return;
8861 /* If we're building a construction vtable, we're not interested in
8862 subobjects that don't require construction vtables. */
8863 if (ctor_vtbl_p
8864 && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
8865 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
8866 return;
8868 /* Build the initializers for the BINFO-in-T vtable. */
8869 dfs_accumulate_vtbl_inits (binfo, orig_binfo, rtti_binfo, vtbl, t, inits);
8871 /* Walk the BINFO and its bases. We walk in preorder so that as we
8872 initialize each vtable we can figure out at what offset the
8873 secondary vtable lies from the primary vtable. We can't use
8874 dfs_walk here because we need to iterate through bases of BINFO
8875 and RTTI_BINFO simultaneously. */
8876 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
8878 /* Skip virtual bases. */
8879 if (BINFO_VIRTUAL_P (base_binfo))
8880 continue;
8881 accumulate_vtbl_inits (base_binfo,
8882 BINFO_BASE_BINFO (orig_binfo, i),
8883 rtti_binfo, vtbl, t,
8884 inits);
8888 /* Called from accumulate_vtbl_inits. Adds the initializers for the
8889 BINFO vtable to L. */
8891 static void
8892 dfs_accumulate_vtbl_inits (tree binfo,
8893 tree orig_binfo,
8894 tree rtti_binfo,
8895 tree orig_vtbl,
8896 tree t,
8897 vec<constructor_elt, va_gc> **l)
8899 tree vtbl = NULL_TREE;
8900 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
8901 int n_inits;
8903 if (ctor_vtbl_p
8904 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
8906 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
8907 primary virtual base. If it is not the same primary in
8908 the hierarchy of T, we'll need to generate a ctor vtable
8909 for it, to place at its location in T. If it is the same
8910 primary, we still need a VTT entry for the vtable, but it
8911 should point to the ctor vtable for the base it is a
8912 primary for within the sub-hierarchy of RTTI_BINFO.
8914 There are three possible cases:
8916 1) We are in the same place.
8917 2) We are a primary base within a lost primary virtual base of
8918 RTTI_BINFO.
8919 3) We are primary to something not a base of RTTI_BINFO. */
8921 tree b;
8922 tree last = NULL_TREE;
8924 /* First, look through the bases we are primary to for RTTI_BINFO
8925 or a virtual base. */
8926 b = binfo;
8927 while (BINFO_PRIMARY_P (b))
8929 b = BINFO_INHERITANCE_CHAIN (b);
8930 last = b;
8931 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
8932 goto found;
8934 /* If we run out of primary links, keep looking down our
8935 inheritance chain; we might be an indirect primary. */
8936 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
8937 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
8938 break;
8939 found:
8941 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
8942 base B and it is a base of RTTI_BINFO, this is case 2. In
8943 either case, we share our vtable with LAST, i.e. the
8944 derived-most base within B of which we are a primary. */
8945 if (b == rtti_binfo
8946 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
8947 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
8948 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
8949 binfo_ctor_vtable after everything's been set up. */
8950 vtbl = last;
8952 /* Otherwise, this is case 3 and we get our own. */
8954 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
8955 return;
8957 n_inits = vec_safe_length (*l);
8959 if (!vtbl)
8961 tree index;
8962 int non_fn_entries;
8964 /* Add the initializer for this vtable. */
8965 build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
8966 &non_fn_entries, l);
8968 /* Figure out the position to which the VPTR should point. */
8969 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, orig_vtbl);
8970 index = size_binop (MULT_EXPR,
8971 TYPE_SIZE_UNIT (vtable_entry_type),
8972 size_int (non_fn_entries + n_inits));
8973 vtbl = fold_build_pointer_plus (vtbl, index);
8976 if (ctor_vtbl_p)
8977 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
8978 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
8979 straighten this out. */
8980 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
8981 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
8982 /* Throw away any unneeded intializers. */
8983 (*l)->truncate (n_inits);
8984 else
8985 /* For an ordinary vtable, set BINFO_VTABLE. */
8986 BINFO_VTABLE (binfo) = vtbl;
8989 static GTY(()) tree abort_fndecl_addr;
8991 /* Construct the initializer for BINFO's virtual function table. BINFO
8992 is part of the hierarchy dominated by T. If we're building a
8993 construction vtable, the ORIG_BINFO is the binfo we should use to
8994 find the actual function pointers to put in the vtable - but they
8995 can be overridden on the path to most-derived in the graph that
8996 ORIG_BINFO belongs. Otherwise,
8997 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
8998 BINFO that should be indicated by the RTTI information in the
8999 vtable; it will be a base class of T, rather than T itself, if we
9000 are building a construction vtable.
9002 The value returned is a TREE_LIST suitable for wrapping in a
9003 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
9004 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
9005 number of non-function entries in the vtable.
9007 It might seem that this function should never be called with a
9008 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
9009 base is always subsumed by a derived class vtable. However, when
9010 we are building construction vtables, we do build vtables for
9011 primary bases; we need these while the primary base is being
9012 constructed. */
9014 static void
9015 build_vtbl_initializer (tree binfo,
9016 tree orig_binfo,
9017 tree t,
9018 tree rtti_binfo,
9019 int* non_fn_entries_p,
9020 vec<constructor_elt, va_gc> **inits)
9022 tree v;
9023 vtbl_init_data vid;
9024 unsigned ix, jx;
9025 tree vbinfo;
9026 vec<tree, va_gc> *vbases;
9027 constructor_elt *e;
9029 /* Initialize VID. */
9030 memset (&vid, 0, sizeof (vid));
9031 vid.binfo = binfo;
9032 vid.derived = t;
9033 vid.rtti_binfo = rtti_binfo;
9034 vid.primary_vtbl_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
9035 vid.ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
9036 vid.generate_vcall_entries = true;
9037 /* The first vbase or vcall offset is at index -3 in the vtable. */
9038 vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
9040 /* Add entries to the vtable for RTTI. */
9041 build_rtti_vtbl_entries (binfo, &vid);
9043 /* Create an array for keeping track of the functions we've
9044 processed. When we see multiple functions with the same
9045 signature, we share the vcall offsets. */
9046 vec_alloc (vid.fns, 32);
9047 /* Add the vcall and vbase offset entries. */
9048 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
9050 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
9051 build_vbase_offset_vtbl_entries. */
9052 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
9053 vec_safe_iterate (vbases, ix, &vbinfo); ix++)
9054 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
9056 /* If the target requires padding between data entries, add that now. */
9057 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
9059 int n_entries = vec_safe_length (vid.inits);
9061 vec_safe_grow (vid.inits, TARGET_VTABLE_DATA_ENTRY_DISTANCE * n_entries);
9063 /* Move data entries into their new positions and add padding
9064 after the new positions. Iterate backwards so we don't
9065 overwrite entries that we would need to process later. */
9066 for (ix = n_entries - 1;
9067 vid.inits->iterate (ix, &e);
9068 ix--)
9070 int j;
9071 int new_position = (TARGET_VTABLE_DATA_ENTRY_DISTANCE * ix
9072 + (TARGET_VTABLE_DATA_ENTRY_DISTANCE - 1));
9074 (*vid.inits)[new_position] = *e;
9076 for (j = 1; j < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++j)
9078 constructor_elt *f = &(*vid.inits)[new_position - j];
9079 f->index = NULL_TREE;
9080 f->value = build1 (NOP_EXPR, vtable_entry_type,
9081 null_pointer_node);
9086 if (non_fn_entries_p)
9087 *non_fn_entries_p = vec_safe_length (vid.inits);
9089 /* The initializers for virtual functions were built up in reverse
9090 order. Straighten them out and add them to the running list in one
9091 step. */
9092 jx = vec_safe_length (*inits);
9093 vec_safe_grow (*inits, jx + vid.inits->length ());
9095 for (ix = vid.inits->length () - 1;
9096 vid.inits->iterate (ix, &e);
9097 ix--, jx++)
9098 (**inits)[jx] = *e;
9100 /* Go through all the ordinary virtual functions, building up
9101 initializers. */
9102 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
9104 tree delta;
9105 tree vcall_index;
9106 tree fn, fn_original;
9107 tree init = NULL_TREE;
9109 fn = BV_FN (v);
9110 fn_original = fn;
9111 if (DECL_THUNK_P (fn))
9113 if (!DECL_NAME (fn))
9114 finish_thunk (fn);
9115 if (THUNK_ALIAS (fn))
9117 fn = THUNK_ALIAS (fn);
9118 BV_FN (v) = fn;
9120 fn_original = THUNK_TARGET (fn);
9123 /* If the only definition of this function signature along our
9124 primary base chain is from a lost primary, this vtable slot will
9125 never be used, so just zero it out. This is important to avoid
9126 requiring extra thunks which cannot be generated with the function.
9128 We first check this in update_vtable_entry_for_fn, so we handle
9129 restored primary bases properly; we also need to do it here so we
9130 zero out unused slots in ctor vtables, rather than filling them
9131 with erroneous values (though harmless, apart from relocation
9132 costs). */
9133 if (BV_LOST_PRIMARY (v))
9134 init = size_zero_node;
9136 if (! init)
9138 /* Pull the offset for `this', and the function to call, out of
9139 the list. */
9140 delta = BV_DELTA (v);
9141 vcall_index = BV_VCALL_INDEX (v);
9143 gcc_assert (TREE_CODE (delta) == INTEGER_CST);
9144 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
9146 /* You can't call an abstract virtual function; it's abstract.
9147 So, we replace these functions with __pure_virtual. */
9148 if (DECL_PURE_VIRTUAL_P (fn_original))
9150 fn = abort_fndecl;
9151 if (!TARGET_VTABLE_USES_DESCRIPTORS)
9153 if (abort_fndecl_addr == NULL)
9154 abort_fndecl_addr
9155 = fold_convert (vfunc_ptr_type_node,
9156 build_fold_addr_expr (fn));
9157 init = abort_fndecl_addr;
9160 /* Likewise for deleted virtuals. */
9161 else if (DECL_DELETED_FN (fn_original))
9163 fn = get_identifier ("__cxa_deleted_virtual");
9164 if (!get_global_value_if_present (fn, &fn))
9165 fn = push_library_fn (fn, (build_function_type_list
9166 (void_type_node, NULL_TREE)),
9167 NULL_TREE, ECF_NORETURN);
9168 if (!TARGET_VTABLE_USES_DESCRIPTORS)
9169 init = fold_convert (vfunc_ptr_type_node,
9170 build_fold_addr_expr (fn));
9172 else
9174 if (!integer_zerop (delta) || vcall_index)
9176 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
9177 if (!DECL_NAME (fn))
9178 finish_thunk (fn);
9180 /* Take the address of the function, considering it to be of an
9181 appropriate generic type. */
9182 if (!TARGET_VTABLE_USES_DESCRIPTORS)
9183 init = fold_convert (vfunc_ptr_type_node,
9184 build_fold_addr_expr (fn));
9185 /* Don't refer to a virtual destructor from a constructor
9186 vtable or a vtable for an abstract class, since destroying
9187 an object under construction is undefined behavior and we
9188 don't want it to be considered a candidate for speculative
9189 devirtualization. But do create the thunk for ABI
9190 compliance. */
9191 if (DECL_DESTRUCTOR_P (fn_original)
9192 && (CLASSTYPE_PURE_VIRTUALS (DECL_CONTEXT (fn_original))
9193 || orig_binfo != binfo))
9194 init = size_zero_node;
9198 /* And add it to the chain of initializers. */
9199 if (TARGET_VTABLE_USES_DESCRIPTORS)
9201 int i;
9202 if (init == size_zero_node)
9203 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
9204 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
9205 else
9206 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
9208 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
9209 fn, build_int_cst (NULL_TREE, i));
9210 TREE_CONSTANT (fdesc) = 1;
9212 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, fdesc);
9215 else
9216 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
9220 /* Adds to vid->inits the initializers for the vbase and vcall
9221 offsets in BINFO, which is in the hierarchy dominated by T. */
9223 static void
9224 build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
9226 tree b;
9228 /* If this is a derived class, we must first create entries
9229 corresponding to the primary base class. */
9230 b = get_primary_binfo (binfo);
9231 if (b)
9232 build_vcall_and_vbase_vtbl_entries (b, vid);
9234 /* Add the vbase entries for this base. */
9235 build_vbase_offset_vtbl_entries (binfo, vid);
9236 /* Add the vcall entries for this base. */
9237 build_vcall_offset_vtbl_entries (binfo, vid);
9240 /* Returns the initializers for the vbase offset entries in the vtable
9241 for BINFO (which is part of the class hierarchy dominated by T), in
9242 reverse order. VBASE_OFFSET_INDEX gives the vtable index
9243 where the next vbase offset will go. */
9245 static void
9246 build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
9248 tree vbase;
9249 tree t;
9250 tree non_primary_binfo;
9252 /* If there are no virtual baseclasses, then there is nothing to
9253 do. */
9254 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
9255 return;
9257 t = vid->derived;
9259 /* We might be a primary base class. Go up the inheritance hierarchy
9260 until we find the most derived class of which we are a primary base:
9261 it is the offset of that which we need to use. */
9262 non_primary_binfo = binfo;
9263 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
9265 tree b;
9267 /* If we have reached a virtual base, then it must be a primary
9268 base (possibly multi-level) of vid->binfo, or we wouldn't
9269 have called build_vcall_and_vbase_vtbl_entries for it. But it
9270 might be a lost primary, so just skip down to vid->binfo. */
9271 if (BINFO_VIRTUAL_P (non_primary_binfo))
9273 non_primary_binfo = vid->binfo;
9274 break;
9277 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
9278 if (get_primary_binfo (b) != non_primary_binfo)
9279 break;
9280 non_primary_binfo = b;
9283 /* Go through the virtual bases, adding the offsets. */
9284 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
9285 vbase;
9286 vbase = TREE_CHAIN (vbase))
9288 tree b;
9289 tree delta;
9291 if (!BINFO_VIRTUAL_P (vbase))
9292 continue;
9294 /* Find the instance of this virtual base in the complete
9295 object. */
9296 b = copied_binfo (vbase, binfo);
9298 /* If we've already got an offset for this virtual base, we
9299 don't need another one. */
9300 if (BINFO_VTABLE_PATH_MARKED (b))
9301 continue;
9302 BINFO_VTABLE_PATH_MARKED (b) = 1;
9304 /* Figure out where we can find this vbase offset. */
9305 delta = size_binop (MULT_EXPR,
9306 vid->index,
9307 convert (ssizetype,
9308 TYPE_SIZE_UNIT (vtable_entry_type)));
9309 if (vid->primary_vtbl_p)
9310 BINFO_VPTR_FIELD (b) = delta;
9312 if (binfo != TYPE_BINFO (t))
9313 /* The vbase offset had better be the same. */
9314 gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
9316 /* The next vbase will come at a more negative offset. */
9317 vid->index = size_binop (MINUS_EXPR, vid->index,
9318 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
9320 /* The initializer is the delta from BINFO to this virtual base.
9321 The vbase offsets go in reverse inheritance-graph order, and
9322 we are walking in inheritance graph order so these end up in
9323 the right order. */
9324 delta = size_diffop_loc (input_location,
9325 BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
9327 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE,
9328 fold_build1_loc (input_location, NOP_EXPR,
9329 vtable_entry_type, delta));
9333 /* Adds the initializers for the vcall offset entries in the vtable
9334 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
9335 to VID->INITS. */
9337 static void
9338 build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
9340 /* We only need these entries if this base is a virtual base. We
9341 compute the indices -- but do not add to the vtable -- when
9342 building the main vtable for a class. */
9343 if (binfo == TYPE_BINFO (vid->derived)
9344 || (BINFO_VIRTUAL_P (binfo)
9345 /* If BINFO is RTTI_BINFO, then (since BINFO does not
9346 correspond to VID->DERIVED), we are building a primary
9347 construction virtual table. Since this is a primary
9348 virtual table, we do not need the vcall offsets for
9349 BINFO. */
9350 && binfo != vid->rtti_binfo))
9352 /* We need a vcall offset for each of the virtual functions in this
9353 vtable. For example:
9355 class A { virtual void f (); };
9356 class B1 : virtual public A { virtual void f (); };
9357 class B2 : virtual public A { virtual void f (); };
9358 class C: public B1, public B2 { virtual void f (); };
9360 A C object has a primary base of B1, which has a primary base of A. A
9361 C also has a secondary base of B2, which no longer has a primary base
9362 of A. So the B2-in-C construction vtable needs a secondary vtable for
9363 A, which will adjust the A* to a B2* to call f. We have no way of
9364 knowing what (or even whether) this offset will be when we define B2,
9365 so we store this "vcall offset" in the A sub-vtable and look it up in
9366 a "virtual thunk" for B2::f.
9368 We need entries for all the functions in our primary vtable and
9369 in our non-virtual bases' secondary vtables. */
9370 vid->vbase = binfo;
9371 /* If we are just computing the vcall indices -- but do not need
9372 the actual entries -- not that. */
9373 if (!BINFO_VIRTUAL_P (binfo))
9374 vid->generate_vcall_entries = false;
9375 /* Now, walk through the non-virtual bases, adding vcall offsets. */
9376 add_vcall_offset_vtbl_entries_r (binfo, vid);
9380 /* Build vcall offsets, starting with those for BINFO. */
9382 static void
9383 add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
9385 int i;
9386 tree primary_binfo;
9387 tree base_binfo;
9389 /* Don't walk into virtual bases -- except, of course, for the
9390 virtual base for which we are building vcall offsets. Any
9391 primary virtual base will have already had its offsets generated
9392 through the recursion in build_vcall_and_vbase_vtbl_entries. */
9393 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
9394 return;
9396 /* If BINFO has a primary base, process it first. */
9397 primary_binfo = get_primary_binfo (binfo);
9398 if (primary_binfo)
9399 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
9401 /* Add BINFO itself to the list. */
9402 add_vcall_offset_vtbl_entries_1 (binfo, vid);
9404 /* Scan the non-primary bases of BINFO. */
9405 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
9406 if (base_binfo != primary_binfo)
9407 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
9410 /* Called from build_vcall_offset_vtbl_entries_r. */
9412 static void
9413 add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
9415 /* Make entries for the rest of the virtuals. */
9416 tree orig_fn;
9418 /* The ABI requires that the methods be processed in declaration
9419 order. */
9420 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
9421 orig_fn;
9422 orig_fn = DECL_CHAIN (orig_fn))
9423 if (TREE_CODE (orig_fn) == FUNCTION_DECL && DECL_VINDEX (orig_fn))
9424 add_vcall_offset (orig_fn, binfo, vid);
9427 /* Add a vcall offset entry for ORIG_FN to the vtable. */
9429 static void
9430 add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
9432 size_t i;
9433 tree vcall_offset;
9434 tree derived_entry;
9436 /* If there is already an entry for a function with the same
9437 signature as FN, then we do not need a second vcall offset.
9438 Check the list of functions already present in the derived
9439 class vtable. */
9440 FOR_EACH_VEC_SAFE_ELT (vid->fns, i, derived_entry)
9442 if (same_signature_p (derived_entry, orig_fn)
9443 /* We only use one vcall offset for virtual destructors,
9444 even though there are two virtual table entries. */
9445 || (DECL_DESTRUCTOR_P (derived_entry)
9446 && DECL_DESTRUCTOR_P (orig_fn)))
9447 return;
9450 /* If we are building these vcall offsets as part of building
9451 the vtable for the most derived class, remember the vcall
9452 offset. */
9453 if (vid->binfo == TYPE_BINFO (vid->derived))
9455 tree_pair_s elt = {orig_fn, vid->index};
9456 vec_safe_push (CLASSTYPE_VCALL_INDICES (vid->derived), elt);
9459 /* The next vcall offset will be found at a more negative
9460 offset. */
9461 vid->index = size_binop (MINUS_EXPR, vid->index,
9462 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
9464 /* Keep track of this function. */
9465 vec_safe_push (vid->fns, orig_fn);
9467 if (vid->generate_vcall_entries)
9469 tree base;
9470 tree fn;
9472 /* Find the overriding function. */
9473 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
9474 if (fn == error_mark_node)
9475 vcall_offset = build_zero_cst (vtable_entry_type);
9476 else
9478 base = TREE_VALUE (fn);
9480 /* The vbase we're working on is a primary base of
9481 vid->binfo. But it might be a lost primary, so its
9482 BINFO_OFFSET might be wrong, so we just use the
9483 BINFO_OFFSET from vid->binfo. */
9484 vcall_offset = size_diffop_loc (input_location,
9485 BINFO_OFFSET (base),
9486 BINFO_OFFSET (vid->binfo));
9487 vcall_offset = fold_build1_loc (input_location,
9488 NOP_EXPR, vtable_entry_type,
9489 vcall_offset);
9491 /* Add the initializer to the vtable. */
9492 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, vcall_offset);
9496 /* Return vtbl initializers for the RTTI entries corresponding to the
9497 BINFO's vtable. The RTTI entries should indicate the object given
9498 by VID->rtti_binfo. */
9500 static void
9501 build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
9503 tree b;
9504 tree t;
9505 tree offset;
9506 tree decl;
9507 tree init;
9509 t = BINFO_TYPE (vid->rtti_binfo);
9511 /* To find the complete object, we will first convert to our most
9512 primary base, and then add the offset in the vtbl to that value. */
9513 b = binfo;
9514 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
9515 && !BINFO_LOST_PRIMARY_P (b))
9517 tree primary_base;
9519 primary_base = get_primary_binfo (b);
9520 gcc_assert (BINFO_PRIMARY_P (primary_base)
9521 && BINFO_INHERITANCE_CHAIN (primary_base) == b);
9522 b = primary_base;
9524 offset = size_diffop_loc (input_location,
9525 BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
9527 /* The second entry is the address of the typeinfo object. */
9528 if (flag_rtti)
9529 decl = build_address (get_tinfo_decl (t));
9530 else
9531 decl = integer_zero_node;
9533 /* Convert the declaration to a type that can be stored in the
9534 vtable. */
9535 init = build_nop (vfunc_ptr_type_node, decl);
9536 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
9538 /* Add the offset-to-top entry. It comes earlier in the vtable than
9539 the typeinfo entry. Convert the offset to look like a
9540 function pointer, so that we can put it in the vtable. */
9541 init = build_nop (vfunc_ptr_type_node, offset);
9542 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
9545 /* TRUE iff TYPE is uniquely derived from PARENT. Ignores
9546 accessibility. */
9548 bool
9549 uniquely_derived_from_p (tree parent, tree type)
9551 tree base = lookup_base (type, parent, ba_unique, NULL, tf_none);
9552 return base && base != error_mark_node;
9555 /* TRUE iff TYPE is publicly & uniquely derived from PARENT. */
9557 bool
9558 publicly_uniquely_derived_p (tree parent, tree type)
9560 tree base = lookup_base (type, parent, ba_ignore_scope | ba_check,
9561 NULL, tf_none);
9562 return base && base != error_mark_node;
9565 /* CTX1 and CTX2 are declaration contexts. Return the innermost common
9566 class between them, if any. */
9568 tree
9569 common_enclosing_class (tree ctx1, tree ctx2)
9571 if (!TYPE_P (ctx1) || !TYPE_P (ctx2))
9572 return NULL_TREE;
9573 gcc_assert (ctx1 == TYPE_MAIN_VARIANT (ctx1)
9574 && ctx2 == TYPE_MAIN_VARIANT (ctx2));
9575 if (ctx1 == ctx2)
9576 return ctx1;
9577 for (tree t = ctx1; TYPE_P (t); t = TYPE_CONTEXT (t))
9578 TYPE_MARKED_P (t) = true;
9579 tree found = NULL_TREE;
9580 for (tree t = ctx2; TYPE_P (t); t = TYPE_CONTEXT (t))
9581 if (TYPE_MARKED_P (t))
9583 found = t;
9584 break;
9586 for (tree t = ctx1; TYPE_P (t); t = TYPE_CONTEXT (t))
9587 TYPE_MARKED_P (t) = false;
9588 return found;
9591 #include "gt-cp-class.h"