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)
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. */
26 #include "coretypes.h"
30 #include "stringpool.h"
33 #include "stor-layout.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. */
54 /* The _TYPE node for the class. */
57 /* The access specifier pending for new declarations in the scope of
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
67 }* class_stack_node_t
;
71 /* The base for which we're building initializers. */
73 /* The type of the most-derived type. */
75 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
76 unless ctor_vtbl_p is true. */
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. */
84 /* The functions in vbase for which we have already provided vcall
86 vec
<tree
, va_gc
> *fns
;
87 /* The vtable index of the next vcall or vbase offset. */
89 /* Nonzero if we are building the initializer for the primary
92 /* Nonzero if we are building the initializer for a construction
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
> **,
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
,
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. */
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
234 build_base_path (enum tree_code code
,
238 tsubst_flags_t complain
)
240 tree v_binfo
= NULL_TREE
;
241 tree d_binfo
= NULL_TREE
;
245 tree null_test
= NULL
;
246 tree ptr_target_type
;
248 int want_pointer
= TYPE_PTR_P (TREE_TYPE (expr
));
249 bool has_empty
= 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
))
259 if (is_empty_class (BINFO_TYPE (probe
)))
261 if (!v_binfo
&& BINFO_VIRTUAL_P (probe
))
265 probe
= TYPE_MAIN_VARIANT (TREE_TYPE (expr
));
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
)
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
)))
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
));
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
));
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
));
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
;
326 rvalue
= !real_lvalue_p (expr
);
327 /* This must happen before the call to save_expr. */
328 expr
= cp_build_addr_expr (expr
, complain
);
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
);
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;
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. */
389 tree zero
= cp_convert (TREE_TYPE (expr
), nullptr_node
, complain
);
390 null_test
= fold_build2_loc (input_location
, NE_EXPR
, boolean_type_node
,
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. */
400 expr
= cp_build_indirect_ref (expr
, RO_NULL
, complain
);
401 expr
= build_simple_base_path (expr
, binfo
);
405 expr
= build_address (expr
);
406 target_type
= TREE_TYPE (expr
);
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. */
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
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
);
432 if ((flag_sanitize
& SANITIZE_VPTR
) && fixed_type_p
== 0)
434 t
= cp_ubsan_maybe_instrument_cast_to_vbase (input_location
,
439 v_offset
= build_vfield_ref (cp_build_indirect_ref (t
, RO_NULL
,
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
),
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
465 offset
= build3 (COND_EXPR
, ptrdiff_type_node
,
466 build2 (EQ_EXPR
, boolean_type_node
,
467 current_in_charge_parm
, integer_zero_node
),
469 convert_to_integer (ptrdiff_type_node
,
470 BINFO_OFFSET (binfo
)));
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
);
493 expr
= cp_build_indirect_ref (expr
, RO_NULL
, complain
);
500 expr
= fold_build3_loc (input_location
, COND_EXPR
, target_type
, null_test
, expr
,
501 build_zero_cst (target_type
));
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. */
511 build_simple_base_path (tree expr
, tree binfo
)
513 tree type
= BINFO_TYPE (binfo
);
514 tree d_binfo
= BINFO_INHERITANCE_CHAIN (binfo
);
517 if (d_binfo
== NULL_TREE
)
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
527 temp
= unary_complex_lvalue (ADDR_EXPR
, expr
);
529 expr
= cp_build_indirect_ref (temp
, RO_NULL
, tf_warning_or_error
);
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;
572 /* Didn't find the base field?!? */
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. */
584 convert_to_base (tree object
, tree type
, bool check_access
, bool nonnull
,
585 tsubst_flags_t complain
)
590 if (TYPE_PTR_P (TREE_TYPE (object
)))
592 object_type
= TREE_TYPE (TREE_TYPE (object
));
593 type
= TREE_TYPE (type
);
596 object_type
= TREE_TYPE (object
);
598 binfo
= lookup_base (object_type
, type
, check_access
? ba_check
: ba_unique
,
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. */
612 convert_to_base_statically (tree expr
, tree base
)
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
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
);
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. */
678 build_vtbl_ref_1 (tree instance
, tree idx
)
681 tree vtbl
= NULL_TREE
;
683 /* Try to figure out what a reference refers to, and
684 access its virtual function table directly. */
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
));
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
);
709 build_vtbl_ref (tree instance
, tree idx
)
711 tree aref
= build_vtbl_ref_1 (instance
, idx
);
716 /* Given a stable object pointer INSTANCE_PTR, return an expression which
717 yields a function pointer corresponding to vtable element INDEX. */
720 build_vfn_ref (tree instance_ptr
, tree idx
)
724 aref
= build_vtbl_ref_1 (cp_build_indirect_ref (instance_ptr
, RO_NULL
,
725 tf_warning_or_error
),
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
);
740 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
741 for the given TYPE. */
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
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. */
769 build_vtable (tree class_type
, tree name
, tree vtable_type
)
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:
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;
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. */
822 get_vtable_decl (tree type
, int complete
)
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
;
834 DECL_EXTERNAL (decl
) = 1;
835 cp_finish_decl (decl
, NULL_TREE
, false, NULL_TREE
, 0);
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
848 build_primary_vtable (tree binfo
, tree type
)
853 decl
= get_vtable_decl (type
, /*complete=*/0);
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. */
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
));
869 gcc_assert (TREE_TYPE (decl
) == vtbl_type_node
);
870 virtuals
= NULL_TREE
;
873 if (GATHER_STATISTICS
)
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
));
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
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
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
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
;
922 /* Create a new vtable for BINFO which is the hierarchy dominated by
923 T. Return nonzero if we actually created a new vtable. */
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
);
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. */
948 modify_vtable_entry (tree t
,
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
);
973 BV_DELTA (v
) = delta
;
974 BV_VCALL_INDEX (v
) = NULL_TREE
;
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. */
985 add_method (tree type
, tree method
, tree using_decl
)
989 bool template_conv_p
= false;
991 vec
<tree
, va_gc
> *method_vec
;
993 bool insert_p
= false;
997 if (method
== error_mark_node
)
1000 complete_p
= COMPLETE_TYPE_P (type
);
1001 conv_p
= DECL_CONV_FN_P (method
);
1003 template_conv_p
= (TREE_CODE (method
) == TEMPLATE_DECL
1004 && DECL_TEMPLATE_CONV_FN_P (method
));
1006 method_vec
= CLASSTYPE_METHOD_VEC (type
);
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
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 "
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
);
1050 m
= OVL_CURRENT (m
);
1051 if (template_conv_p
)
1053 if (TREE_CODE (m
) == TEMPLATE_DECL
1054 && DECL_TEMPLATE_CONV_FN_P (m
))
1058 if (conv_p
&& !DECL_CONV_FN_P (m
))
1060 if (DECL_NAME (m
) == DECL_NAME (method
))
1066 && !DECL_CONV_FN_P (m
)
1067 && DECL_NAME (m
) > DECL_NAME (method
))
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
);
1082 if (TREE_CODE (fn
) != TREE_CODE (method
))
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
)))
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
))))
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
))
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
);
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. */
1182 if (DECL_CONTEXT (fn
) == type
)
1183 /* Defer to the local function. */
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. */
1200 /* A class should never have more than one destructor. */
1201 if (current_fns
&& DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method
))
1204 /* Add the new binding. */
1207 overload
= ovl_cons (method
, current_fns
);
1208 OVL_USED (overload
) = true;
1211 overload
= build_overload (method
, current_fns
);
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
);
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. */
1225 reallocated
= vec_safe_reserve_exact (method_vec
, 1);
1227 reallocated
= vec_safe_reserve (method_vec
, 1);
1229 CLASSTYPE_METHOD_VEC (type
) = method_vec
;
1230 if (slot
== method_vec
->length ())
1231 method_vec
->quick_push (overload
);
1233 method_vec
->quick_insert (slot
, overload
);
1236 /* Replace the current slot. */
1237 (*method_vec
)[slot
] = overload
;
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. */
1247 alter_access (tree t
, tree fdecl
, tree access
)
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
));
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
));
1265 error ("conflicting access specifications for field %qE, ignored",
1270 /* They're changing the access to the same thing they changed
1271 it to before. That's OK. */
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
));
1285 /* Process the USING_DECL, which is a member of T. */
1288 handle_using_decl (tree using_decl
, tree t
)
1290 tree decl
= USING_DECL_DECLS (using_decl
);
1291 tree name
= DECL_NAME (using_decl
);
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
;
1299 gcc_assert (!processing_template_decl
&& decl
);
1301 old_value
= lookup_member (t
, name
, /*protect=*/0, /*want_type=*/false,
1302 tf_warning_or_error
);
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
)
1311 old_value
= NULL_TREE
;
1314 cp_emit_debug_info_for_using (decl
, t
);
1316 if (is_overloaded_fn (decl
))
1321 else if (is_overloaded_fn (old_value
))
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. */;
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
));
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
);
1341 /* Make type T see field decl FDECL with access ACCESS. */
1343 for (; flist
; flist
= OVL_NEXT (flist
))
1345 add_method (t
, OVL_CURRENT (flist
), using_decl
);
1346 alter_access (t
, OVL_CURRENT (flist
), access
);
1349 alter_access (t
, decl
, access
);
1352 /* Data structure for find_abi_tags_r, below. */
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). */
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;
1381 /* Tags inherited from type template arguments are only used
1382 to avoid warnings. */
1383 ABI_TAG_IMPLICIT (p
->tags
) = true;
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",
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",
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",
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. */
1428 mark_or_check_attr_tags (tree attr
, tree
*tp
, abi_tag_data
*p
, bool val
)
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
));
1440 check_tag (tag
, id
, tp
, p
);
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. */
1450 mark_or_check_tags (tree t
, tree
*tp
, abi_tag_data
*p
, bool val
)
1452 while (t
!= global_namespace
)
1457 attr
= TYPE_ATTRIBUTES (t
);
1458 t
= CP_TYPE_CONTEXT (t
);
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. */
1474 find_abi_tags_r (tree
*tp
, int *walk_subtrees
, void *data
)
1476 if (!OVERLOAD_TYPE_P (*tp
))
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);
1490 /* walk_tree callback for mark_abi_tags: if *TP is a class, set
1491 IDENTIFIER_MARKED on its ABI tags. */
1494 mark_abi_tags_r (tree
*tp
, int *walk_subtrees
, void *data
)
1496 if (!OVERLOAD_TYPE_P (*tp
))
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
);
1510 /* Set IDENTIFIER_MARKED on all the ABI tags on T and its enclosing
1514 mark_abi_tags (tree t
, bool val
)
1516 mark_or_check_tags (t
, NULL
, NULL
, val
);
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. */
1545 check_abi_tags (tree t
, tree subob
)
1547 bool inherit
= DECL_P (t
);
1549 if (!inherit
&& !warn_abi_tag
)
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. */
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
};
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
));
1570 TREE_VALUE (attr
) = chainon (data
.tags
, TREE_VALUE (attr
));
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. */
1584 check_abi_tags (tree 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
)));
1594 inherit_targ_abi_tags (tree t
)
1596 if (!CLASS_TYPE_P (t
)
1597 || CLASSTYPE_TEMPLATE_INFO (t
) == NULL_TREE
)
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
);
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.
1619 tree attr
= lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (t
));
1621 TREE_VALUE (attr
) = chainon (data
.tags
, TREE_VALUE (attr
));
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. */
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. */
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 */
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. */
1663 check_bases (tree t
,
1664 int* cant_have_const_ctor_p
,
1665 int* no_const_asn_ref_p
)
1668 bool seen_non_virtual_nearly_empty_base_p
= 0;
1669 int seen_tm_mask
= 0;
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
)
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",
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
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;
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
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
))
1755 /* ...has no base classes of the same type as the first non-static
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;
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
1766 for (basefield
= TYPE_FIELDS (basetype
); basefield
;
1767 basefield
= DECL_CHAIN (basefield
))
1768 if (TREE_CODE (basefield
) == FIELD_DECL
)
1771 CLASSTYPE_NON_STD_LAYOUT (t
) = 1;
1778 /* Don't bother collecting tm attributes if transactional memory
1779 support is not enabled. */
1782 tree tm_attr
= find_tm_attribute (TYPE_ATTRIBUTES (basetype
));
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
1806 determine_primary_bases (tree t
)
1809 tree primary
= NULL_TREE
;
1810 tree type_binfo
= TYPE_BINFO (t
);
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
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
));
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;
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
,
1853 BINFO_OFFSET (base_binfo
)),
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
;
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
;
1892 /* Remember the first candidate. */
1893 primary
= base_binfo
;
1897 /* If we've got a primary base, use it. */
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
))
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. */
1932 fixup_type_variants (tree t
)
1939 for (variants
= TYPE_NEXT_VARIANT (t
);
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. */
1965 fixup_attribute_variants (tree t
)
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
);
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
));
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
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
))
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,
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. */
2037 maybe_warn_about_overly_private_class (tree t
)
2039 int has_member_fn
= 0;
2040 int has_nonprivate_method
= 0;
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
2055 /* We only issue one warning, if more than one applies, because
2056 otherwise, on code like:
2059 // Oops - forgot `public:'
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
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
2085 has_nonprivate_method
= 1;
2086 /* Keep searching for a static member function. */
2088 else if (!DECL_CONSTRUCTOR_P (fn
) && !DECL_DESTRUCTOR_P (fn
))
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.) */
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;
2109 if (!has_nonprivate_method
)
2111 warning (OPT_Wctor_dtor_privacy
,
2112 "all member functions in class %qT are private", t
);
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",
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
2147 if (!TYPE_HAS_COPY_CTOR (t
))
2148 nonprivate_ctor
= 1;
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
2159 if (! TREE_PRIVATE (ctor
))
2161 nonprivate_ctor
= 1;
2166 if (nonprivate_ctor
== 0)
2168 warning (OPT_Wctor_dtor_privacy
,
2169 "%q#T only defines private constructors and has no friends",
2177 gt_pointer_operator new_value
;
2181 /* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
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
)
2191 if (*m1
== NULL_TREE
)
2193 if (*m2
== NULL_TREE
)
2195 if (DECL_NAME (OVL_CURRENT (*m1
)) < DECL_NAME (OVL_CURRENT (*m2
)))
2200 /* This routine compares two fields like method_name_cmp but using the
2201 pointer operator in resort_field_decl_data. */
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
)
2210 if (*m1
== NULL_TREE
)
2212 if (*m2
== NULL_TREE
)
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
);
2225 /* Resort TYPE_METHOD_VEC because pointers have been reordered. */
2228 resort_type_method_vec (void* obj
,
2230 gt_pointer_operator new_value
,
2233 vec
<tree
, va_gc
> *method_vec
= (vec
<tree
, va_gc
> *) obj
;
2234 int len
= vec_safe_length (method_vec
);
2238 /* The type conversion ops have to live at the front of the vec, so we
2240 for (slot
= CLASSTYPE_FIRST_CONVERSION_SLOT
;
2241 vec_safe_iterate (method_vec
, slot
, &fn
);
2243 if (!DECL_CONV_FN_P (OVL_CURRENT (fn
)))
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
2262 finish_struct_methods (tree t
)
2265 vec
<tree
, va_gc
> *method_vec
;
2268 method_vec
= CLASSTYPE_METHOD_VEC (t
);
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
2285 for (slot
= CLASSTYPE_FIRST_CONVERSION_SLOT
;
2286 method_vec
->iterate (slot
, &fn_fields
);
2288 if (!DECL_CONV_FN_P (OVL_CURRENT (fn_fields
)))
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
2300 layout_vtable_decl (tree binfo
, int n
)
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
2326 if (DECL_DESTRUCTOR_P (base_fndecl
) && DECL_DESTRUCTOR_P (fndecl
)
2327 && special_function_p (base_fndecl
) == special_function_p (fndecl
))
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
))
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
)))
2353 /* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
2357 base_derived_from (tree derived
, tree base
)
2361 for (probe
= base
; probe
; probe
= BINFO_INHERITANCE_CHAIN (probe
))
2363 if (probe
== derived
)
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
))
2375 struct find_final_overrider_data
{
2376 /* The function for which we are trying to find a final overrider. */
2378 /* The base class in which the function was declared. */
2379 tree declaring_base
;
2380 /* The candidate overriders. */
2382 /* Path to most derived. */
2386 /* Add the overrider along the current path to FFOD->CANDIDATES.
2387 Returns true if an overrider was found; false otherwise. */
2390 dfs_find_final_overrider_1 (tree binfo
,
2391 find_final_overrider_data
*ffod
,
2396 /* If BINFO is not the most derived type, try a more derived class.
2397 A definition there will overrider a definition here. */
2401 if (dfs_find_final_overrider_1
2402 (ffod
->path
[depth
], ffod
, depth
))
2406 method
= look_for_overrides_here (BINFO_TYPE (binfo
), ffod
->fn
);
2409 tree
*candidate
= &ffod
->candidates
;
2411 /* Remove any candidates overridden by this new function. */
2414 /* If *CANDIDATE overrides METHOD, then METHOD
2415 cannot override anything else on the list. */
2416 if (base_derived_from (TREE_VALUE (*candidate
), binfo
))
2418 /* If METHOD overrides *CANDIDATE, remove *CANDIDATE. */
2419 if (base_derived_from (binfo
, TREE_VALUE (*candidate
)))
2420 *candidate
= TREE_CHAIN (*candidate
);
2422 candidate
= &TREE_CHAIN (*candidate
);
2425 /* Add the new function. */
2426 ffod
->candidates
= tree_cons (method
, binfo
, ffod
->candidates
);
2433 /* Called from find_final_overrider via dfs_walk. */
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
);
2448 dfs_find_final_overrider_post (tree
/*binfo*/, void *data
)
2450 find_final_overrider_data
*ffod
= (find_final_overrider_data
*) data
;
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. */
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. */
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
2509 get_vcall_index (tree fn
, tree type
)
2511 vec
<tree_pair_s
, va_gc
> *indices
= CLASSTYPE_VCALL_INDICES (type
);
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
))
2520 /* There should always be an appropriate index. */
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. */
2530 update_vtable_entry_for_fn (tree t
, tree binfo
, tree fn
, tree
* virtuals
,
2538 tree overrider_fn
, overrider_target
;
2539 tree target_fn
= DECL_THUNK_P (fn
) ? THUNK_TARGET (fn
) : fn
;
2540 tree over_return
, base_return
;
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
))
2549 if (look_for_overrides_here (BINFO_TYPE (b
), target_fn
))
2552 /* The nearest definition is from a lost primary. */
2553 if (BINFO_LOST_PRIMARY_P (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
);
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
);
2594 fixed_offset
= virtual_offset
= NULL_TREE
;
2597 /* Find the equivalent binfo within the return type of the
2598 overriding function. We will want the vbase offset from
2600 virtual_offset
= binfo_for_vbase (BINFO_TYPE (virtual_offset
),
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
);
2625 thunk_binfo
= TREE_CHAIN (thunk_binfo
))
2626 if (SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo
),
2627 BINFO_TYPE (base_binfo
)))
2630 /* See if virtual inheritance is involved. */
2631 for (virtual_offset
= thunk_binfo
;
2633 virtual_offset
= BINFO_INHERITANCE_CHAIN (virtual_offset
))
2634 if (BINFO_VIRTUAL_P (virtual_offset
))
2638 || (thunk_binfo
&& !BINFO_OFFSET_ZEROP (thunk_binfo
)))
2640 tree offset
= convert (ssizetype
, BINFO_OFFSET (thunk_binfo
));
2644 /* We convert via virtual base. Adjust the fixed
2645 offset to be from there. */
2647 size_diffop (offset
,
2649 BINFO_OFFSET (virtual_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
);
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
2665 overrider_fn
= make_thunk (overrider_target
, /*this_adjusting=*/0,
2666 fixed_offset
, virtual_offset
);
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
)))
2700 if (BINFO_LOST_PRIMARY_P (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
2716 if (SAME_BINFO_TYPE_P (BINFO_TYPE (b
),
2717 BINFO_TYPE (TREE_VALUE (overrider
))))
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
))
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). */
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
)));
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
;
2746 /* The `this' pointer needs to be adjusted from pointing to
2747 BINFO to pointing at the base where the final overrider
2749 delta
= size_diffop_loc (input_location
,
2751 BINFO_OFFSET (TREE_VALUE (overrider
))),
2752 convert (ssizetype
, BINFO_OFFSET (binfo
)));
2754 modify_vtable_entry (t
, binfo
, overrider_fn
, delta
, virtuals
);
2757 BV_VCALL_INDEX (*virtuals
)
2758 = get_vcall_index (overrider_target
, BINFO_TYPE (virtual_base
));
2760 BV_VCALL_INDEX (*virtuals
) = NULL_TREE
;
2762 BV_LOST_PRIMARY (*virtuals
) = lost
;
2765 /* Called from modify_all_vtables via dfs_walk. */
2768 dfs_modify_vtables (tree binfo
, void* data
)
2770 tree t
= (tree
) data
;
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. */
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. */
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
)));
2800 ix
++, virtuals
= TREE_CHAIN (virtuals
),
2801 old_virtuals
= TREE_CHAIN (old_virtuals
))
2802 update_vtable_entry_for_fn (t
,
2804 BV_FN (old_virtuals
),
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. */
2820 modify_all_vtables (tree t
, tree virtuals
)
2822 tree binfo
= TYPE_BINFO (t
);
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
);
2852 /* We've already got an entry for this function. Skip it. */
2853 *fnsp
= TREE_CHAIN (*fnsp
);
2859 /* Get the base virtual function declarations in T that have the
2863 get_basefndecls (tree name
, tree t
, vec
<tree
> *base_fndecls
)
2866 int n_baseclasses
= BINFO_N_BASE_BINFOS (TYPE_BINFO (t
));
2869 /* Find virtual functions in T with the indicated NAME. */
2870 i
= lookup_fnfields_1 (t
, name
);
2871 bool found_decls
= false;
2873 for (methods
= (*CLASSTYPE_METHOD_VEC (t
))[i
];
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
);
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. */
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. */
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
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. */
2946 warn_hidden (tree t
)
2948 vec
<tree
, va_gc
> *method_vec
= CLASSTYPE_METHOD_VEC (t
);
2952 /* We go through each separately named virtual function. */
2953 for (i
= CLASSTYPE_FIRST_CONVERSION_SLOT
;
2954 vec_safe_iterate (method_vec
, i
, &fns
);
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 ())
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
++)
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. */
3003 FOR_EACH_VEC_ELT (base_fndecls
, k
, 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. */
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
))))
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
))
3044 permerror (DECL_SOURCE_LOCATION (elt
),
3045 "%q#D invalid; an anonymous union can "
3046 "only have non-static data members", elt
);
3048 permerror (DECL_SOURCE_LOCATION (elt
),
3049 "%q#D invalid; an anonymous struct can "
3050 "only have non-static data members", elt
);
3057 if (TREE_PRIVATE (elt
))
3060 permerror (DECL_SOURCE_LOCATION (elt
),
3061 "private member %q#D in anonymous union", elt
);
3063 permerror (DECL_SOURCE_LOCATION (elt
),
3064 "private member %q#D in anonymous struct", elt
);
3066 else if (TREE_PROTECTED (elt
))
3069 permerror (DECL_SOURCE_LOCATION (elt
),
3070 "protected member %q#D in anonymous union", elt
);
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):
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. */
3102 finish_struct_anon (tree t
)
3104 for (tree field
= TYPE_FIELDS (t
); field
; field
= DECL_CHAIN (field
))
3106 if (TREE_STATIC (field
))
3108 if (TREE_CODE (field
) != FIELD_DECL
)
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). */
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
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. */
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. */
3164 for (bv
= BINFO_VIRTUALS (binfo
); bv
; bv
= TREE_CHAIN (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
);
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. */
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
))))
3196 dfs_walk_all (TYPE_BINFO (t
),
3197 dfs_declare_virt_assop_and_dtor
,
3201 /* Declare the inheriting constructor for class T inherited from base
3202 constructor CTOR with the parameter array PARMS of size NPARMS. */
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. */
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
))
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. */
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
));
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. */
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
))
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
);
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
);
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;
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
);
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
;
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
3360 count_fields (tree fields
)
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
)));
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. */
3379 add_fields_to_record_type (tree fields
, struct sorted_fields_type
*field_vec
, int idx
)
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
);
3387 field_vec
->elts
[idx
++] = x
;
3392 /* Add all of the enum values of ENUMTYPE, to the FIELD_VEC elts,
3393 starting at offset IDX. */
3396 add_enum_fields_to_record_type (tree enumtype
,
3397 struct sorted_fields_type
*field_vec
,
3401 for (values
= TYPE_VALUES (enumtype
); values
; values
= TREE_CHAIN (values
))
3402 field_vec
->elts
[idx
++] = TREE_VALUE (values
);
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. */
3411 check_bitfield_decl (tree field
)
3413 tree type
= TREE_TYPE (field
);
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
;
3432 location_t loc
= input_location
;
3433 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
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",
3472 if (w
!= error_mark_node
)
3474 DECL_SIZE (field
) = convert (bitsizetype
, w
);
3475 DECL_BIT_FIELD (field
) = 1;
3480 /* Non-bit-fields are aligned for their type. */
3481 DECL_BIT_FIELD (field
) = 0;
3482 CLEAR_DECL_C_BIT_FIELD (field
);
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
3492 check_field_decl (tree field
,
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
))
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,
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
)
3526 int oldcount
= errorcount
;
3527 if (TYPE_NEEDS_CONSTRUCTING (type
))
3528 error ("member %q+#D with constructor not allowed in union",
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",
3535 if (!warned
&& errorcount
> oldcount
)
3537 inform (DECL_SOURCE_LOCATION (field
), "unrestricted unions "
3538 "only available with -std=c++11 or -std=gnu++11");
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
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:
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
3601 Returns a pointer to the end of the TYPE_FIELDs chain; additional
3602 fields can be added by adding to this chain. */
3605 check_field_decls (tree t
, tree
*access_decls
,
3606 int *cant_have_const_ctor_p
,
3607 int *no_const_asn_ref_p
)
3612 int any_default_members
;
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
3622 any_default_members
= 0;
3624 for (field
= &TYPE_FIELDS (t
); *field
; field
= next
)
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
);
3639 if (TREE_CODE (x
) == TYPE_DECL
3640 || TREE_CODE (x
) == TEMPLATE_DECL
)
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. */
3662 error ("in C++98 %q+D may not be static because it is "
3663 "a member of a union", x
);
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
);
3674 /* Perform error checking that did not get done in
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
)
3692 if (TREE_CODE (x
) == CONST_DECL
|| VAR_P (x
))
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,
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
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
))
3743 (DECL_SOURCE_LOCATION (x
), 0,
3744 "ignoring packed attribute because of unpacked non-POD field %q#D",
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
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,
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
);
3796 if (TREE_CODE (type
) == REFERENCE_TYPE
)
3798 error ("member %q+D cannot be declared as a %<mutable%> "
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
,
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
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. */
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
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. */
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.
3914 *access_decls
= nreverse (*access_decls
);
3917 /* If TYPE is an empty class type, records its OFFSET in the table of
3921 record_subobject_offset (tree type
, tree offset
, splay_tree offsets
)
3925 if (!is_empty_class (type
))
3928 /* Record the location of this empty object in OFFSETS. */
3929 n
= splay_tree_lookup (offsets
, (splay_tree_key
) offset
);
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
,
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. */
3946 check_subobject_offset (tree type
, tree offset
, splay_tree offsets
)
3951 if (!is_empty_class (type
))
3954 /* Record the location of this empty object in OFFSETS. */
3955 n
= splay_tree_lookup (offsets
, (splay_tree_key
) offset
);
3959 for (t
= (tree
) n
->value
; t
; t
= TREE_CHAIN (t
))
3960 if (same_type_p (TREE_VALUE (t
), type
))
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
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. */
3978 walk_subobject_offsets (tree type
,
3979 subobject_offset_fn f
,
3986 tree type_binfo
= NULL_TREE
;
3988 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3990 if (max_offset
&& tree_int_cst_lt (max_offset
, offset
))
3993 if (type
== error_mark_node
)
3999 type
= BINFO_TYPE (type
);
4002 if (CLASS_TYPE_P (type
))
4008 /* Avoid recursing into objects that are not interesting. */
4009 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type
))
4012 /* Record the location of TYPE. */
4013 r
= (*f
) (type
, offset
, offsets
);
4017 /* Iterate through the direct base classes of TYPE. */
4019 type_binfo
= TYPE_BINFO (type
);
4020 for (i
= 0; BINFO_BASE_ITERATE (type_binfo
, i
, binfo
); i
++)
4024 if (BINFO_VIRTUAL_P (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
,
4034 BINFO_OFFSET (orig_binfo
));
4036 r
= walk_subobject_offsets (binfo
,
4046 if (CLASSTYPE_VBASECLASSES (type
))
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. */
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
,
4064 BINFO_OFFSET (binfo
)),
4073 /* We still have to walk the primary base, if it is
4074 virtual. (If it is non-virtual, then it was walked
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
4084 offsets
, max_offset
, /*vbases_p=*/0));
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
))
4099 field_offset
= byte_position (field
);
4101 r
= walk_subobject_offsets (TREE_TYPE (field
),
4103 size_binop (PLUS_EXPR
,
4113 else if (TREE_CODE (type
) == ARRAY_TYPE
)
4115 tree element_type
= strip_array_types (type
);
4116 tree domain
= TYPE_DOMAIN (type
);
4119 /* Avoid recursing into objects that are not interesting. */
4120 if (!CLASS_TYPE_P (element_type
)
4121 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type
))
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
),
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
))
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. */
4156 record_subobject_offsets (tree type
,
4159 bool is_data_member
)
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). */
4176 || !is_empty_class (BINFO_TYPE (type
)))
4177 max_offset
= sizeof_biggest_empty_class
;
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. */
4189 layout_conflict_p (tree type
,
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. */
4204 return walk_subobject_offsets (type
, check_subobject_offset
, offset
,
4205 offsets
, (tree
) (max_node
->key
),
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. */
4216 layout_nonempty_base_or_field (record_layout_info rli
,
4221 tree offset
= NULL_TREE
;
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
);
4236 type
= TREE_TYPE (decl
);
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. */
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:
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
4266 /* In a union, overlap is permitted; all members are placed at
4268 if (TREE_CODE (rli
->t
) == UNION_TYPE
)
4270 if (layout_conflict_p (field_p
? type
: binfo
, offset
,
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. */
4278 /* Bump up by the alignment required for the type. */
4280 = size_binop (PLUS_EXPR
, rli
->bitpos
,
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 "
4300 warning_at (DECL_SOURCE_LOCATION (decl
), OPT_Wabi
, "alignment "
4301 "of %qD will increase in -fabi-version=9", decl
);
4306 /* There was no conflict. We're done laying out this field. */
4310 /* Now that we know where it will be placed, update its
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
4317 propagate_binfo_offsets (binfo
,
4318 size_diffop_loc (input_location
,
4319 convert (ssizetype
, offset
),
4321 BINFO_OFFSET (binfo
))));
4324 /* Returns true if TYPE is empty and OFFSET is nonzero. */
4327 empty_base_at_nonzero_offset_p (tree type
,
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. */
4341 layout_empty_base (record_layout_info rli
, tree binfo
,
4342 tree eoc
, splay_tree offsets
)
4345 tree basetype
= BINFO_TYPE (binfo
);
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
4359 if (layout_conflict_p (binfo
,
4360 BINFO_OFFSET (binfo
),
4364 /* That didn't work. Now, we move forward from the next
4365 available spot in the class. */
4367 propagate_binfo_offsets (binfo
, convert (ssizetype
, eoc
));
4370 if (!layout_conflict_p (binfo
,
4371 BINFO_OFFSET (binfo
),
4374 /* We finally found a spot where there's no overlap. */
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
));
4386 rli
->unpacked_align
= MAX (rli
->unpacked_align
, CLASSTYPE_ALIGN (basetype
));
4387 TYPE_USER_ALIGN (rli
->t
) = 1;
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. */
4403 build_base_field (record_layout_info rli
, tree binfo
,
4404 splay_tree offsets
, tree
*next_field
)
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. */
4414 /* Place the base class. */
4415 if (!is_empty_class (basetype
))
4419 /* The containing class is non-empty because it has a non-empty
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
;
4445 next_field
= &DECL_CHAIN (decl
);
4453 /* On some platforms (ARM), even empty classes will not be
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
))
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
,
4472 /*max_offset=*/NULL_TREE
,
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
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
),
4493 /*is_data_member=*/false);
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
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
4511 int n_baseclasses
= BINFO_N_BASE_BINFOS (TYPE_BINFO (t
));
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
)
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
))
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
))
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. */
4546 check_methods (tree t
)
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
4581 build_clone (tree fn
, tree name
)
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
);
4608 // Clone constraints.
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
4631 if (DECL_HAS_IN_CHARGE_PARM_P (clone
))
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
4651 = build_method_type_directly (basetype
,
4652 TREE_TYPE (TREE_TYPE (clone
)),
4655 TREE_TYPE (clone
) = build_exception_variant (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;
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
);
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. */
4709 decl_cloned_function_p (const_tree decl
, bool 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)
4721 lang_check_failed (__FILE__
, __LINE__
, __FUNCTION__
);
4727 ptr
= &DECL_LANG_SPECIFIC (decl
)->u
.fn
.u5
.cloned_function
;
4728 if (just_testing
&& *ptr
== NULL_TREE
)
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. */
4739 clone_function_decl (tree fn
, int update_method_vec_p
)
4743 /* Avoid inappropriate cloning. */
4745 && DECL_CLONED_FUNCTION_P (DECL_CHAIN (fn
)))
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
);
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
4770 For a non-virtual destructor, we do not build a deleting
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
4798 adjust_clone_args (tree decl
)
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
));
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
),
4847 TREE_TYPE (clone_parms
) = TREE_TYPE (orig_clone_parms
);
4849 type
= build_method_type_directly (basetype
,
4850 TREE_TYPE (TREE_TYPE (clone
)),
4853 type
= build_exception_variant (type
, exceptions
);
4855 type
= cp_build_type_attribute_variant (type
, attrs
);
4856 TREE_TYPE (clone
) = type
;
4858 clone_parms
= NULL_TREE
;
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. */
4870 clone_constructors_and_destructors (tree t
)
4874 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4876 if (!CLASSTYPE_METHOD_VEC (t
))
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. */
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). */
4904 deduce_noexcept_on_destructors (tree t
)
4906 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4908 if (!CLASSTYPE_METHOD_VEC (t
))
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. */
4920 look_for_tm_attr_overrides (tree type
, tree fndecl
)
4922 tree binfo
= TYPE_BINFO (type
);
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
))
4933 o
= look_for_overrides_here (basetype
, fndecl
);
4936 if (lookup_attribute ("transaction_safe_dynamic",
4937 DECL_ATTRIBUTES (o
)))
4938 /* transaction_safe_dynamic is not inherited. */;
4940 found
|= tm_attr_to_mask (find_tm_attribute
4941 (TYPE_ATTRIBUTES (TREE_TYPE (o
))));
4944 found
|= look_for_tm_attr_overrides (basetype
, fndecl
);
4950 /* Subroutine of set_method_tm_attributes. Handle the checks and
4951 inheritance for one virtual method FNDECL. */
4954 set_one_vmethod_tm_attributes (tree type
, tree fndecl
)
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. */
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
)
4982 /* If the overridden function is tm_pure, then FNDECL must be. */
4983 else if (found
== TM_ATTR_PURE
&& tm_attr
)
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
;
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
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. */
5005 if (found
<= TM_ATTR_CALLABLE
&& have
> found
)
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. */
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. */
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
))
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
)
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. */
5061 type_has_user_nondefault_constructor (tree t
)
5065 if (!TYPE_HAS_USER_CONSTRUCTOR (t
))
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
))
5081 /* Returns the defaulted constructor if T has one. Otherwise, returns
5085 in_class_defaulted_default_constructor (tree t
)
5089 if (!TYPE_HAS_USER_CONSTRUCTOR (t
))
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
)
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. */
5114 user_provided_p (tree fn
)
5116 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
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. */
5127 type_has_user_provided_constructor (tree t
)
5131 if (!CLASS_TYPE_P (t
))
5134 if (!TYPE_HAS_USER_CONSTRUCTOR (t
))
5137 /* This can happen in error cases; avoid crashing. */
5138 if (!CLASSTYPE_METHOD_VEC (t
))
5141 for (fns
= CLASSTYPE_CONSTRUCTORS (t
); fns
; fns
= OVL_NEXT (fns
))
5142 if (user_provided_p (OVL_CURRENT (fns
)))
5148 /* Returns true iff class T has a user-provided or explicit constructor. */
5151 type_has_user_provided_or_explicit_constructor (tree t
)
5155 if (!CLASS_TYPE_P (t
))
5158 if (!TYPE_HAS_USER_CONSTRUCTOR (t
))
5161 /* This can happen in error cases; avoid crashing. */
5162 if (!CLASSTYPE_METHOD_VEC (t
))
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
))
5175 /* Returns true iff class T has a non-user-provided (i.e. implicitly
5176 declared or explicitly defaulted in the class body) default
5180 type_has_non_user_provided_default_constructor (tree t
)
5184 if (!TYPE_HAS_DEFAULT_CONSTRUCTOR (t
))
5186 if (CLASSTYPE_LAZY_DEFAULT_CTOR (t
))
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
)))
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. */
5207 vbase_has_user_provided_move_assign (tree type
)
5209 /* Does the type itself have a user-provided move assignment operator? */
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
))
5219 /* Do any of its bases? */
5220 tree binfo
= TYPE_BINFO (type
);
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
)))
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
)))
5239 /* If default-initialization leaves part of TYPE uninitialized, returns
5240 a DECL for the field or TYPE itself (DR 253). */
5243 default_init_uninitialized_part (tree type
)
5248 type
= strip_array_types (type
);
5249 if (!CLASS_TYPE_P (type
))
5251 if (!type_has_non_user_provided_default_constructor (type
))
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
));
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
));
5267 return DECL_P (r
) ? r
: t
;
5273 /* Returns true iff for class T, a trivial synthesized default constructor
5274 would be constexpr. */
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. */
5288 type_has_constexpr_default_constructor (tree t
)
5292 if (!CLASS_TYPE_P (t
))
5294 /* The caller should have stripped an enclosing array. */
5295 gcc_assert (TREE_CODE (t
) != ARRAY_TYPE
);
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. */
5312 type_has_virtual_destructor (tree type
)
5316 if (!CLASS_TYPE_P (type
))
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. */
5327 type_has_move_constructor (tree t
)
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
))
5340 for (fns
= CLASSTYPE_CONSTRUCTORS (t
); fns
; fns
= OVL_NEXT (fns
))
5341 if (move_fn_p (OVL_CURRENT (fns
)))
5347 /* Returns true iff class T has a move assignment operator. */
5350 type_has_move_assign (tree t
)
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
)))
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
5374 type_has_user_declared_move_constructor (tree t
)
5378 if (CLASSTYPE_LAZY_MOVE_CTOR (t
))
5381 if (!CLASSTYPE_METHOD_VEC (t
))
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
))
5394 /* Returns true iff class T has a move assignment operator that was
5395 explicitly declared in the class body. */
5398 type_has_user_declared_move_assign (tree t
)
5402 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t
))
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
))
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. */
5427 type_build_ctor_call (tree t
)
5430 if (TYPE_NEEDS_CONSTRUCTING (t
))
5432 inner
= strip_array_types (t
);
5433 if (!CLASS_TYPE_P (inner
) || ANON_AGGR_TYPE_P (inner
))
5435 if (!TYPE_HAS_DEFAULT_CONSTRUCTOR (inner
))
5437 if (cxx_dialect
< cxx11
)
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
))
5452 /* Like type_build_ctor_call, but for destructors. */
5455 type_build_dtor_call (tree t
)
5458 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t
))
5460 inner
= strip_array_types (t
);
5461 if (!CLASS_TYPE_P (inner
) || ANON_AGGR_TYPE_P (inner
)
5462 || !COMPLETE_TYPE_P (inner
))
5464 if (cxx_dialect
< cxx11
)
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
))
5479 /* Remove all zero-width bit-fields from T. */
5482 remove_zero_width_bit_fields (tree t
)
5486 fieldsp
= &TYPE_FIELDS (t
);
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)
5496 && (DECL_SIZE (*fieldsp
) == NULL_TREE
5497 || integer_zerop (DECL_SIZE (*fieldsp
))))
5498 *fieldsp
= DECL_CHAIN (*fieldsp
);
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. */
5508 type_requires_array_cookie (tree type
)
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
))
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
5525 fns
= lookup_fnfields (TYPE_BINFO (type
),
5526 ansi_opname (VEC_DELETE_EXPR
),
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
)
5532 /* Loop through all of the functions. */
5533 for (fns
= BASELINK_FUNCTIONS (fns
); fns
; fns
= OVL_NEXT (fns
))
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
)
5545 /* Do not consider this function if its second argument is an
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. */
5569 finalize_literal_type_property (tree t
)
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. */
5602 explain_non_literal_class (tree t
)
5604 static hash_set
<tree
> *diagnosed
;
5606 if (!CLASS_TYPE_P (t
))
5608 t
= TYPE_MAIN_VARIANT (t
);
5610 if (diagnosed
== NULL
)
5611 diagnosed
= new hash_set
<tree
>;
5612 if (diagnosed
->add (t
))
5613 /* Already explained. */
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. */
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
);
5643 explain_invalid_constexpr_fn (fn
);
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",
5660 explain_non_literal_class (basetype
);
5664 for (field
= TYPE_FIELDS (t
); field
; field
= TREE_CHAIN (field
))
5667 if (TREE_CODE (field
) != FIELD_DECL
)
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",
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. */
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
;
5701 bool saved_complex_asn_ref
;
5702 bool saved_nontrivial_dtor
;
5705 /* By default, we use const reference arguments and generate default
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
,
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. */
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
,
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
));
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
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
);
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",
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
5812 && CLASSTYPE_NON_AGGREGATE (t
))
5816 for (field
= TYPE_FIELDS (t
); field
; field
= DECL_CHAIN (field
))
5820 if (TREE_CODE (field
) != FIELD_DECL
5821 || DECL_INITIAL (field
) != NULL_TREE
)
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
,
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
);
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
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
5900 create_vtable_ptr (tree t
, tree
* virtuals_p
)
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*! */
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;
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. */
5973 propagate_binfo_offsets (tree binfo
, tree offset
)
5979 /* Update BINFO's offset. */
5980 BINFO_OFFSET (binfo
)
5981 = convert (sizetype
,
5982 size_binop (PLUS_EXPR
,
5983 convert (ssizetype
, BINFO_OFFSET (binfo
)),
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
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
)
6000 if (BINFO_VIRTUAL_P (base_binfo
))
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. */
6012 layout_virtual_bases (record_layout_info rli
, splay_tree offsets
)
6018 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t
)) == 0)
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
);
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
))
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
6049 end_of_base (tree binfo
)
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
));
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. */
6071 end_of_class (tree t
, int include_virtuals_p
)
6073 tree result
= size_zero_node
;
6074 vec
<tree
, va_gc
> *vbases
;
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
)))
6089 offset
= end_of_base (base_binfo
);
6090 if (tree_int_cst_lt (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
))
6106 /* Warn about bases of T that are inaccessible because they are
6107 ambiguous. For example:
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'
6117 warn_about_ambiguous_bases (tree t
)
6120 vec
<tree
, va_gc
> *vbases
;
6125 /* If there are no repeated bases, nothing can be ambiguous. */
6126 if (!CLASSTYPE_REPEATED_BASE_P (t
))
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",
6140 /* Check for ambiguous virtual bases. */
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. */
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. */
6165 include_empty_classes (record_layout_info rli
)
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
)));
6185 = size_binop (PLUS_EXPR
,
6187 size_binop (MULT_EXPR
,
6188 convert (bitsizetype
,
6189 size_binop (MINUS_EXPR
,
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. */
6201 layout_class_type (tree t
, tree
*virtuals_p
)
6203 tree non_static_data_members
;
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. */
6214 /* T, as a base class. */
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. */
6232 DECL_CHAIN (vptr
) = TYPE_FIELDS (t
);
6233 TYPE_FIELDS (t
) = vptr
;
6234 next_field
= &DECL_CHAIN (vptr
);
6235 place_field (rli
, vptr
);
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
,
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
))
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:
6262 struct S2 { static S1 s1; };
6264 At this point, finish_record_layout will be called, but
6265 S1 is still incomplete.) */
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
6272 determine_visibility (field
);
6277 type
= TREE_TYPE (field
);
6278 if (type
== error_mark_node
)
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
6286 if (DECL_C_BIT_FIELD (field
)
6287 && tree_int_cst_lt (TYPE_SIZE (type
), DECL_SIZE (field
)))
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
]))))
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
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
);
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
);
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
);
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
),
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. */
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
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
))
6398 = c_build_bitfield_integer_type (width
,
6399 TYPE_UNSIGNED (ftype
));
6401 = cp_build_qualified_type (TREE_TYPE (field
),
6402 cp_type_quals (ftype
));
6406 /* If we needed additional padding after this field, add it
6412 padding_field
= build_decl (input_location
,
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
,
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
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. */
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
,
6463 size_binop (CEIL_DIV_EXPR
,
6464 rli_size_so_far (rli
),
6465 bitsize_int (BITS_PER_UNIT
))),
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
,
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
;
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
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
))
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
));
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. */
6561 determine_key_method (tree type
)
6565 if (TYPE_FOR_JAVA (type
)
6566 || processing_template_decl
6567 || CLASSTYPE_TEMPLATE_INSTANTIATION (type
)
6568 || CLASSTYPE_INTERFACE_KNOWN (type
))
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
;
6590 /* Allocate and return an instance of struct sorted_fields_type with
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
));
6605 /* Perform processing required when the definition of T (a class type)
6609 finish_struct_1 (tree t
)
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
);
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
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
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. */
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
))
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
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. */
6750 /* Build the VTT for 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
);
6764 if (warn_overloaded_virtual
)
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
);
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. */
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. */
6830 insert_late_enum_def_into_classtype_sorted_fields (tree enumtype
, tree t
)
6832 struct sorted_fields_type
*sorted_fields
= CLASSTYPE_SORTED_FIELDS (t
);
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. */
6854 unreverse_member_declarations (tree t
)
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. */
6868 for (x
= TYPE_FIELDS (t
);
6869 x
&& TREE_CODE (x
) != TYPE_DECL
;
6872 next
= DECL_CHAIN (x
);
6873 DECL_CHAIN (x
) = prev
;
6878 DECL_CHAIN (TYPE_FIELDS (t
)) = x
;
6880 TYPE_FIELDS (t
) = prev
;
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
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
)
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
);
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
);
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. */
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
))
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
)
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
));
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
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. */
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
))
7007 if (POINTER_TYPE_P (TREE_TYPE (instance
)))
7010 return RECUR (TREE_OPERAND (instance
, 0));
7013 /* This is a call to a constructor, hence it's never zero. */
7014 if (TREE_HAS_CONSTRUCTOR (instance
))
7018 return TREE_TYPE (instance
);
7023 /* This is a call to a constructor, hence it's never zero. */
7024 if (TREE_HAS_CONSTRUCTOR (instance
))
7028 return TREE_TYPE (instance
);
7030 return RECUR (TREE_OPERAND (instance
, 0));
7032 case POINTER_PLUS_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));
7044 return RECUR (TREE_OPERAND (instance
, 0));
7047 instance
= TREE_OPERAND (instance
, 0);
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
))
7057 return RECUR (instance
);
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));
7068 if (TREE_CODE (TREE_TYPE (instance
)) == ARRAY_TYPE
7069 && MAYBE_CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (instance
))))
7073 return TREE_TYPE (TREE_TYPE (instance
));
7075 /* fall through... */
7079 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (instance
)))
7083 return TREE_TYPE (instance
);
7085 else if (instance
== current_class_ptr
)
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
))))
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. */
7114 /* Enter the INSTANCE in a table to prevent recursion; a
7115 variable's initializer may refer to the variable
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
))
7125 slot
= fixed_type_or_null_ref_ht
->find_slot (instance
, INSERT
);
7127 type
= RECUR (DECL_INITIAL (instance
));
7128 fixed_type_or_null_ref_ht
->remove_elt (instance
);
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
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
);
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
7165 if (in_template_function ())
7167 /* In a template we only care about the type of the result. */
7173 fixed
= fixed_type_or_null (instance
, nonnull
, &cdtorp
);
7174 if (fixed
== NULL_TREE
)
7176 if (POINTER_TYPE_P (t
))
7178 if (!same_type_ignoring_top_level_qualifiers_p (t
, fixed
))
7180 return cdtorp
? -1 : 1;
7185 init_class_processing (void)
7187 current_class_depth
= 0;
7188 current_class_stack_size
= 10;
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. */
7202 restore_class_cache (void)
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
;
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. */
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;
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;
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)
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. */
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. */
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. */
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. */
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. */
7331 currently_open_class (tree t
)
7335 if (!CLASS_TYPE_P (t
))
7338 t
= TYPE_MAIN_VARIANT (t
);
7340 /* We start looking from 1 because entry 0 is from global scope,
7342 for (i
= current_class_depth
; i
> 0; --i
)
7345 if (i
== current_class_depth
)
7346 c
= current_class_type
;
7349 if (current_class_stack
[i
].hidden
)
7351 c
= current_class_stack
[i
].type
;
7355 if (same_type_p (c
, t
))
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. */
7366 currently_open_derived_class (tree t
)
7370 /* The bases of a dependent type are unknown. */
7371 if (dependent_type_p (t
))
7374 if (!current_class_type
)
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
)
7384 if (DERIVED_FROM_P (t
, current_class_stack
[i
].type
))
7385 return current_class_stack
[i
].type
;
7391 /* Return the outermost enclosing class type that is still open, or
7395 outermost_open_class (void)
7397 if (!current_class_type
)
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
)
7406 tree t
= current_class_stack
[i
].type
;
7407 if (!TYPE_BEING_DEFINED (t
))
7414 /* Returns the innermost class type which is not a lambda closure type. */
7417 current_nonlambda_class_type (void)
7421 /* We start looking from 1 because entry 0 is from global scope,
7423 for (i
= current_class_depth
; i
> 0; --i
)
7426 if (i
== current_class_depth
)
7427 c
= current_class_type
;
7430 if (current_class_stack
[i
].hidden
)
7432 c
= current_class_stack
[i
].type
;
7436 if (!LAMBDA_TYPE_P (c
))
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. */
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
))
7456 push_nested_class (DECL_CONTEXT (TYPE_MAIN_DECL (type
)));
7461 /* Undoes a push_nested_class call. */
7464 pop_nested_class (void)
7466 tree context
= DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type
));
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. */
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
;
7514 error ("language string %<\"%E\"%> not recognized", name
);
7517 /* Get out of the current language scope. */
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
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. */
7541 resolve_address_of_overloaded_function (tree target_type
,
7543 tsubst_flags_t complain
,
7545 tree explicit_targs
,
7548 /* Here's what the standard says:
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. */
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
;
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
))
7594 else if (TYPE_PTRMEMFUNC_P (target_type
))
7595 /* This is OK, too. */
7597 else if (TREE_CODE (target_type
) == FUNCTION_TYPE
)
7598 /* This is OK, too. This comes from a conversion to reference
7600 target_type
= build_reference_type (target_type
);
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. */
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. */
7635 if ((TREE_CODE (TREE_TYPE (fn
)) == METHOD_TYPE
)
7637 /* We're looking for a non-static member, and this isn't
7638 one, or vice versa. */
7641 /* Ignore functions which haven't been explicitly
7643 if (DECL_ANTICIPATED (fn
))
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. */
7659 tree target_arg_types
;
7660 tree target_ret_type
;
7663 unsigned int nargs
, ia
;
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
);
7677 for (fns
= overload
; fns
; fns
= OVL_NEXT (fns
))
7679 tree fn
= OVL_CURRENT (fns
);
7683 if (TREE_CODE (fn
) != TEMPLATE_DECL
)
7684 /* We're only looking for templates. */
7687 if ((TREE_CODE (TREE_TYPE (fn
)) == METHOD_TYPE
)
7689 /* We're not looking for a non-static member, and this is
7690 one, or vice versa. */
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
))
7700 /* Try to do argument deduction. */
7701 targs
= make_tree_vec (DECL_NTPARMS (fn
));
7702 instantiation
= fn_type_unification (fn
, explicit_targs
, targs
, args
,
7704 DEDUCE_EXACT
, LOOKUP_NORMAL
,
7706 if (instantiation
== error_mark_node
)
7707 /* Instantiation failed. */
7710 /* Constraints must be satisfied. This is done before
7711 return type deduction since that instantiates the
7713 if (flag_concepts
&& !constraints_satisfied_p (instantiation
))
7716 /* And now force instantiation to do return type deduction. */
7717 if (undeduced_auto_decl (instantiation
))
7720 instantiate_decl (instantiation
, /*defer*/false, /*class*/false);
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. */
7736 tree match
= most_specialized_instantiation (matches
);
7738 if (match
!= error_mark_node
)
7739 matches
= tree_cons (TREE_PURPOSE (match
),
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
)),
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
)))
7777 if (complain
& tf_error
)
7779 error ("converting overloaded function %qD to type %q#T is ambiguous",
7780 DECL_NAME (OVL_FUNCTION (overload
)),
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
);
7809 inform (input_location
, "(a pointer to member can only be formed with %<&%E%>)", fn
);
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
);
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
);
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
7857 cxx_mark_addressable (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. */
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
)))
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. */
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
))
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
);
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
7957 gcc_assert (TREE_CODE (rhs
) == TEMPLATE_ID_EXPR
);
7961 case TEMPLATE_ID_EXPR
:
7963 tree fns
= TREE_OPERAND (rhs
, 0);
7964 tree args
= TREE_OPERAND (rhs
, 1);
7967 resolve_address_of_overloaded_function (lhstype
, fns
, complain_in
,
7968 /*template_only=*/true,
7975 resolve_address_of_overloaded_function (lhstype
, rhs
, complain_in
,
7976 /*template_only=*/false,
7977 /*explicit_targs=*/NULL_TREE
,
7982 if (PTRMEM_OK_P (rhs
))
7983 complain
|= tf_ptrmem_ok
;
7985 return instantiate_type (lhstype
, TREE_OPERAND (rhs
, 0), complain
);
7989 return error_mark_node
;
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). */
8004 get_vfield_name (tree type
)
8006 tree binfo
, base_binfo
;
8009 for (binfo
= TYPE_BINFO (type
);
8010 BINFO_N_BASE_BINFOS (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
)))
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
);
8029 print_class_statistics (void)
8031 if (! GATHER_STATISTICS
)
8034 fprintf (stderr
, "convert_harshness = %d\n", n_convert_harshness
);
8035 fprintf (stderr
, "compute_conversion_costs = %d\n", n_compute_conversion_costs
);
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. */
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
);
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
)
8081 if (! CLASS_TYPE_P (type
))
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. */
8091 is_really_empty_class (tree type
)
8093 if (CLASS_TYPE_P (type
))
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
))
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
)))
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
)))
8116 else if (TREE_CODE (type
) == ARRAY_TYPE
)
8117 return is_really_empty_class (TREE_TYPE (type
));
8121 /* Note that NAME was looked up while the current class was being
8122 defined and that the result of that lookup was DECL. */
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
)))
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
))
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. */
8155 note_name_declared_in_class (tree name
, tree decl
)
8157 splay_tree names_used
;
8160 /* Look to see if we ever used this name. */
8162 = current_class_stack
[current_class_depth
- 1].names_used
;
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
)
8172 n
= splay_tree_lookup (names_used
, (splay_tree_key
) name
);
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
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. */
8192 get_vtbl_decl_for_binfo (tree binfo
)
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);
8203 gcc_assert (VAR_P (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. */
8215 get_primary_binfo (tree binfo
)
8219 primary_base
= CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo
));
8223 return copied_binfo (primary_base
, binfo
);
8226 /* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
8229 maybe_indent_hierarchy (FILE * stream
, int indent
, int indented_p
)
8232 fprintf (stream
, "%*s", indent
, "");
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. */
8242 dump_class_hierarchy_r (FILE *stream
,
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
);
8258 fprintf (stream
, "alternative-path\n");
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");
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");
8288 fprintf (stream
, "\n");
8290 if (!(flags
& TDF_SLIM
))
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
));
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);
8333 /* Dump the BINFO hierarchy for T. */
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
)))
8345 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t
))
8347 dump_class_hierarchy_r (stream
, flags
, TYPE_BINFO (t
), TYPE_BINFO (t
), 0);
8348 fprintf (stream
, "\n");
8351 /* Debug interface to hierarchy dumping. */
8354 debug_class (tree t
)
8356 dump_class_hierarchy_1 (stderr
, TDF_SLIM
, t
);
8360 dump_class_hierarchy (tree t
)
8363 FILE *stream
= get_dump_info (TDI_class
, &flags
);
8367 dump_class_hierarchy_1 (stream
, flags
, t
);
8372 dump_array (FILE * stream
, tree decl
)
8375 unsigned HOST_WIDE_INT ix
;
8377 tree size
= TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl
)));
8379 elt
= (tree_to_shwi (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl
))))
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
)),
8389 fprintf (stream
, "%-4ld %s\n", (long)(ix
* elt
),
8390 expr_as_string (value
, TFF_PLAIN_IDENTIFIER
));
8394 dump_vtable (tree t
, tree binfo
, tree vtable
)
8397 FILE *stream
= get_dump_info (TDI_class
, &flags
);
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
));
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");
8423 dump_vtt (tree t
, tree vtt
)
8426 FILE *stream
= get_dump_info (TDI_class
, &flags
);
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. */
8443 dump_thunk (FILE *stream
, int indent
, tree thunk
)
8445 static const char spaces
[] = " ";
8446 tree name
= DECL_NAME (thunk
);
8449 fprintf (stream
, "%.*s%p %s %s", indent
, spaces
,
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
)
8462 else if (DECL_THIS_THUNK_P (thunk
))
8463 fprintf (stream
, " vcall=" HOST_WIDE_INT_PRINT_DEC
,
8464 tree_to_shwi (virtual_adjust
));
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. */
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. */
8490 finish_vtbls (tree t
)
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
),
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
))
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. */
8517 initialize_vtable (tree binfo
, vec
<constructor_elt
, va_gc
> *inits
)
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.
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. */
8546 vec
<constructor_elt
, va_gc
> *inits
;
8548 /* Build up the initializers for the VTT. */
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. */
8557 /* Figure out the type of the VTT. */
8558 type
= build_array_of_n_type (const_ptr_type_node
,
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
;
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. */
8577 binfo_ctor_vtable (tree binfo
)
8583 vt
= BINFO_VTABLE (binfo
);
8584 if (TREE_CODE (vt
) == TREE_LIST
)
8585 vt
= TREE_VALUE (vt
);
8586 if (TREE_CODE (vt
) == TREE_BINFO
)
8595 /* Data for secondary VTT initialization. */
8596 struct secondary_vptr_vtt_init_data
8598 /* Is this the primary VTT? */
8601 /* Current index into the VTT. */
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. */
8620 build_vtt_inits (tree binfo
, tree t
, vec
<constructor_elt
, va_gc
> **inits
,
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
)))
8633 /* We need to use a construction vtable if this is not the primary
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
);
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
;
8675 /* Add the secondary VTTs for virtual bases in inheritance graph
8677 for (b
= TYPE_BINFO (BINFO_TYPE (binfo
)); b
; b
= TREE_CHAIN (b
))
8679 if (!BINFO_VIRTUAL_P (b
))
8682 build_vtt_inits (b
, t
, inits
, index
);
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. */
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
8703 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo
), data
->type_being_constructed
))
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
))
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
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
));
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. */
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
;
8758 /* This might be a primary base, so have no vtable in this
8762 /* If we scribbled the construction vtable vptr into BINFO, clear it
8764 if (TREE_CODE (vtable
) == TREE_LIST
8765 && (TREE_PURPOSE (vtable
) == (tree
) data
))
8766 BINFO_VTABLE (binfo
) = TREE_CHAIN (vtable
);
8771 /* Build the construction vtable group for BINFO which is in the
8772 hierarchy dominated by T. */
8775 build_ctor_vtbl_group (tree binfo
, tree t
)
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
))
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;
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
8807 for (vbase
= TYPE_BINFO (BINFO_TYPE (binfo
));
8809 vbase
= TREE_CHAIN (vbase
))
8813 if (!BINFO_VIRTUAL_P (vbase
))
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 ());
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. */
8844 accumulate_vtbl_inits (tree binfo
,
8849 vec
<constructor_elt
, va_gc
> **inits
)
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
)))
8861 /* If we're building a construction vtable, we're not interested in
8862 subobjects that don't require construction vtables. */
8864 && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo
))
8865 && !binfo_via_virtual (orig_binfo
, BINFO_TYPE (rtti_binfo
)))
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
))
8881 accumulate_vtbl_inits (base_binfo
,
8882 BINFO_BASE_BINFO (orig_binfo
, i
),
8883 rtti_binfo
, vtbl
, t
,
8888 /* Called from accumulate_vtbl_inits. Adds the initializers for the
8889 BINFO vtable to L. */
8892 dfs_accumulate_vtbl_inits (tree binfo
,
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
);
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
8919 3) We are primary to something not a base of RTTI_BINFO. */
8922 tree last
= NULL_TREE
;
8924 /* First, look through the bases we are primary to for RTTI_BINFO
8925 or a virtual base. */
8927 while (BINFO_PRIMARY_P (b
))
8929 b
= BINFO_INHERITANCE_CHAIN (b
);
8931 if (BINFO_VIRTUAL_P (b
) || b
== rtti_binfo
)
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
)
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. */
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. */
8952 /* Otherwise, this is case 3 and we get our own. */
8954 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo
))
8957 n_inits
= vec_safe_length (*l
);
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
);
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
);
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
9015 build_vtbl_initializer (tree binfo
,
9019 int* non_fn_entries_p
,
9020 vec
<constructor_elt
, va_gc
> **inits
)
9026 vec
<tree
, va_gc
> *vbases
;
9029 /* Initialize VID. */
9030 memset (&vid
, 0, sizeof (vid
));
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
);
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
,
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
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
);
9100 /* Go through all the ordinary virtual functions, building up
9102 for (v
= BINFO_VIRTUALS (orig_binfo
); v
; v
= TREE_CHAIN (v
))
9106 tree fn
, fn_original
;
9107 tree init
= NULL_TREE
;
9111 if (DECL_THUNK_P (fn
))
9113 if (!DECL_NAME (fn
))
9115 if (THUNK_ALIAS (fn
))
9117 fn
= THUNK_ALIAS (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
9133 if (BV_LOST_PRIMARY (v
))
9134 init
= size_zero_node
;
9138 /* Pull the offset for `this', and the function to call, out of
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
))
9151 if (!TARGET_VTABLE_USES_DESCRIPTORS
)
9153 if (abort_fndecl_addr
== NULL
)
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
));
9174 if (!integer_zerop (delta
) || vcall_index
)
9176 fn
= make_thunk (fn
, /*this_adjusting=*/1, delta
, vcall_index
);
9177 if (!DECL_NAME (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
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
)
9202 if (init
== size_zero_node
)
9203 for (i
= 0; i
< TARGET_VTABLE_USES_DESCRIPTORS
; ++i
)
9204 CONSTRUCTOR_APPEND_ELT (*inits
, NULL_TREE
, init
);
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
);
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. */
9224 build_vcall_and_vbase_vtbl_entries (tree binfo
, vtbl_init_data
* vid
)
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
);
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. */
9246 build_vbase_offset_vtbl_entries (tree binfo
, vtbl_init_data
* vid
)
9250 tree non_primary_binfo
;
9252 /* If there are no virtual baseclasses, then there is nothing to
9254 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo
)))
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
))
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
;
9277 b
= BINFO_INHERITANCE_CHAIN (non_primary_binfo
);
9278 if (get_primary_binfo (b
) != non_primary_binfo
)
9280 non_primary_binfo
= b
;
9283 /* Go through the virtual bases, adding the offsets. */
9284 for (vbase
= TYPE_BINFO (BINFO_TYPE (binfo
));
9286 vbase
= TREE_CHAIN (vbase
))
9291 if (!BINFO_VIRTUAL_P (vbase
))
9294 /* Find the instance of this virtual base in the complete
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
))
9302 BINFO_VTABLE_PATH_MARKED (b
) = 1;
9304 /* Figure out where we can find this vbase offset. */
9305 delta
= size_binop (MULT_EXPR
,
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
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)
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
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. */
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. */
9383 add_vcall_offset_vtbl_entries_r (tree binfo
, vtbl_init_data
* vid
)
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
)
9396 /* If BINFO has a primary base, process it first. */
9397 primary_binfo
= get_primary_binfo (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. */
9413 add_vcall_offset_vtbl_entries_1 (tree binfo
, vtbl_init_data
* vid
)
9415 /* Make entries for the rest of the virtuals. */
9418 /* The ABI requires that the methods be processed in declaration
9420 for (orig_fn
= TYPE_METHODS (BINFO_TYPE (binfo
));
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. */
9430 add_vcall_offset (tree orig_fn
, tree binfo
, vtbl_init_data
*vid
)
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
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
)))
9450 /* If we are building these vcall offsets as part of building
9451 the vtable for the most derived class, remember the vcall
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
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
)
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
);
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
,
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. */
9501 build_rtti_vtbl_entries (tree binfo
, vtbl_init_data
* vid
)
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. */
9514 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b
))
9515 && !BINFO_LOST_PRIMARY_P (b
))
9519 primary_base
= get_primary_binfo (b
);
9520 gcc_assert (BINFO_PRIMARY_P (primary_base
)
9521 && BINFO_INHERITANCE_CHAIN (primary_base
) == b
);
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. */
9529 decl
= build_address (get_tinfo_decl (t
));
9531 decl
= integer_zero_node
;
9533 /* Convert the declaration to a type that can be stored in the
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
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. */
9558 publicly_uniquely_derived_p (tree parent
, tree type
)
9560 tree base
= lookup_base (type
, parent
, ba_ignore_scope
| ba_check
,
9562 return base
&& base
!= error_mark_node
;
9565 /* CTX1 and CTX2 are declaration contexts. Return the innermost common
9566 class between them, if any. */
9569 common_enclosing_class (tree ctx1
, tree ctx2
)
9571 if (!TYPE_P (ctx1
) || !TYPE_P (ctx2
))
9573 gcc_assert (ctx1
== TYPE_MAIN_VARIANT (ctx1
)
9574 && ctx2
== TYPE_MAIN_VARIANT (ctx2
));
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
))
9586 for (tree t
= ctx1
; TYPE_P (t
); t
= TYPE_CONTEXT (t
))
9587 TYPE_MARKED_P (t
) = false;
9591 #include "gt-cp-class.h"