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