]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/class.c
rm a bunch of _stat allocation functions
[thirdparty/gcc.git] / gcc / cp / class.c
CommitLineData
8d08fdba 1/* Functions related to building classes and their related objects.
23a5b65a 2 Copyright (C) 1987-2014 Free Software Foundation, Inc.
8d08fdba
MS
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
4
f5adbb8d 5This file is part of GCC.
8d08fdba 6
f5adbb8d 7GCC is free software; you can redistribute it and/or modify
8d08fdba 8it under the terms of the GNU General Public License as published by
e77f031d 9the Free Software Foundation; either version 3, or (at your option)
8d08fdba
MS
10any later version.
11
f5adbb8d 12GCC is distributed in the hope that it will be useful,
8d08fdba
MS
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
e77f031d
NC
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
8d08fdba
MS
20
21
e92cc029 22/* High-level class interface. */
8d08fdba
MS
23
24#include "config.h"
8d052bc7 25#include "system.h"
4977bab6
ZW
26#include "coretypes.h"
27#include "tm.h"
e7a587ef 28#include "tree.h"
d8a2d370
DN
29#include "stringpool.h"
30#include "stor-layout.h"
31#include "attribs.h"
2fb9a547
AM
32#include "pointer-set.h"
33#include "hash-table.h"
8d08fdba
MS
34#include "cp-tree.h"
35#include "flags.h"
54f92bfb 36#include "toplev.h"
1af6141b 37#include "target.h"
7b6d72fc 38#include "convert.h"
8634c649 39#include "cgraph.h"
7ee2468b 40#include "dumpfile.h"
245763e3 41#include "splay-tree.h"
45b0be94 42#include "gimplify.h"
807e902e 43#include "wide-int.h"
8d08fdba 44
61a127b3
MM
45/* The number of nested classes being processed. If we are not in the
46 scope of any class, this is zero. */
47
8d08fdba
MS
48int current_class_depth;
49
61a127b3
MM
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;
8f032717
MM
64
65 /* If were defining TYPE, the names used in this class. */
66 splay_tree names_used;
c888c93b
MM
67
68 /* Nonzero if this class is no longer open, because of a call to
69 push_to_top_level. */
70 size_t hidden;
61a127b3
MM
71}* class_stack_node_t;
72
911a71a7 73typedef struct vtbl_init_data_s
c35cce41 74{
911a71a7
MM
75 /* The base for which we're building initializers. */
76 tree binfo;
73ea87d7 77 /* The type of the most-derived type. */
c35cce41 78 tree derived;
73ea87d7
NS
79 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
80 unless ctor_vtbl_p is true. */
81 tree rtti_binfo;
9bab6c90
MM
82 /* The negative-index vtable initializers built up so far. These
83 are in order from least negative index to most negative index. */
9771b263 84 vec<constructor_elt, va_gc> *inits;
c35cce41 85 /* The binfo for the virtual base for which we're building
911a71a7 86 vcall offset initializers. */
c35cce41 87 tree vbase;
9bab6c90
MM
88 /* The functions in vbase for which we have already provided vcall
89 offsets. */
9771b263 90 vec<tree, va_gc> *fns;
c35cce41
MM
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. */
911a71a7
MM
95 int primary_vtbl_p;
96 /* Nonzero if we are building the initializer for a construction
97 vtable. */
98 int ctor_vtbl_p;
548502d3
MM
99 /* True when adding vcall offset entries to the vtable. False when
100 merely computing the indices. */
101 bool generate_vcall_entries;
911a71a7 102} vtbl_init_data;
c35cce41 103
c20118a8 104/* The type of a function passed to walk_subobject_offsets. */
94edc4ab 105typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
c20118a8 106
4639c5c6 107/* The stack itself. This is a dynamically resized array. The
61a127b3
MM
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
c5a35c3c
MM
112/* The size of the largest empty class seen in this translation unit. */
113static GTY (()) tree sizeof_biggest_empty_class;
114
1f6e1acc
AS
115/* An array of all local classes present in this translation unit, in
116 declaration order. */
9771b263 117vec<tree, va_gc> *local_classes;
1f6e1acc 118
94edc4ab
NN
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);
dbbf88d1 124static int build_secondary_vtable (tree);
94edc4ab
NN
125static void finish_vtbls (tree);
126static void modify_vtable_entry (tree, tree, tree, tree, tree *);
94edc4ab
NN
127static void finish_struct_bits (tree);
128static int alter_access (tree, tree, tree);
129static void handle_using_decl (tree, tree);
94edc4ab
NN
130static tree dfs_modify_vtables (tree, void *);
131static tree modify_all_vtables (tree, tree);
fc6633e0 132static void determine_primary_bases (tree);
94edc4ab
NN
133static void finish_struct_methods (tree);
134static void maybe_warn_about_overly_private_class (tree);
94edc4ab
NN
135static int method_name_cmp (const void *, const void *);
136static int resort_method_name_cmp (const void *, const void *);
85b5d65a 137static void add_implicitly_declared_members (tree, tree*, int, int);
94edc4ab 138static tree fixed_type_or_null (tree, int *, int *);
00bfffa4 139static tree build_simple_base_path (tree expr, tree binfo);
94edc4ab 140static tree build_vtbl_ref_1 (tree, tree);
9d6a019c 141static void build_vtbl_initializer (tree, tree, tree, tree, int *,
9771b263 142 vec<constructor_elt, va_gc> **);
94edc4ab 143static int count_fields (tree);
d07605f5 144static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
cba0366c 145static void insert_into_classtype_sorted_fields (tree, tree, int);
e7df0180 146static bool check_bitfield_decl (tree);
10746f37
JM
147static void check_field_decl (tree, tree, int *, int *, int *);
148static void check_field_decls (tree, tree *, int *, int *);
58731fd1
MM
149static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
150static void build_base_fields (record_layout_info, splay_tree, tree *);
94edc4ab
NN
151static void check_methods (tree);
152static void remove_zero_width_bit_fields (tree);
880a467b 153static bool accessible_nvdtor_p (tree);
10746f37 154static void check_bases (tree, int *, int *);
58731fd1
MM
155static void check_bases_and_members (tree);
156static tree create_vtable_ptr (tree, tree *);
17bbb839 157static void include_empty_classes (record_layout_info);
e93ee644 158static void layout_class_type (tree, tree *);
dbbf88d1 159static void propagate_binfo_offsets (tree, tree);
17bbb839 160static void layout_virtual_bases (record_layout_info, splay_tree);
94edc4ab
NN
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 *);
e6a66567 165static void add_vcall_offset (tree, tree, vtbl_init_data *);
94edc4ab 166static void layout_vtable_decl (tree, int);
5d5a519f 167static tree dfs_find_final_overrider_pre (tree, void *);
dbbf88d1 168static tree dfs_find_final_overrider_post (tree, void *);
94edc4ab
NN
169static tree find_final_overrider (tree, tree, tree);
170static int make_new_vtable (tree, tree);
b5791fdc 171static tree get_primary_binfo (tree);
94edc4ab 172static int maybe_indent_hierarchy (FILE *, int, int);
dbbf88d1 173static tree dump_class_hierarchy_r (FILE *, int, tree, tree, int);
94edc4ab 174static void dump_class_hierarchy (tree);
bb885938 175static void dump_class_hierarchy_1 (FILE *, int, tree);
94edc4ab
NN
176static void dump_array (FILE *, tree);
177static void dump_vtable (tree, tree, tree);
178static void dump_vtt (tree, tree);
bb885938 179static void dump_thunk (FILE *, int, tree);
94edc4ab 180static tree build_vtable (tree, tree, tree);
9771b263 181static void initialize_vtable (tree, vec<constructor_elt, va_gc> *);
94edc4ab 182static void layout_nonempty_base_or_field (record_layout_info,
5d5a519f 183 tree, tree, splay_tree);
94edc4ab 184static tree end_of_class (tree, int);
d9d9dbc0 185static bool layout_empty_base (record_layout_info, tree, tree, splay_tree);
9d6a019c 186static void accumulate_vtbl_inits (tree, tree, tree, tree, tree,
9771b263 187 vec<constructor_elt, va_gc> **);
9d6a019c 188static void dfs_accumulate_vtbl_inits (tree, tree, tree, tree, tree,
9771b263 189 vec<constructor_elt, va_gc> **);
94edc4ab 190static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
5d5a519f 191static void build_vcall_and_vbase_vtbl_entries (tree, vtbl_init_data *);
94edc4ab
NN
192static void clone_constructors_and_destructors (tree);
193static tree build_clone (tree, tree);
a2ddc397 194static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
94edc4ab
NN
195static void build_ctor_vtbl_group (tree, tree);
196static void build_vtt (tree);
197static tree binfo_ctor_vtable (tree);
9771b263
DN
198static void build_vtt_inits (tree, tree, vec<constructor_elt, va_gc> **,
199 tree *);
94edc4ab 200static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
94edc4ab 201static tree dfs_fixup_binfo_vtbls (tree, void *);
94edc4ab
NN
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,
5d5a519f 205 tree, splay_tree, tree, int);
c5a35c3c 206static void record_subobject_offsets (tree, tree, splay_tree, bool);
94edc4ab
NN
207static int layout_conflict_p (tree, tree, splay_tree, int);
208static int splay_tree_compare_integer_csts (splay_tree_key k1,
5d5a519f 209 splay_tree_key k2);
94edc4ab
NN
210static void warn_about_ambiguous_bases (tree);
211static bool type_requires_array_cookie (tree);
956d9305 212static bool contains_empty_class_p (tree);
9368208b 213static bool base_derived_from (tree, tree);
7ba539c6 214static int empty_base_at_nonzero_offset_p (tree, tree, splay_tree);
ba9a991f 215static tree end_of_base (tree);
548502d3 216static tree get_vcall_index (tree, tree);
9965d119 217
51c184be 218/* Variables shared between class.c and call.c. */
8d08fdba
MS
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;
8d08fdba
MS
226int n_inner_fields_searched = 0;
227
338d90b8
NS
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. */
ca36f057
MM
237
238tree
94edc4ab 239build_base_path (enum tree_code code,
0cbd7506
MS
240 tree expr,
241 tree binfo,
a271590a
PC
242 int nonnull,
243 tsubst_flags_t complain)
1a588ad7 244{
338d90b8 245 tree v_binfo = NULL_TREE;
6bc34b14 246 tree d_binfo = NULL_TREE;
338d90b8
NS
247 tree probe;
248 tree offset;
249 tree target_type;
250 tree null_test = NULL;
251 tree ptr_target_type;
ca36f057 252 int fixed_type_p;
50e10fa8 253 int want_pointer = TYPE_PTR_P (TREE_TYPE (expr));
00bfffa4 254 bool has_empty = false;
d7981fd9 255 bool virtual_access;
1a588ad7 256
338d90b8
NS
257 if (expr == error_mark_node || binfo == error_mark_node || !binfo)
258 return error_mark_node;
6bc34b14
JM
259
260 for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
261 {
262 d_binfo = probe;
00bfffa4
JM
263 if (is_empty_class (BINFO_TYPE (probe)))
264 has_empty = true;
809e3e7f 265 if (!v_binfo && BINFO_VIRTUAL_P (probe))
6bc34b14
JM
266 v_binfo = probe;
267 }
338d90b8
NS
268
269 probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
270 if (want_pointer)
271 probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
00bfffa4 272
5313d330
JM
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),
22854930 283 ba_unique, NULL, complain);
5313d330
JM
284 gcc_assert (base == error_mark_node);
285 }
286 return error_mark_node;
287 }
288
539ed333
NS
289 gcc_assert ((code == MINUS_EXPR
290 && SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), probe))
5313d330 291 || code == PLUS_EXPR);
c8094d83 292
00bfffa4
JM
293 if (binfo == d_binfo)
294 /* Nothing to do. */
295 return expr;
296
338d90b8
NS
297 if (code == MINUS_EXPR && v_binfo)
298 {
a271590a 299 if (complain & tf_error)
128be7f9
PC
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 }
338d90b8
NS
325 return error_mark_node;
326 }
1a588ad7 327
f576dfc4
JM
328 if (!want_pointer)
329 /* This must happen before the call to save_expr. */
a271590a 330 expr = cp_build_addr_expr (expr, complain);
7fd7263d 331 else
416f380b 332 expr = mark_rvalue_use (expr);
f576dfc4 333
00bfffa4 334 offset = BINFO_OFFSET (binfo);
ca36f057 335 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
0e686aa6 336 target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (d_binfo);
2bbf86a4
JM
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);
00bfffa4 343
d7981fd9 344 /* Do we need to look in the vtable for the real offset? */
7a0b47e3
JM
345 virtual_access = (v_binfo && fixed_type_p <= 0);
346
347 /* Don't bother with the calculations inside sizeof; they'll ICE if the
a8e23778
JM
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
e0e1b357 353 || in_template_function ())
dc555429 354 {
2bbf86a4 355 expr = build_nop (ptr_target_type, expr);
dc555429 356 if (!want_pointer)
dd865ef6 357 expr = build_indirect_ref (EXPR_LOCATION (expr), expr, RO_NULL);
dc555429
JM
358 return expr;
359 }
d7981fd9 360
c65b0607
JM
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
d7981fd9 374 /* Do we need to check for a null pointer? */
0e686aa6
MM
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))
2bbf86a4 383 return build_nop (ptr_target_type, expr);
0e686aa6
MM
384 null_test = error_mark_node;
385 }
00bfffa4 386
d7981fd9
JM
387 /* Protect against multiple evaluation if necessary. */
388 if (TREE_SIDE_EFFECTS (expr) && (null_test || virtual_access))
ca36f057 389 expr = save_expr (expr);
f2606a97 390
d7981fd9 391 /* Now that we've saved expr, build the real null test. */
00bfffa4 392 if (null_test)
471a58a9 393 {
4b978f96 394 tree zero = cp_convert (TREE_TYPE (expr), nullptr_node, complain);
db3927fb 395 null_test = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
7866705a 396 expr, zero);
471a58a9 397 }
00bfffa4
JM
398
399 /* If this is a simple base reference, express it as a COMPONENT_REF. */
d7981fd9 400 if (code == PLUS_EXPR && !virtual_access
00bfffa4
JM
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 {
a271590a 405 expr = cp_build_indirect_ref (expr, RO_NULL, complain);
00bfffa4
JM
406 expr = build_simple_base_path (expr, binfo);
407 if (want_pointer)
442c8e31 408 expr = build_address (expr);
00bfffa4
JM
409 target_type = TREE_TYPE (expr);
410 goto out;
411 }
412
d7981fd9 413 if (virtual_access)
1a588ad7 414 {
338d90b8 415 /* Going via virtual base V_BINFO. We need the static offset
0cbd7506
MS
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. */
1f5a253a
NS
418 tree v_offset;
419
420 if (fixed_type_p < 0 && in_base_initializer)
421 {
2acb1af9
NS
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. */
6de9cd9a
DN
425 tree t;
426
2acb1af9 427 t = TREE_TYPE (TYPE_VFIELD (current_class_type));
6de9cd9a
DN
428 t = build_pointer_type (t);
429 v_offset = convert (t, current_vtt_parm);
a271590a 430 v_offset = cp_build_indirect_ref (v_offset, RO_NULL, complain);
1f5a253a
NS
431 }
432 else
dd865ef6 433 v_offset = build_vfield_ref (cp_build_indirect_ref (expr, RO_NULL,
a271590a 434 complain),
1f5a253a 435 TREE_TYPE (TREE_TYPE (expr)));
f1f82a37
PC
436
437 if (v_offset == error_mark_node)
438 return error_mark_node;
c8094d83 439
5d49b6a7 440 v_offset = fold_build_pointer_plus (v_offset, BINFO_VPTR_FIELD (v_binfo));
c8094d83 441 v_offset = build1 (NOP_EXPR,
338d90b8
NS
442 build_pointer_type (ptrdiff_type_node),
443 v_offset);
a271590a 444 v_offset = cp_build_indirect_ref (v_offset, RO_NULL, complain);
6de9cd9a 445 TREE_CONSTANT (v_offset) = 1;
f63ab951 446
7b6d72fc 447 offset = convert_to_integer (ptrdiff_type_node,
db3927fb 448 size_diffop_loc (input_location, offset,
7b6d72fc 449 BINFO_OFFSET (v_binfo)));
8d08fdba 450
338d90b8 451 if (!integer_zerop (offset))
f293ce4b 452 v_offset = build2 (code, ptrdiff_type_node, v_offset, offset);
f2606a97
JM
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. */
f293ce4b
RS
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,
aa8f5c20
AP
462 convert_to_integer (ptrdiff_type_node,
463 BINFO_OFFSET (binfo)));
338d90b8
NS
464 else
465 offset = v_offset;
8d08fdba 466 }
8d08fdba 467
338d90b8
NS
468 if (want_pointer)
469 target_type = ptr_target_type;
c8094d83 470
338d90b8 471 expr = build1 (NOP_EXPR, ptr_target_type, expr);
fed3cef0 472
338d90b8 473 if (!integer_zerop (offset))
5be014d5
AP
474 {
475 offset = fold_convert (sizetype, offset);
476 if (code == MINUS_EXPR)
db3927fb 477 offset = fold_build1_loc (input_location, NEGATE_EXPR, sizetype, offset);
5d49b6a7 478 expr = fold_build_pointer_plus (expr, offset);
5be014d5 479 }
8d08fdba 480 else
338d90b8 481 null_test = NULL;
c8094d83 482
338d90b8 483 if (!want_pointer)
a271590a 484 expr = cp_build_indirect_ref (expr, RO_NULL, complain);
8d08fdba 485
00bfffa4 486 out:
338d90b8 487 if (null_test)
db3927fb 488 expr = fold_build3_loc (input_location, COND_EXPR, target_type, null_test, expr,
e8160c9a 489 build_zero_cst (target_type));
f2606a97 490
338d90b8 491 return expr;
8d08fdba
MS
492}
493
00bfffa4
JM
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);
fc6633e0 502 tree d_binfo = BINFO_INHERITANCE_CHAIN (binfo);
00bfffa4
JM
503 tree field;
504
00bfffa4
JM
505 if (d_binfo == NULL_TREE)
506 {
12a669d1 507 tree temp;
c8094d83 508
8dc2b103 509 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (expr)) == type);
c8094d83 510
12a669d1 511 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x'
0cbd7506 512 into `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only
3b426391
KH
513 an lvalue in the front end; only _DECLs and _REFs are lvalues
514 in the back end. */
12a669d1
NS
515 temp = unary_complex_lvalue (ADDR_EXPR, expr);
516 if (temp)
dd865ef6 517 expr = cp_build_indirect_ref (temp, RO_NULL, tf_warning_or_error);
12a669d1 518
00bfffa4
JM
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));
910ad8de 526 field; field = DECL_CHAIN (field))
00bfffa4
JM
527 /* Is this the base field created by build_base_field? */
528 if (TREE_CODE (field) == FIELD_DECL
642124c6 529 && DECL_FIELD_IS_BASE (field)
a8c1d899
JM
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))))
12a669d1
NS
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);
c8094d83 548
12a669d1
NS
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;
c8094d83 556
12a669d1
NS
557 return expr;
558 }
00bfffa4
JM
559
560 /* Didn't find the base field?!? */
8dc2b103 561 gcc_unreachable ();
00bfffa4
JM
562}
563
08e17d9d
MM
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. */
50ad9642
MM
570
571tree
798ec807
JM
572convert_to_base (tree object, tree type, bool check_access, bool nonnull,
573 tsubst_flags_t complain)
50ad9642
MM
574{
575 tree binfo;
08e17d9d 576 tree object_type;
50ad9642 577
08e17d9d
MM
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
22854930
PC
586 binfo = lookup_base (object_type, type, check_access ? ba_check : ba_unique,
587 NULL, complain);
5bfc90de 588 if (!binfo || binfo == error_mark_node)
50ad9642
MM
589 return error_mark_node;
590
a271590a 591 return build_base_path (PLUS_EXPR, object, binfo, nonnull, complain);
50ad9642
MM
592}
593
539ed333
NS
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
22ed7e5f
MM
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);
539ed333 605 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (base), expr_type))
22ed7e5f 606 {
a8c1d899
JM
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
ffd34392
JH
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);
93c0e0bb 616 expr = cp_build_addr_expr (expr, tf_warning_or_error);
22ed7e5f 617 if (!integer_zerop (BINFO_OFFSET (base)))
5d49b6a7
RG
618 expr = fold_build_pointer_plus_loc (input_location,
619 expr, BINFO_OFFSET (base));
ffd34392 620 expr = fold_convert (build_pointer_type (BINFO_TYPE (base)), expr);
db3927fb 621 expr = build_fold_indirect_ref_loc (input_location, expr);
22ed7e5f
MM
622 }
623
624 return expr;
625}
626
f8361147 627\f
981c353e
RH
628tree
629build_vfield_ref (tree datum, tree type)
630{
631 tree vfield, vcontext;
632
f1f82a37
PC
633 if (datum == error_mark_node
634 /* Can happen in case of duplicate base types (c++/59082). */
635 || !TYPE_VFIELD (type))
981c353e
RH
636 return error_mark_node;
637
981c353e
RH
638 /* First, convert to the requested type. */
639 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
08e17d9d 640 datum = convert_to_base (datum, type, /*check_access=*/false,
798ec807 641 /*nonnull=*/true, tf_warning_or_error);
981c353e
RH
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
5995ebfb 646 in the inheritance hierarchy of TYPE, and thus direct conversion
981c353e
RH
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
8d08fdba 660/* Given an object INSTANCE, return an expression which yields the
67231816
RH
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. */
e92cc029 664
4a8d0c9c 665static tree
94edc4ab 666build_vtbl_ref_1 (tree instance, tree idx)
8d08fdba 667{
f63ab951
JM
668 tree aref;
669 tree vtbl = NULL_TREE;
8d08fdba 670
f63ab951
JM
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
ee76b931 677 tree basetype = non_reference (TREE_TYPE (instance));
8d08fdba 678
f63ab951 679 if (fixed_type && !cdtorp)
8d08fdba 680 {
f63ab951 681 tree binfo = lookup_base (fixed_type, basetype,
22854930
PC
682 ba_unique, NULL, tf_none);
683 if (binfo && binfo != error_mark_node)
6de9cd9a 684 vtbl = unshare_expr (BINFO_VTABLE (binfo));
f63ab951 685 }
8d08fdba 686
f63ab951 687 if (!vtbl)
dbbf88d1 688 vtbl = build_vfield_ref (instance, basetype);
c8094d83 689
3a11c665 690 aref = build_array_ref (input_location, vtbl, idx);
6de9cd9a 691 TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
8d08fdba 692
c4372ef4 693 return aref;
8d08fdba
MS
694}
695
4a8d0c9c 696tree
94edc4ab 697build_vtbl_ref (tree instance, tree idx)
4a8d0c9c
RH
698{
699 tree aref = build_vtbl_ref_1 (instance, idx);
700
4a8d0c9c
RH
701 return aref;
702}
703
0f59171d
RH
704/* Given a stable object pointer INSTANCE_PTR, return an expression which
705 yields a function pointer corresponding to vtable element INDEX. */
67231816
RH
706
707tree
0f59171d 708build_vfn_ref (tree instance_ptr, tree idx)
67231816 709{
0f59171d
RH
710 tree aref;
711
dd865ef6 712 aref = build_vtbl_ref_1 (cp_build_indirect_ref (instance_ptr, RO_NULL,
5ade1ed2
DG
713 tf_warning_or_error),
714 idx);
67231816
RH
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)
4a8d0c9c 719 aref = build1 (NOP_EXPR, TREE_TYPE (aref),
93c0e0bb 720 cp_build_addr_expr (aref, tf_warning_or_error));
67231816 721
0f59171d 722 /* Remember this as a method reference, for later devirtualization. */
f293ce4b 723 aref = build3 (OBJ_TYPE_REF, TREE_TYPE (aref), aref, instance_ptr, idx);
0f59171d 724
67231816
RH
725 return aref;
726}
727
669ec2b4
JM
728/* Return the name of the virtual function table (as an IDENTIFIER_NODE)
729 for the given TYPE. */
730
731static tree
94edc4ab 732get_vtable_name (tree type)
669ec2b4 733{
1f84ec23 734 return mangle_vtbl_for_type (type);
669ec2b4
JM
735}
736
4684cd27
MM
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
12308bc6 746set_linkage_according_to_type (tree /*type*/, tree decl)
4684cd27 747{
012d5d25
JM
748 TREE_PUBLIC (decl) = 1;
749 determine_visibility (decl);
4684cd27
MM
750}
751
459c43ad
MM
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. */
b9f39201
MM
755
756static tree
94edc4ab 757build_vtable (tree class_type, tree name, tree vtable_type)
b9f39201
MM
758{
759 tree decl;
760
761 decl = build_lang_decl (VAR_DECL, name, vtable_type);
90ecce3e
JM
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);
b9f39201
MM
765 DECL_CONTEXT (decl) = class_type;
766 DECL_ARTIFICIAL (decl) = 1;
767 TREE_STATIC (decl) = 1;
b9f39201 768 TREE_READONLY (decl) = 1;
b9f39201 769 DECL_VIRTUAL_P (decl) = 1;
a6f5e048 770 DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
d35543c0 771 DECL_VTABLE_OR_VTT_P (decl) = 1;
78d55cc8
JM
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));
4684cd27
MM
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
78e0d62b
RH
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:
c8094d83 786
78e0d62b
RH
787 #pragma interface
788 struct S { virtual void member (); };
c8094d83 789
78e0d62b
RH
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;
78d55cc8 802
b9f39201
MM
803 return decl;
804}
805
1aa4ccd4
NS
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
838dfd8a 808 nonzero, then complete the definition of it -- that will render it
1aa4ccd4
NS
809 impossible to actually build the vtable, but is useful to get at those
810 which are known to exist in the runtime. */
811
c8094d83 812tree
94edc4ab 813get_vtable_decl (tree type, int complete)
1aa4ccd4 814{
548502d3
MM
815 tree decl;
816
817 if (CLASSTYPE_VTABLES (type))
818 return CLASSTYPE_VTABLES (type);
c8094d83 819
d1a74aa7 820 decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
548502d3
MM
821 CLASSTYPE_VTABLES (type) = decl;
822
1aa4ccd4 823 if (complete)
217f4eb9
MM
824 {
825 DECL_EXTERNAL (decl) = 1;
3600f678 826 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
217f4eb9 827 }
1aa4ccd4 828
1aa4ccd4
NS
829 return decl;
830}
831
28531dd0
MM
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
838dfd8a 835 list. Returns a nonzero value if a new vtable is actually
28531dd0 836 created. */
e92cc029 837
28531dd0 838static int
94edc4ab 839build_primary_vtable (tree binfo, tree type)
8d08fdba 840{
31f8e4f3
MM
841 tree decl;
842 tree virtuals;
8d08fdba 843
1aa4ccd4 844 decl = get_vtable_decl (type, /*complete=*/0);
c8094d83 845
8d08fdba
MS
846 if (binfo)
847 {
dbbf88d1 848 if (BINFO_NEW_VTABLE_MARKED (binfo))
0533d788
MM
849 /* We have already created a vtable for this base, so there's
850 no need to do it again. */
28531dd0 851 return 0;
c8094d83 852
d1f05f93 853 virtuals = copy_list (BINFO_VIRTUALS (binfo));
c35cce41
MM
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));
8d08fdba
MS
857 }
858 else
859 {
50bc768d 860 gcc_assert (TREE_TYPE (decl) == vtbl_type_node);
8d08fdba 861 virtuals = NULL_TREE;
8d08fdba
MS
862 }
863
7aa6d18a
SB
864 if (GATHER_STATISTICS)
865 {
866 n_vtables += 1;
867 n_vtable_elems += list_length (virtuals);
868 }
8d08fdba 869
8d08fdba
MS
870 /* Initialize the association list for this type, based
871 on our first approximation. */
604a3205
NS
872 BINFO_VTABLE (TYPE_BINFO (type)) = decl;
873 BINFO_VIRTUALS (TYPE_BINFO (type)) = virtuals;
dbbf88d1 874 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type));
28531dd0 875 return 1;
8d08fdba
MS
876}
877
3461fba7 878/* Give BINFO a new virtual function table which is initialized
8d08fdba
MS
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
3461fba7 883 FOR_TYPE is the most derived type which caused this table to
8d08fdba
MS
884 be needed.
885
838dfd8a 886 Returns nonzero if we haven't met BINFO before.
2636fde4
JM
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. */
e92cc029 891
28531dd0 892static int
dbbf88d1 893build_secondary_vtable (tree binfo)
8d08fdba 894{
dbbf88d1 895 if (BINFO_NEW_VTABLE_MARKED (binfo))
0533d788
MM
896 /* We already created a vtable for this base. There's no need to
897 do it again. */
28531dd0 898 return 0;
0533d788 899
8d7a5379
MM
900 /* Remember that we've created a vtable for this BINFO, so that we
901 don't try to do so again. */
dbbf88d1 902 SET_BINFO_NEW_VTABLE_MARKED (binfo);
c8094d83 903
8d7a5379 904 /* Make fresh virtual list, so we can smash it later. */
d1f05f93 905 BINFO_VIRTUALS (binfo) = copy_list (BINFO_VIRTUALS (binfo));
8d7a5379 906
3461fba7
NS
907 /* Secondary vtables are laid out as part of the same structure as
908 the primary vtable. */
909 BINFO_VTABLE (binfo) = NULL_TREE;
28531dd0 910 return 1;
8d08fdba
MS
911}
912
28531dd0 913/* Create a new vtable for BINFO which is the hierarchy dominated by
838dfd8a 914 T. Return nonzero if we actually created a new vtable. */
28531dd0
MM
915
916static int
94edc4ab 917make_new_vtable (tree t, tree binfo)
28531dd0
MM
918{
919 if (binfo == TYPE_BINFO (t))
920 /* In this case, it is *type*'s vtable we are modifying. We start
d0cd8b44 921 with the approximation that its vtable is that of the
28531dd0 922 immediate base class. */
981c353e 923 return build_primary_vtable (binfo, t);
28531dd0
MM
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. */
dbbf88d1 929 return build_secondary_vtable (binfo);
28531dd0
MM
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
4e7512c9
MM
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. */
8d08fdba
MS
937
938static void
94edc4ab 939modify_vtable_entry (tree t,
0cbd7506
MS
940 tree binfo,
941 tree fndecl,
942 tree delta,
943 tree *virtuals)
8d08fdba 944{
28531dd0 945 tree v;
c0bbf652 946
28531dd0 947 v = *virtuals;
c0bbf652 948
5e19c053 949 if (fndecl != BV_FN (v)
4e7512c9 950 || !tree_int_cst_equal (delta, BV_DELTA (v)))
c0bbf652 951 {
28531dd0
MM
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);
5e19c053 959 while (BV_FN (*virtuals) != BV_FN (v))
28531dd0
MM
960 *virtuals = TREE_CHAIN (*virtuals);
961 v = *virtuals;
962 }
8d08fdba 963
5e19c053 964 BV_DELTA (v) = delta;
aabb4cd6 965 BV_VCALL_INDEX (v) = NULL_TREE;
5e19c053 966 BV_FN (v) = fndecl;
8d08fdba 967 }
8d08fdba
MS
968}
969
8d08fdba 970\f
b2a9b208 971/* Add method METHOD to class TYPE. If USING_DECL is non-null, it is
b77fe7b4
NS
972 the USING_DECL naming METHOD. Returns true if the method could be
973 added to the method vec. */
e92cc029 974
b77fe7b4 975bool
b2a9b208 976add_method (tree type, tree method, tree using_decl)
8d08fdba 977{
9ba5ff0f 978 unsigned slot;
90ea9897 979 tree overload;
b54a07e8
NS
980 bool template_conv_p = false;
981 bool conv_p;
9771b263 982 vec<tree, va_gc> *method_vec;
aaaa46d2 983 bool complete_p;
9ba5ff0f
NS
984 bool insert_p = false;
985 tree current_fns;
fc40d49c 986 tree fns;
ac2b3222
AP
987
988 if (method == error_mark_node)
b77fe7b4 989 return false;
aaaa46d2
MM
990
991 complete_p = COMPLETE_TYPE_P (type);
b54a07e8
NS
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));
452a394b 996
452a394b 997 method_vec = CLASSTYPE_METHOD_VEC (type);
aaaa46d2
MM
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. */
9771b263 1004 vec_alloc (method_vec, 8);
aaaa46d2 1005 /* Create slots for constructors and destructors. */
9771b263
DN
1006 method_vec->quick_push (NULL_TREE);
1007 method_vec->quick_push (NULL_TREE);
aaaa46d2
MM
1008 CLASSTYPE_METHOD_VEC (type) = method_vec;
1009 }
1010
0fcedd9c 1011 /* Maintain TYPE_HAS_USER_CONSTRUCTOR, etc. */
7137605e
MM
1012 grok_special_member_properties (method);
1013
452a394b
MM
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))
4b0d3cbe
MM
1018 {
1019 slot = CLASSTYPE_DESTRUCTOR_SLOT;
c8094d83 1020
f5c28a15 1021 if (TYPE_FOR_JAVA (type))
9f4faeae
MM
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 }
4b0d3cbe 1030 }
452a394b 1031 else
61a127b3 1032 {
aaaa46d2
MM
1033 tree m;
1034
9ba5ff0f 1035 insert_p = true;
452a394b 1036 /* See if we already have an entry with this name. */
c8094d83 1037 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
9771b263 1038 vec_safe_iterate (method_vec, slot, &m);
aaaa46d2 1039 ++slot)
5dd236e2 1040 {
5dd236e2 1041 m = OVL_CURRENT (m);
5dd236e2
NS
1042 if (template_conv_p)
1043 {
aaaa46d2
MM
1044 if (TREE_CODE (m) == TEMPLATE_DECL
1045 && DECL_TEMPLATE_CONV_FN_P (m))
1046 insert_p = false;
5dd236e2
NS
1047 break;
1048 }
aaaa46d2 1049 if (conv_p && !DECL_CONV_FN_P (m))
5dd236e2 1050 break;
aaaa46d2 1051 if (DECL_NAME (m) == DECL_NAME (method))
452a394b 1052 {
aaaa46d2
MM
1053 insert_p = false;
1054 break;
8d08fdba 1055 }
aaaa46d2
MM
1056 if (complete_p
1057 && !DECL_CONV_FN_P (m)
1058 && DECL_NAME (m) > DECL_NAME (method))
1059 break;
61a127b3 1060 }
452a394b 1061 }
9771b263 1062 current_fns = insert_p ? NULL_TREE : (*method_vec)[slot];
c8094d83 1063
fc40d49c
LM
1064 /* Check to see if we've already got this method. */
1065 for (fns = current_fns; fns; fns = OVL_NEXT (fns))
452a394b 1066 {
fc40d49c
LM
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
2eed8e37
BK
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
fc40d49c
LM
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)
2eed8e37
BK
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;
fc40d49c
LM
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))))
452a394b 1128 {
3649b9b7
ST
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)
3649b9b7
ST
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 }
85b5d65a
JM
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 }
fc40d49c 1170 if (using_decl)
452a394b 1171 {
fc40d49c
LM
1172 if (DECL_CONTEXT (fn) == type)
1173 /* Defer to the local function. */
1174 return false;
452a394b 1175 }
fc40d49c
LM
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;
03017874 1187 }
452a394b 1188 }
03017874 1189
3db45ab5 1190 /* A class should never have more than one destructor. */
357d956e
MM
1191 if (current_fns && DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
1192 return false;
1193
c8094d83 1194 /* Add the new binding. */
57910f3a
JM
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);
c8094d83 1202
357d956e
MM
1203 if (conv_p)
1204 TYPE_HAS_CONVERSION (type) = 1;
1205 else if (slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
90ea9897
MM
1206 push_class_level_binding (DECL_NAME (method), overload);
1207
9ba5ff0f
NS
1208 if (insert_p)
1209 {
efb7e1e0
ILT
1210 bool reallocated;
1211
9ba5ff0f
NS
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. */
efb7e1e0 1214 if (complete_p)
9771b263 1215 reallocated = vec_safe_reserve_exact (method_vec, 1);
efb7e1e0 1216 else
9771b263 1217 reallocated = vec_safe_reserve (method_vec, 1);
efb7e1e0 1218 if (reallocated)
9ba5ff0f 1219 CLASSTYPE_METHOD_VEC (type) = method_vec;
9771b263
DN
1220 if (slot == method_vec->length ())
1221 method_vec->quick_push (overload);
9ba5ff0f 1222 else
9771b263 1223 method_vec->quick_insert (slot, overload);
9ba5ff0f
NS
1224 }
1225 else
03fd3f84 1226 /* Replace the current slot. */
9771b263 1227 (*method_vec)[slot] = overload;
b77fe7b4 1228 return true;
8d08fdba
MS
1229}
1230
1231/* Subroutines of finish_struct. */
1232
aa52c1ff
JM
1233/* Change the access of FDECL to ACCESS in T. Return 1 if change was
1234 legit, otherwise return 0. */
e92cc029 1235
8d08fdba 1236static int
94edc4ab 1237alter_access (tree t, tree fdecl, tree access)
8d08fdba 1238{
721c3b42
MM
1239 tree elem;
1240
1241 if (!DECL_LANG_SPECIFIC (fdecl))
1242 retrofit_lang_decl (fdecl);
1243
50bc768d 1244 gcc_assert (!DECL_DISCRIMINATOR_P (fdecl));
8e4ce833 1245
721c3b42 1246 elem = purpose_member (t, DECL_ACCESS (fdecl));
38afd588 1247 if (elem)
8d08fdba 1248 {
38afd588 1249 if (TREE_VALUE (elem) != access)
8d08fdba 1250 {
38afd588 1251 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
dee15844
JM
1252 error ("conflicting access specifications for method"
1253 " %q+D, ignored", TREE_TYPE (fdecl));
38afd588 1254 else
1f070f2b 1255 error ("conflicting access specifications for field %qE, ignored",
4460cef2 1256 DECL_NAME (fdecl));
8d08fdba
MS
1257 }
1258 else
430bb96b
JL
1259 {
1260 /* They're changing the access to the same thing they changed
1261 it to before. That's OK. */
1262 ;
1263 }
db5ae43f 1264 }
38afd588 1265 else
8d08fdba 1266 {
0e69fdf0
PC
1267 perform_or_defer_access_check (TYPE_BINFO (t), fdecl, fdecl,
1268 tf_warning_or_error);
be99da77 1269 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
8d08fdba
MS
1270 return 1;
1271 }
1272 return 0;
1273}
1274
58010b57 1275/* Process the USING_DECL, which is a member of T. */
79ad62b2 1276
e9659ab0 1277static void
94edc4ab 1278handle_using_decl (tree using_decl, tree t)
79ad62b2 1279{
98ed9dae 1280 tree decl = USING_DECL_DECLS (using_decl);
79ad62b2
MM
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;
79ad62b2 1286 tree flist = NULL_TREE;
aa52c1ff 1287 tree old_value;
79ad62b2 1288
98ed9dae 1289 gcc_assert (!processing_template_decl && decl);
c8094d83 1290
db422ace
PC
1291 old_value = lookup_member (t, name, /*protect=*/0, /*want_type=*/false,
1292 tf_warning_or_error);
aa52c1ff 1293 if (old_value)
79ad62b2 1294 {
aa52c1ff
JM
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;
79ad62b2 1302 }
c8094d83 1303
6e976965 1304 cp_emit_debug_info_for_using (decl, USING_DECL_SCOPE (using_decl));
c8094d83 1305
98ed9dae
NS
1306 if (is_overloaded_fn (decl))
1307 flist = decl;
aa52c1ff
JM
1308
1309 if (! old_value)
1310 ;
1311 else if (is_overloaded_fn (old_value))
79ad62b2 1312 {
aa52c1ff
JM
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
79ad62b2 1317 {
dee15844
JM
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));
aa52c1ff 1321 return;
79ad62b2
MM
1322 }
1323 }
186c0fbe 1324 else if (!DECL_ARTIFICIAL (old_value))
aa52c1ff 1325 {
dee15844
JM
1326 error ("%q+D invalid in %q#T", using_decl, t);
1327 error (" because of local member %q+#D with same name", old_value);
aa52c1ff
JM
1328 return;
1329 }
c8094d83 1330
f4f206f4 1331 /* Make type T see field decl FDECL with access ACCESS. */
aa52c1ff
JM
1332 if (flist)
1333 for (; flist; flist = OVL_NEXT (flist))
1334 {
b2a9b208 1335 add_method (t, OVL_CURRENT (flist), using_decl);
aa52c1ff
JM
1336 alter_access (t, OVL_CURRENT (flist), access);
1337 }
1338 else
98ed9dae 1339 alter_access (t, decl, access);
79ad62b2 1340}
8d08fdba 1341\f
7dbb85a7
JM
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;
f585f02f
JM
1350 // error_mark_node to get diagnostics; otherwise collect missing tags here
1351 tree tags;
7dbb85a7
JM
1352};
1353
1354static tree
f585f02f 1355find_abi_tags_r (tree *tp, int *walk_subtrees, void *data)
7dbb85a7 1356{
73243d63 1357 if (!OVERLOAD_TYPE_P (*tp))
7dbb85a7
JM
1358 return NULL_TREE;
1359
f585f02f
JM
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
7dbb85a7
JM
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 {
f585f02f
JM
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))
7dbb85a7 1388 {
3fe99aa5
FC
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);
7dbb85a7
JM
1393 }
1394 else
1395 {
3fe99aa5
FC
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 }
7dbb85a7
JM
1404 }
1405 }
1406 }
1407 }
1408 return NULL_TREE;
1409}
1410
3aaaa103
JM
1411/* Set IDENTIFIER_MARKED on all the ABI tags on T and its (transitively
1412 complete) template arguments. */
7dbb85a7
JM
1413
1414static void
3aaaa103 1415mark_type_abi_tags (tree t, bool val)
7dbb85a7
JM
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));
3aaaa103
JM
1425 IDENTIFIER_MARKED (id) = val;
1426 }
1427 }
3aaaa103
JM
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);
7dbb85a7
JM
1437
1438 tree subtype = TYPE_P (subob) ? subob : TREE_TYPE (subob);
f585f02f 1439 struct abi_tag_data data = { t, subob, error_mark_node };
7dbb85a7
JM
1440
1441 cp_walk_tree_without_duplicates (&subtype, find_abi_tags_r, &data);
1442
3aaaa103 1443 mark_type_abi_tags (t, false);
7dbb85a7
JM
1444}
1445
f585f02f
JM
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
880a467b
NS
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
e5e459bf
AO
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. */
8d08fdba 1513
607cf131 1514static void
94edc4ab 1515check_bases (tree t,
0cbd7506 1516 int* cant_have_const_ctor_p,
10746f37 1517 int* no_const_asn_ref_p)
8d08fdba 1518{
607cf131 1519 int i;
0a35513e
AH
1520 bool seen_non_virtual_nearly_empty_base_p = 0;
1521 int seen_tm_mask = 0;
fa743e8c
NS
1522 tree base_binfo;
1523 tree binfo;
c32097d8 1524 tree field = NULL_TREE;
8d08fdba 1525
c32097d8 1526 if (!CLASSTYPE_NON_STD_LAYOUT (t))
910ad8de 1527 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
c32097d8
JM
1528 if (TREE_CODE (field) == FIELD_DECL)
1529 break;
1530
fa743e8c
NS
1531 for (binfo = TYPE_BINFO (t), i = 0;
1532 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
8d08fdba 1533 {
fa743e8c 1534 tree basetype = TREE_TYPE (base_binfo);
9a71c18b 1535
50bc768d 1536 gcc_assert (COMPLETE_TYPE_P (basetype));
c8094d83 1537
486d481b
VV
1538 if (CLASSTYPE_FINAL (basetype))
1539 error ("cannot derive from %<final%> base %qT in derived type %qT",
1540 basetype, t);
1541
3b49d762
GDR
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
607cf131
MM
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. */
d758e847
JM
1550 if (TYPE_HAS_COPY_CTOR (basetype)
1551 && ! TYPE_HAS_CONST_COPY_CTOR (basetype))
607cf131 1552 *cant_have_const_ctor_p = 1;
066ec0a4
JM
1553 if (TYPE_HAS_COPY_ASSIGN (basetype)
1554 && !TYPE_HAS_CONST_COPY_ASSIGN (basetype))
607cf131 1555 *no_const_asn_ref_p = 1;
8d08fdba 1556
809e3e7f 1557 if (BINFO_VIRTUAL_P (base_binfo))
00a17e31 1558 /* A virtual base does not effect nearly emptiness. */
0fb3018c 1559 ;
f9c528ea 1560 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
0fb3018c
NS
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
00a17e31 1567 /* Remember we've seen one. */
0fb3018c
NS
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;
f9c528ea 1574
607cf131
MM
1575 /* A lot of properties from the bases also apply to the derived
1576 class. */
8d08fdba 1577 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
c8094d83 1578 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
834c6dff 1579 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
066ec0a4 1580 TYPE_HAS_COMPLEX_COPY_ASSIGN (t)
d758e847
JM
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));
ac177431
JM
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);
4c6b7393 1588 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
c8094d83 1589 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t)
5ec1192e 1590 |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
ac177431
JM
1591 TYPE_HAS_COMPLEX_DFLT (t) |= (!TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
1592 || TYPE_HAS_COMPLEX_DFLT (basetype));
0e02d8e3
PC
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));
c32097d8
JM
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;
910ad8de 1619 basefield = DECL_CHAIN (basefield))
c32097d8
JM
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 }
0a35513e
AH
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 }
7dbb85a7
JM
1638
1639 check_abi_tags (t, basetype);
0a35513e
AH
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));
607cf131
MM
1648 }
1649}
1650
fc6633e0
NS
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
77880ae4 1654 other base in the hierarchy. Determines CLASSTYPE_PRIMARY_BASE for
fc6633e0 1655 T. */
c35cce41
MM
1656
1657static void
fc6633e0 1658determine_primary_bases (tree t)
c35cce41 1659{
fc6633e0
NS
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))
c35cce41 1668 {
fc6633e0 1669 tree primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (base_binfo));
c35cce41 1670
fc6633e0
NS
1671 /* See if we're the non-virtual primary of our inheritance
1672 chain. */
1673 if (!BINFO_VIRTUAL_P (base_binfo))
dbbf88d1 1674 {
fc6633e0
NS
1675 tree parent = BINFO_INHERITANCE_CHAIN (base_binfo);
1676 tree parent_primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (parent));
c8094d83 1677
fc6633e0 1678 if (parent_primary
539ed333
NS
1679 && SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo),
1680 BINFO_TYPE (parent_primary)))
fc6633e0
NS
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
dbbf88d1 1694 {
fc6633e0 1695 tree delta;
c8094d83 1696
fc6633e0
NS
1697 BINFO_PRIMARY_P (this_primary) = 1;
1698 BINFO_INHERITANCE_CHAIN (this_primary) = base_binfo;
c8094d83 1699
fc6633e0 1700 /* A virtual binfo might have been copied from within
0cbd7506
MS
1701 another hierarchy. As we're about to use it as a
1702 primary base, make sure the offsets match. */
db3927fb
AH
1703 delta = size_diffop_loc (input_location,
1704 convert (ssizetype,
fc6633e0
NS
1705 BINFO_OFFSET (base_binfo)),
1706 convert (ssizetype,
1707 BINFO_OFFSET (this_primary)));
c8094d83 1708
fc6633e0 1709 propagate_binfo_offsets (this_primary, delta);
dbbf88d1
NS
1710 }
1711 }
c35cce41 1712 }
8026246f 1713
fc6633e0 1714 /* First look for a dynamic direct non-virtual base. */
fa743e8c 1715 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, base_binfo); i++)
607cf131 1716 {
607cf131 1717 tree basetype = BINFO_TYPE (base_binfo);
aff08c18 1718
fc6633e0 1719 if (TYPE_CONTAINS_VPTR_P (basetype) && !BINFO_VIRTUAL_P (base_binfo))
8d08fdba 1720 {
fc6633e0
NS
1721 primary = base_binfo;
1722 goto found;
911a71a7
MM
1723 }
1724 }
8026246f 1725
3461fba7 1726 /* A "nearly-empty" virtual base class can be the primary base
fc6633e0
NS
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
77880ae4 1729 base of something in the hierarchy. If there is no such base,
fc6633e0
NS
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 }
c8094d83 1747
fc6633e0
NS
1748 found:
1749 /* If we've got a primary base, use it. */
1750 if (primary)
7cafdb8b 1751 {
fc6633e0 1752 tree basetype = BINFO_TYPE (primary);
c8094d83 1753
fc6633e0
NS
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))
7cafdb8b 1760 {
fc6633e0 1761 tree delta;
7cafdb8b 1762
fc6633e0
NS
1763 BINFO_INHERITANCE_CHAIN (primary) = type_binfo;
1764 /* A virtual binfo might have been copied from within
0cbd7506
MS
1765 another hierarchy. As we're about to use it as a primary
1766 base, make sure the offsets match. */
db3927fb 1767 delta = size_diffop_loc (input_location, ssize_int (0),
fc6633e0 1768 convert (ssizetype, BINFO_OFFSET (primary)));
c8094d83 1769
fc6633e0 1770 propagate_binfo_offsets (primary, delta);
7cafdb8b 1771 }
c8094d83 1772
fc6633e0 1773 primary = TYPE_BINFO (basetype);
c8094d83 1774
fc6633e0
NS
1775 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1776 BINFO_VTABLE (type_binfo) = BINFO_VTABLE (primary);
1777 BINFO_VIRTUALS (type_binfo) = BINFO_VIRTUALS (primary);
7cafdb8b 1778 }
8d08fdba 1779}
e92cc029 1780
d0940d56
DS
1781/* Update the variant types of T. */
1782
1783void
1784fixup_type_variants (tree t)
8d08fdba 1785{
090ad434 1786 tree variants;
c8094d83 1787
d0940d56
DS
1788 if (!t)
1789 return;
1790
090ad434
NS
1791 for (variants = TYPE_NEXT_VARIANT (t);
1792 variants;
1793 variants = TYPE_NEXT_VARIANT (variants))
8d08fdba
MS
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. */
0fcedd9c 1797 TYPE_HAS_USER_CONSTRUCTOR (variants) = TYPE_HAS_USER_CONSTRUCTOR (t);
8d08fdba 1798 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
c8094d83 1799 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
834c6dff 1800 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
8d08fdba 1801
4c6b7393 1802 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
c8094d83 1803
cad7e87b
NS
1804 TYPE_BINFO (variants) = TYPE_BINFO (t);
1805
8d08fdba 1806 /* Copy whatever these are holding today. */
eb34af89
RK
1807 TYPE_VFIELD (variants) = TYPE_VFIELD (t);
1808 TYPE_METHODS (variants) = TYPE_METHODS (t);
5566b478 1809 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
8943989d
JM
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;
5818c8e4 1821
8943989d
JM
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. */
5818c8e4 1831 TYPE_ATTRIBUTES (variants) = TYPE_ATTRIBUTES (t);
8943989d 1832 TYPE_ALIGN (variants) = TYPE_ALIGN (t);
8d08fdba 1833 }
d0940d56 1834}
d0940d56
DS
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);
8d08fdba 1844
fa743e8c 1845 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t))
16ae29f1
NS
1846 /* For a class w/o baseclasses, 'finish_struct' has set
1847 CLASSTYPE_PURE_VIRTUALS correctly (by definition).
132c7dd3
NS
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);
c8094d83 1855
132c7dd3
NS
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. */
d758e847
JM
1860 if (type_has_nontrivial_copy_init (t)
1861 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
8d08fdba 1862 {
e8abc66f 1863 tree variants;
d2e5ee5c 1864 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
e8abc66f 1865 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
8d08fdba 1866 {
179d2f74 1867 SET_TYPE_MODE (variants, BLKmode);
8d08fdba 1868 TREE_ADDRESSABLE (variants) = 1;
8d08fdba
MS
1869 }
1870 }
1871}
1872
b0e0b31f 1873/* Issue warnings about T having private constructors, but no friends,
c8094d83 1874 and so forth.
aed7b2a6 1875
b0e0b31f
MM
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
94edc4ab 1881maybe_warn_about_overly_private_class (tree t)
aed7b2a6 1882{
056a3b12
MM
1883 int has_member_fn = 0;
1884 int has_nonprivate_method = 0;
1885 tree fn;
1886
1887 if (!warn_ctor_dtor_privacy
b0e0b31f
MM
1888 /* If the class has friends, those entities might create and
1889 access instances, so we should not warn. */
056a3b12
MM
1890 || (CLASSTYPE_FRIEND_CLASSES (t)
1891 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
b0e0b31f
MM
1892 /* We will have warned when the template was declared; there's
1893 no need to warn on every instantiation. */
056a3b12 1894 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
c8094d83 1895 /* There's no reason to even consider warning about this
056a3b12
MM
1896 class. */
1897 return;
c8094d83 1898
056a3b12
MM
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.) */
910ad8de 1915 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
056a3b12
MM
1916 /* We're not interested in compiler-generated methods; they don't
1917 provide any way to call private members. */
c8094d83 1918 if (!DECL_ARTIFICIAL (fn))
056a3b12
MM
1919 {
1920 if (!TREE_PRIVATE (fn))
b0e0b31f 1921 {
c8094d83 1922 if (DECL_STATIC_FUNCTION_P (fn))
056a3b12
MM
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;
c8094d83 1928
056a3b12 1929 has_nonprivate_method = 1;
f576dfc4 1930 /* Keep searching for a static member function. */
056a3b12 1931 }
ce0a5952 1932 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
056a3b12 1933 has_member_fn = 1;
c8094d83 1934 }
aed7b2a6 1935
c8094d83 1936 if (!has_nonprivate_method && has_member_fn)
056a3b12 1937 {
ce0a5952
MM
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.) */
fa743e8c 1944 unsigned i;
dbbf88d1 1945 tree binfo = TYPE_BINFO (t);
c8094d83 1946
fa743e8c 1947 for (i = 0; i != BINFO_N_BASE_BINFOS (binfo); i++)
604a3205 1948 if (BINFO_BASE_ACCESS (binfo, i) != access_private_node)
056a3b12
MM
1949 {
1950 has_nonprivate_method = 1;
1951 break;
1952 }
c8094d83 1953 if (!has_nonprivate_method)
b0e0b31f 1954 {
74fa0285 1955 warning (OPT_Wctor_dtor_privacy,
3db45ab5 1956 "all member functions in class %qT are private", t);
056a3b12 1957 return;
b0e0b31f 1958 }
056a3b12 1959 }
aed7b2a6 1960
056a3b12
MM
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. */
9f4faeae
MM
1964 fn = CLASSTYPE_DESTRUCTORS (t);
1965 if (fn && TREE_PRIVATE (fn))
056a3b12 1966 {
74fa0285 1967 warning (OPT_Wctor_dtor_privacy,
3db45ab5 1968 "%q#T only defines a private destructor and has no friends",
4b0d3cbe
MM
1969 t);
1970 return;
056a3b12 1971 }
b0e0b31f 1972
0fcedd9c
JM
1973 /* Warn about classes that have private constructors and no friends. */
1974 if (TYPE_HAS_USER_CONSTRUCTOR (t)
550d1bf4
MM
1975 /* Implicitly generated constructors are always public. */
1976 && (!CLASSTYPE_LAZY_DEFAULT_CTOR (t)
1977 || !CLASSTYPE_LAZY_COPY_CTOR (t)))
056a3b12
MM
1978 {
1979 int nonprivate_ctor = 0;
c8094d83 1980
056a3b12
MM
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:
b0e0b31f 1985
c8094d83
MS
1986 template <class T> class C { private: C(); };
1987
066ec0a4 1988 To avoid this asymmetry, we check TYPE_HAS_COPY_CTOR. All
056a3b12
MM
1989 complete non-template or fully instantiated classes have this
1990 flag set. */
066ec0a4 1991 if (!TYPE_HAS_COPY_CTOR (t))
056a3b12 1992 nonprivate_ctor = 1;
c8094d83
MS
1993 else
1994 for (fn = CLASSTYPE_CONSTRUCTORS (t); fn; fn = OVL_NEXT (fn))
056a3b12
MM
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))
b0e0b31f 2004 {
056a3b12
MM
2005 nonprivate_ctor = 1;
2006 break;
b0e0b31f 2007 }
056a3b12 2008 }
aed7b2a6 2009
056a3b12
MM
2010 if (nonprivate_ctor == 0)
2011 {
74fa0285 2012 warning (OPT_Wctor_dtor_privacy,
3db45ab5 2013 "%q#T only defines private constructors and has no friends",
0cbd7506 2014 t);
056a3b12 2015 return;
b0e0b31f
MM
2016 }
2017 }
aed7b2a6
MM
2018}
2019
17211ab5
GK
2020static struct {
2021 gt_pointer_operator new_value;
2022 void *cookie;
2023} resort_data;
2024
f90cdf34
MT
2025/* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
2026
2027static int
94edc4ab 2028method_name_cmp (const void* m1_p, const void* m2_p)
f90cdf34 2029{
67f5655f
GDR
2030 const tree *const m1 = (const tree *) m1_p;
2031 const tree *const m2 = (const tree *) m2_p;
c8094d83 2032
f90cdf34
MT
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}
b0e0b31f 2043
17211ab5
GK
2044/* This routine compares two fields like method_name_cmp but using the
2045 pointer operator in resort_field_decl_data. */
2046
2047static int
94edc4ab 2048resort_method_name_cmp (const void* m1_p, const void* m2_p)
17211ab5 2049{
67f5655f
GDR
2050 const tree *const m1 = (const tree *) m1_p;
2051 const tree *const m2 = (const tree *) m2_p;
17211ab5
GK
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
c8094d83 2071void
94edc4ab 2072resort_type_method_vec (void* obj,
12308bc6 2073 void* /*orig_obj*/,
0cbd7506
MS
2074 gt_pointer_operator new_value,
2075 void* cookie)
17211ab5 2076{
9771b263
DN
2077 vec<tree, va_gc> *method_vec = (vec<tree, va_gc> *) obj;
2078 int len = vec_safe_length (method_vec);
aaaa46d2
MM
2079 size_t slot;
2080 tree fn;
17211ab5
GK
2081
2082 /* The type conversion ops have to live at the front of the vec, so we
2083 can't sort them. */
aaaa46d2 2084 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
9771b263 2085 vec_safe_iterate (method_vec, slot, &fn);
aaaa46d2
MM
2086 ++slot)
2087 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
2088 break;
2089
17211ab5
GK
2090 if (len - slot > 1)
2091 {
2092 resort_data.new_value = new_value;
2093 resort_data.cookie = cookie;
9771b263 2094 qsort (method_vec->address () + slot, len - slot, sizeof (tree),
17211ab5
GK
2095 resort_method_name_cmp);
2096 }
2097}
2098
c7222c02 2099/* Warn about duplicate methods in fn_fields.
8d08fdba 2100
5b0cec3b
MM
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. */
8d08fdba 2104
b0e0b31f 2105static void
94edc4ab 2106finish_struct_methods (tree t)
8d08fdba 2107{
b0e0b31f 2108 tree fn_fields;
9771b263 2109 vec<tree, va_gc> *method_vec;
58010b57
MM
2110 int slot, len;
2111
58010b57 2112 method_vec = CLASSTYPE_METHOD_VEC (t);
508a1c9c
MM
2113 if (!method_vec)
2114 return;
2115
9771b263 2116 len = method_vec->length ();
8d08fdba 2117
c7222c02 2118 /* Clear DECL_IN_AGGR_P for all functions. */
c8094d83 2119 for (fn_fields = TYPE_METHODS (t); fn_fields;
910ad8de 2120 fn_fields = DECL_CHAIN (fn_fields))
5b0cec3b 2121 DECL_IN_AGGR_P (fn_fields) = 0;
8d08fdba 2122
b0e0b31f
MM
2123 /* Issue warnings about private constructors and such. If there are
2124 no methods, then some public defaults are generated. */
f90cdf34
MT
2125 maybe_warn_about_overly_private_class (t);
2126
f90cdf34
MT
2127 /* The type conversion ops have to live at the front of the vec, so we
2128 can't sort them. */
9ba5ff0f 2129 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
9771b263 2130 method_vec->iterate (slot, &fn_fields);
aaaa46d2
MM
2131 ++slot)
2132 if (!DECL_CONV_FN_P (OVL_CURRENT (fn_fields)))
2133 break;
f90cdf34 2134 if (len - slot > 1)
9771b263 2135 qsort (method_vec->address () + slot,
aaaa46d2 2136 len-slot, sizeof (tree), method_name_cmp);
8d08fdba
MS
2137}
2138
90ecce3e 2139/* Make BINFO's vtable have N entries, including RTTI entries,
3b426391 2140 vbase and vcall offsets, etc. Set its type and call the back end
8d7a5379 2141 to lay it out. */
1a588ad7
MM
2142
2143static void
94edc4ab 2144layout_vtable_decl (tree binfo, int n)
1a588ad7 2145{
1a588ad7 2146 tree atype;
c35cce41 2147 tree vtable;
1a588ad7 2148
dcedcddb 2149 atype = build_array_of_n_type (vtable_entry_type, n);
1a588ad7
MM
2150 layout_type (atype);
2151
2152 /* We may have to grow the vtable. */
c35cce41
MM
2153 vtable = get_vtbl_decl_for_binfo (binfo);
2154 if (!same_type_p (TREE_TYPE (vtable), atype))
1a588ad7 2155 {
06ceef4e 2156 TREE_TYPE (vtable) = atype;
c35cce41 2157 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
06ceef4e 2158 layout_decl (vtable, 0);
1a588ad7
MM
2159 }
2160}
2161
9bab6c90
MM
2162/* True iff FNDECL and BASE_FNDECL (both non-static member functions)
2163 have the same signature. */
83f2ccf4 2164
e0fff4b3 2165int
58f9752a 2166same_signature_p (const_tree fndecl, const_tree base_fndecl)
83f2ccf4 2167{
872f37f9
MM
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))
ca36f057 2172 return 1;
872f37f9
MM
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. */
0d9eb3ba 2177 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
ca36f057 2178 return 0;
872f37f9 2179
a6c0d772
MM
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))))
83f2ccf4 2185 {
c4101929
JM
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)))
ca36f057 2192 return 1;
83f2ccf4 2193 }
ca36f057 2194 return 0;
83f2ccf4
MM
2195}
2196
9368208b
MM
2197/* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
2198 subobject. */
c8094d83 2199
9368208b
MM
2200static bool
2201base_derived_from (tree derived, tree base)
2202{
dbbf88d1
NS
2203 tree probe;
2204
2205 for (probe = base; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
2206 {
2207 if (probe == derived)
2208 return true;
809e3e7f 2209 else if (BINFO_VIRTUAL_P (probe))
dbbf88d1
NS
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. */
58c42dc2
NS
2213 return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (derived))
2214 != NULL_TREE);
dbbf88d1
NS
2215 }
2216 return false;
9368208b
MM
2217}
2218
ca36f057
MM
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;
9368208b 2224 /* The candidate overriders. */
78b45a24 2225 tree candidates;
5d5a519f 2226 /* Path to most derived. */
9771b263 2227 vec<tree> path;
ca36f057 2228} find_final_overrider_data;
8d7a5379 2229
f7a8132a
MM
2230/* Add the overrider along the current path to FFOD->CANDIDATES.
2231 Returns true if an overrider was found; false otherwise. */
8d7a5379 2232
f7a8132a 2233static bool
c8094d83 2234dfs_find_final_overrider_1 (tree binfo,
5d5a519f
NS
2235 find_final_overrider_data *ffod,
2236 unsigned depth)
7177d104 2237{
741d8ca3
MM
2238 tree method;
2239
f7a8132a
MM
2240 /* If BINFO is not the most derived type, try a more derived class.
2241 A definition there will overrider a definition here. */
5d5a519f 2242 if (depth)
dbbf88d1 2243 {
5d5a519f
NS
2244 depth--;
2245 if (dfs_find_final_overrider_1
9771b263 2246 (ffod->path[depth], ffod, depth))
f7a8132a
MM
2247 return true;
2248 }
dbbf88d1 2249
741d8ca3 2250 method = look_for_overrides_here (BINFO_TYPE (binfo), ffod->fn);
f7a8132a
MM
2251 if (method)
2252 {
2253 tree *candidate = &ffod->candidates;
c8094d83 2254
f7a8132a
MM
2255 /* Remove any candidates overridden by this new function. */
2256 while (*candidate)
8d7a5379 2257 {
f7a8132a
MM
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);
dbbf88d1 2265 else
f7a8132a 2266 candidate = &TREE_CHAIN (*candidate);
5e19c053 2267 }
c8094d83 2268
f7a8132a
MM
2269 /* Add the new function. */
2270 ffod->candidates = tree_cons (method, binfo, ffod->candidates);
2271 return true;
dbbf88d1 2272 }
5e19c053 2273
f7a8132a
MM
2274 return false;
2275}
2276
2277/* Called from find_final_overrider via dfs_walk. */
2278
2279static tree
5d5a519f 2280dfs_find_final_overrider_pre (tree binfo, void *data)
f7a8132a
MM
2281{
2282 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
2283
2284 if (binfo == ffod->declaring_base)
9771b263
DN
2285 dfs_find_final_overrider_1 (binfo, ffod, ffod->path.length ());
2286 ffod->path.safe_push (binfo);
f7a8132a 2287
dbbf88d1
NS
2288 return NULL_TREE;
2289}
db3d8cde 2290
dbbf88d1 2291static tree
12308bc6 2292dfs_find_final_overrider_post (tree /*binfo*/, void *data)
dbbf88d1 2293{
dbbf88d1 2294 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
9771b263 2295 ffod->path.pop ();
78b45a24 2296
dd42e135
MM
2297 return NULL_TREE;
2298}
2299
5e19c053
MM
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
95675950
MM
2302 overriding occurs. BINFO (in the hierarchy dominated by the binfo
2303 DERIVED) is the base object in which FN is declared. */
e92cc029 2304
a292b002 2305static tree
94edc4ab 2306find_final_overrider (tree derived, tree binfo, tree fn)
a292b002 2307{
5e19c053 2308 find_final_overrider_data ffod;
a292b002 2309
0e339752 2310 /* Getting this right is a little tricky. This is valid:
a292b002 2311
5e19c053
MM
2312 struct S { virtual void f (); };
2313 struct T { virtual void f (); };
2314 struct U : public S, public T { };
a292b002 2315
c8094d83 2316 even though calling `f' in `U' is ambiguous. But,
a292b002 2317
5e19c053
MM
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 { };
dd42e135 2322
d0cd8b44 2323 is not -- there's no way to decide whether to put `S::f' or
c8094d83
MS
2324 `T::f' in the vtable for `R'.
2325
5e19c053
MM
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. */
07fa4878
NS
2328 if (DECL_THUNK_P (fn))
2329 fn = THUNK_TARGET (fn);
f7a8132a
MM
2330
2331 /* Determine the depth of the hierarchy. */
5e19c053
MM
2332 ffod.fn = fn;
2333 ffod.declaring_base = binfo;
78b45a24 2334 ffod.candidates = NULL_TREE;
9771b263 2335 ffod.path.create (30);
5e19c053 2336
5d5a519f
NS
2337 dfs_walk_all (derived, dfs_find_final_overrider_pre,
2338 dfs_find_final_overrider_post, &ffod);
f7a8132a 2339
9771b263 2340 ffod.path.release ();
c8094d83 2341
78b45a24 2342 /* If there was no winner, issue an error message. */
9368208b 2343 if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
16a1369e 2344 return error_mark_node;
dd42e135 2345
9368208b 2346 return ffod.candidates;
a292b002
MS
2347}
2348
548502d3
MM
2349/* Return the index of the vcall offset for FN when TYPE is used as a
2350 virtual base. */
d0cd8b44 2351
d0cd8b44 2352static tree
548502d3 2353get_vcall_index (tree fn, tree type)
d0cd8b44 2354{
9771b263 2355 vec<tree_pair_s, va_gc> *indices = CLASSTYPE_VCALL_INDICES (type);
0871761b
NS
2356 tree_pair_p p;
2357 unsigned ix;
d0cd8b44 2358
9771b263 2359 FOR_EACH_VEC_SAFE_ELT (indices, ix, p)
0871761b
NS
2360 if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (p->purpose))
2361 || same_signature_p (fn, p->purpose))
2362 return p->value;
548502d3
MM
2363
2364 /* There should always be an appropriate index. */
8dc2b103 2365 gcc_unreachable ();
d0cd8b44 2366}
d0cd8b44
JM
2367
2368/* Update an entry in the vtable for BINFO, which is in the hierarchy
bf1cb49e
JM
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. */
4e7512c9
MM
2372
2373static void
a2ddc397
NS
2374update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
2375 unsigned ix)
4e7512c9
MM
2376{
2377 tree b;
2378 tree overrider;
4e7512c9 2379 tree delta;
31f8e4f3 2380 tree virtual_base;
d0cd8b44 2381 tree first_defn;
3cfabe60
NS
2382 tree overrider_fn, overrider_target;
2383 tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
2384 tree over_return, base_return;
f11ee281 2385 bool lost = false;
4e7512c9 2386
d0cd8b44
JM
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))
4e7512c9 2391 {
50bc768d 2392 gcc_assert (b);
3cfabe60 2393 if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
31f8e4f3 2394 break;
f11ee281
JM
2395
2396 /* The nearest definition is from a lost primary. */
2397 if (BINFO_LOST_PRIMARY_P (b))
2398 lost = true;
4e7512c9 2399 }
d0cd8b44 2400 first_defn = b;
4e7512c9 2401
31f8e4f3 2402 /* Find the final overrider. */
3cfabe60 2403 overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
4e7512c9 2404 if (overrider == error_mark_node)
16a1369e
JJ
2405 {
2406 error ("no unique final overrider for %qD in %qT", target_fn, t);
2407 return;
2408 }
3cfabe60 2409 overrider_target = overrider_fn = TREE_PURPOSE (overrider);
c8094d83 2410
9bcb9aae 2411 /* Check for adjusting covariant return types. */
3cfabe60
NS
2412 over_return = TREE_TYPE (TREE_TYPE (overrider_target));
2413 base_return = TREE_TYPE (TREE_TYPE (target_fn));
c8094d83 2414
3cfabe60
NS
2415 if (POINTER_TYPE_P (over_return)
2416 && TREE_CODE (over_return) == TREE_CODE (base_return)
2417 && CLASS_TYPE_P (TREE_TYPE (over_return))
b77fe7b4
NS
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))
3cfabe60
NS
2421 {
2422 /* If FN is a covariant thunk, we must figure out the adjustment
0cbd7506
MS
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. */
3cfabe60 2426 tree fixed_offset, virtual_offset;
12a669d1
NS
2427
2428 over_return = TREE_TYPE (over_return);
2429 base_return = TREE_TYPE (base_return);
c8094d83 2430
3cfabe60
NS
2431 if (DECL_THUNK_P (fn))
2432 {
50bc768d 2433 gcc_assert (DECL_RESULT_THUNK_P (fn));
3cfabe60
NS
2434 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
2435 virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
3cfabe60
NS
2436 }
2437 else
2438 fixed_offset = virtual_offset = NULL_TREE;
4977bab6 2439
e00853fd
NS
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. */
58c42dc2 2444 virtual_offset = binfo_for_vbase (BINFO_TYPE (virtual_offset),
12a669d1
NS
2445 over_return);
2446 else if (!same_type_ignoring_top_level_qualifiers_p
2447 (over_return, base_return))
3cfabe60
NS
2448 {
2449 /* There was no existing virtual thunk (which takes
12a669d1
NS
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
742f25b3
NS
2463 return type. We will always find a thunk_binfo, except
2464 when the covariancy is invalid (which we will have
2465 already diagnosed). */
12a669d1
NS
2466 for (base_binfo = TYPE_BINFO (base_return),
2467 thunk_binfo = TYPE_BINFO (over_return);
742f25b3 2468 thunk_binfo;
12a669d1 2469 thunk_binfo = TREE_CHAIN (thunk_binfo))
742f25b3
NS
2470 if (SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo),
2471 BINFO_TYPE (base_binfo)))
2472 break;
c8094d83 2473
12a669d1
NS
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;
c8094d83 2480
742f25b3
NS
2481 if (virtual_offset
2482 || (thunk_binfo && !BINFO_OFFSET_ZEROP (thunk_binfo)))
3cfabe60 2483 {
bb885938 2484 tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
8d1f0f67 2485
12a669d1 2486 if (virtual_offset)
3cfabe60 2487 {
12a669d1
NS
2488 /* We convert via virtual base. Adjust the fixed
2489 offset to be from there. */
db3927fb
AH
2490 offset =
2491 size_diffop (offset,
2492 convert (ssizetype,
2493 BINFO_OFFSET (virtual_offset)));
3cfabe60
NS
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 }
c8094d83 2504
3cfabe60
NS
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
9bcb9aae 2508 well. */
3cfabe60
NS
2509 overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2510 fixed_offset, virtual_offset);
2511 }
2512 else
49fedf5a
SM
2513 gcc_assert (DECL_INVALID_OVERRIDER_P (overrider_target) ||
2514 !DECL_THUNK_P (fn));
c8094d83 2515
02dea3ff
JM
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));
02dea3ff
JM
2542 if (!DECL_THUNK_P (TREE_VALUE (bv)))
2543 break;
2c1fb3ee
JM
2544 if (BINFO_LOST_PRIMARY_P (b))
2545 lost = true;
02dea3ff
JM
2546 }
2547 first_defn = b;
2548 }
2549
31f8e4f3
MM
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. */
9ccf6541 2552 virtual_base = NULL_TREE;
31f8e4f3 2553
f11ee281 2554 /* See if we can convert to an intermediate virtual base first, and then
3461fba7 2555 use the vcall offset located there to finish the conversion. */
f11ee281 2556 for (; b; b = BINFO_INHERITANCE_CHAIN (b))
4e7512c9 2557 {
d0cd8b44
JM
2558 /* If we find the final overrider, then we can stop
2559 walking. */
539ed333
NS
2560 if (SAME_BINFO_TYPE_P (BINFO_TYPE (b),
2561 BINFO_TYPE (TREE_VALUE (overrider))))
1f84ec23 2562 break;
31f8e4f3 2563
d0cd8b44
JM
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. */
809e3e7f 2567 if (BINFO_VIRTUAL_P (b))
dbbf88d1
NS
2568 {
2569 virtual_base = b;
2570 break;
2571 }
4e7512c9 2572 }
4e7512c9 2573
d0cd8b44
JM
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). */
31f8e4f3 2577 if (virtual_base)
20dde49d
NS
2578 /* The `this' pointer needs to be adjusted from the declaration to
2579 the nearest virtual base. */
db3927fb
AH
2580 delta = size_diffop_loc (input_location,
2581 convert (ssizetype, BINFO_OFFSET (virtual_base)),
bb885938 2582 convert (ssizetype, BINFO_OFFSET (first_defn)));
f11ee281
JM
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;
4e7512c9 2589 else
548502d3
MM
2590 /* The `this' pointer needs to be adjusted from pointing to
2591 BINFO to pointing at the base where the final overrider
2592 appears. */
db3927fb
AH
2593 delta = size_diffop_loc (input_location,
2594 convert (ssizetype,
bb885938
NS
2595 BINFO_OFFSET (TREE_VALUE (overrider))),
2596 convert (ssizetype, BINFO_OFFSET (binfo)));
4e7512c9 2597
3cfabe60 2598 modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
31f8e4f3
MM
2599
2600 if (virtual_base)
c8094d83 2601 BV_VCALL_INDEX (*virtuals)
3cfabe60 2602 = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
d1f05f93
NS
2603 else
2604 BV_VCALL_INDEX (*virtuals) = NULL_TREE;
02dea3ff 2605
8434c305 2606 BV_LOST_PRIMARY (*virtuals) = lost;
4e7512c9
MM
2607}
2608
8026246f 2609/* Called from modify_all_vtables via dfs_walk. */
e92cc029 2610
8026246f 2611static tree
94edc4ab 2612dfs_modify_vtables (tree binfo, void* data)
8026246f 2613{
bcb1079e 2614 tree t = (tree) data;
5b94d9dd
NS
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;
c8094d83 2623
5b94d9dd
NS
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);
c8094d83 2637
5b94d9dd
NS
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))
c8094d83
MS
2646 update_vtable_entry_for_fn (t,
2647 binfo,
5b94d9dd
NS
2648 BV_FN (old_virtuals),
2649 &virtuals, ix);
8026246f 2650
8026246f
MM
2651 return NULL_TREE;
2652}
2653
a68ad5bd
MM
2654/* Update all of the primary and secondary vtables for T. Create new
2655 vtables as required, and initialize their RTTI information. Each
e6858a84
NS
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. */
a68ad5bd
MM
2662
2663static tree
94edc4ab 2664modify_all_vtables (tree t, tree virtuals)
8026246f 2665{
3461fba7
NS
2666 tree binfo = TYPE_BINFO (t);
2667 tree *fnsp;
a68ad5bd 2668
9d13a069
JM
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
5e19c053 2673 /* Update all of the vtables. */
5b94d9dd 2674 dfs_walk_once (binfo, dfs_modify_vtables, NULL, t);
a68ad5bd 2675
e6858a84
NS
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; )
a68ad5bd 2681 {
3461fba7 2682 tree fn = TREE_VALUE (*fnsp);
a68ad5bd 2683
e6858a84
NS
2684 if (!value_member (fn, BINFO_VIRTUALS (binfo))
2685 || DECL_VINDEX (fn) == error_mark_node)
a68ad5bd 2686 {
3461fba7
NS
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
e6858a84 2692 /* This is a function not already in our vtable. Keep it. */
3461fba7 2693 fnsp = &TREE_CHAIN (*fnsp);
a68ad5bd 2694 }
3461fba7
NS
2695 else
2696 /* We've already got an entry for this function. Skip it. */
2697 *fnsp = TREE_CHAIN (*fnsp);
a68ad5bd 2698 }
e93ee644 2699
e6858a84 2700 return virtuals;
7177d104
MS
2701}
2702
7d5b8b11
MM
2703/* Get the base virtual function declarations in T that have the
2704 indicated NAME. */
e92cc029 2705
5ddc28a5 2706static tree
94edc4ab 2707get_basefndecls (tree name, tree t)
9e9ff709 2708{
7d5b8b11 2709 tree methods;
9e9ff709 2710 tree base_fndecls = NULL_TREE;
604a3205 2711 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
7d5b8b11 2712 int i;
9e9ff709 2713
3d1df1fa
MM
2714 /* Find virtual functions in T with the indicated NAME. */
2715 i = lookup_fnfields_1 (t, name);
2716 if (i != -1)
9771b263 2717 for (methods = (*CLASSTYPE_METHOD_VEC (t))[i];
3d1df1fa
MM
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 }
9e9ff709
MS
2727
2728 if (base_fndecls)
2729 return base_fndecls;
2730
2731 for (i = 0; i < n_baseclasses; i++)
2732 {
604a3205 2733 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
7d5b8b11 2734 base_fndecls = chainon (get_basefndecls (name, basetype),
9e9ff709
MS
2735 base_fndecls);
2736 }
2737
2738 return base_fndecls;
2739}
2740
2ee887f2
MS
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
9f4faeae 2745void
94edc4ab 2746check_for_override (tree decl, tree ctype)
2ee887f2 2747{
7506ab1d 2748 bool overrides_found = false;
cbb40945
NS
2749 if (TREE_CODE (decl) == TEMPLATE_DECL)
2750 /* In [temp.mem] we have:
2ee887f2 2751
0cbd7506
MS
2752 A specialization of a member function template does not
2753 override a virtual function from a base class. */
cbb40945
NS
2754 return;
2755 if ((DECL_DESTRUCTOR_P (decl)
a6c0d772
MM
2756 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2757 || DECL_CONV_FN_P (decl))
cbb40945
NS
2758 && look_for_overrides (ctype, decl)
2759 && !DECL_STATIC_FUNCTION_P (decl))
e6858a84
NS
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. */
7506ab1d
VV
2763 {
2764 DECL_VINDEX (decl) = decl;
2765 overrides_found = true;
2766 }
e6858a84 2767
cbb40945 2768 if (DECL_VIRTUAL_P (decl))
2ee887f2 2769 {
e6858a84 2770 if (!DECL_VINDEX (decl))
2ee887f2
MS
2771 DECL_VINDEX (decl) = error_mark_node;
2772 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
5ade176d
JM
2773 if (DECL_DESTRUCTOR_P (decl))
2774 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (ctype) = true;
2ee887f2 2775 }
7506ab1d
VV
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);
2ee887f2
MS
2780}
2781
fc378698
MS
2782/* Warn about hidden virtual functions that are not overridden in t.
2783 We know that constructors and destructors don't apply. */
e92cc029 2784
b23e103b 2785static void
94edc4ab 2786warn_hidden (tree t)
9e9ff709 2787{
9771b263 2788 vec<tree, va_gc> *method_vec = CLASSTYPE_METHOD_VEC (t);
aaaa46d2
MM
2789 tree fns;
2790 size_t i;
9e9ff709
MS
2791
2792 /* We go through each separately named virtual function. */
c8094d83 2793 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
9771b263 2794 vec_safe_iterate (method_vec, i, &fns);
aaaa46d2 2795 ++i)
9e9ff709 2796 {
aaaa46d2 2797 tree fn;
7d5b8b11
MM
2798 tree name;
2799 tree fndecl;
2800 tree base_fndecls;
fa743e8c
NS
2801 tree base_binfo;
2802 tree binfo;
7d5b8b11
MM
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. */
aaaa46d2 2807 name = DECL_NAME (OVL_CURRENT (fns));
7d5b8b11
MM
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. */
fa743e8c
NS
2812 for (binfo = TYPE_BINFO (t), j = 0;
2813 BINFO_BASE_ITERATE (binfo, j, base_binfo); j++)
a4832853 2814 {
fa743e8c 2815 tree basetype = BINFO_TYPE (base_binfo);
7d5b8b11
MM
2816 base_fndecls = chainon (get_basefndecls (name, basetype),
2817 base_fndecls);
a4832853
JM
2818 }
2819
00a17e31 2820 /* If there are no functions to hide, continue. */
7d5b8b11 2821 if (!base_fndecls)
9e9ff709
MS
2822 continue;
2823
00a17e31 2824 /* Remove any overridden functions. */
aaaa46d2 2825 for (fn = fns; fn; fn = OVL_NEXT (fn))
9e9ff709 2826 {
aaaa46d2 2827 fndecl = OVL_CURRENT (fn);
7d5b8b11
MM
2828 if (DECL_VINDEX (fndecl))
2829 {
2830 tree *prev = &base_fndecls;
c8094d83
MS
2831
2832 while (*prev)
7d5b8b11
MM
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 }
9e9ff709
MS
2841 }
2842
9e9ff709
MS
2843 /* Now give a warning for all base functions without overriders,
2844 as they are hidden. */
c8094d83 2845 while (base_fndecls)
7d5b8b11
MM
2846 {
2847 /* Here we know it is a hider, and no overrider exists. */
286d12f9
MLI
2848 warning (OPT_Woverloaded_virtual, "%q+D was hidden", TREE_VALUE (base_fndecls));
2849 warning (OPT_Woverloaded_virtual, " by %q+D", fns);
7d5b8b11
MM
2850 base_fndecls = TREE_CHAIN (base_fndecls);
2851 }
9e9ff709
MS
2852 }
2853}
2854
096a4865
PC
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 {
a6659b55
JM
2878 /* We already complained about static data members in
2879 finish_static_data_member_decl. */
2880 if (complain && TREE_CODE (elt) != VAR_DECL)
096a4865
PC
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
9e9ff709
MS
2937/* Check for things that are invalid. There are probably plenty of other
2938 things we should check for also. */
e92cc029 2939
9e9ff709 2940static void
94edc4ab 2941finish_struct_anon (tree t)
9e9ff709 2942{
096a4865 2943 for (tree field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
9e9ff709
MS
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
6bdb8141 2951 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
096a4865 2952 finish_struct_anon_r (field, /*complain=*/true);
9e9ff709
MS
2953 }
2954}
2955
7088fca9
KL
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
c8094d83 2960 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
7088fca9
KL
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
94edc4ab 2967maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
7088fca9
KL
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
ca2409f9
DS
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
85b5d65a
JM
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,
e252e96a
JM
3047 copy or move ctor for derived or base. */
3048 if (nparms == 0)
85b5d65a 3049 return;
e252e96a
JM
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
85b5d65a 3058 tree parmlist = void_list_node;
e252e96a 3059 for (int i = nparms - 1; i >= 0; i--)
85b5d65a
JM
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);
4514a96b
JM
3087 if (parms == NULL_TREE)
3088 {
3fe99aa5
FC
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);
4514a96b 3092 }
85b5d65a
JM
3093}
3094
61a127b3 3095/* Create default constructors, assignment operators, and so forth for
e5e459bf
AO
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. */
61a127b3 3101
f72ab53b 3102static void
85b5d65a 3103add_implicitly_declared_members (tree t, tree* access_decls,
94edc4ab 3104 int cant_have_const_cctor,
10746f37 3105 int cant_have_const_assignment)
61a127b3 3106{
830dea94
JM
3107 bool move_ok = false;
3108
604b2bfc 3109 if (cxx_dialect >= cxx11 && !CLASSTYPE_DESTRUCTORS (t)
830dea94
JM
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
61a127b3 3114 /* Destructor. */
9f4faeae 3115 if (!CLASSTYPE_DESTRUCTORS (t))
61a127b3 3116 {
9f4faeae
MM
3117 /* In general, we create destructors lazily. */
3118 CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
9f4faeae 3119
d1a115f8
JM
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);
61a127b3 3126 }
61a127b3 3127
0fcedd9c
JM
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))
61a127b3 3133 {
508a1c9c 3134 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 1;
0930cc0e 3135 CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 1;
604b2bfc 3136 if (cxx_dialect >= cxx11)
0930cc0e 3137 TYPE_HAS_CONSTEXPR_CTOR (t)
fd3faf2b
JM
3138 /* This might force the declaration. */
3139 = type_has_constexpr_default_constructor (t);
61a127b3
MM
3140 }
3141
0fcedd9c
JM
3142 /* [class.ctor]
3143
3144 If a class definition does not explicitly declare a copy
3145 constructor, one is declared implicitly. */
a2e70335 3146 if (! TYPE_HAS_COPY_CTOR (t) && ! TYPE_FOR_JAVA (t))
61a127b3 3147 {
066ec0a4
JM
3148 TYPE_HAS_COPY_CTOR (t) = 1;
3149 TYPE_HAS_CONST_COPY_CTOR (t) = !cant_have_const_cctor;
508a1c9c 3150 CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
830dea94 3151 if (move_ok)
d758e847 3152 CLASSTYPE_LAZY_MOVE_CTOR (t) = 1;
61a127b3
MM
3153 }
3154
aaaa46d2
MM
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. */
a2e70335 3159 if (!TYPE_HAS_COPY_ASSIGN (t) && !TYPE_FOR_JAVA (t))
fb232476 3160 {
066ec0a4
JM
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;
830dea94 3164 if (move_ok)
d758e847 3165 CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 1;
fb232476 3166 }
d1a115f8
JM
3167
3168 /* We can't be lazy about declaring functions that might override
3169 a virtual function from a base class. */
ca2409f9 3170 declare_virt_assop_and_dtor (t);
85b5d65a
JM
3171
3172 while (*access_decls)
3173 {
3174 tree using_decl = TREE_VALUE (*access_decls);
3175 tree decl = USING_DECL_DECLS (using_decl);
140bec21 3176 if (DECL_NAME (using_decl) == ctor_identifier)
85b5d65a
JM
3177 {
3178 /* declare, then remove the decl */
140bec21 3179 tree ctor_list = decl;
85b5d65a
JM
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 }
61a127b3
MM
3191}
3192
cba0366c
FC
3193/* Subroutine of insert_into_classtype_sorted_fields. Recursively
3194 count the number of fields in TYPE, including anonymous union
3195 members. */
f90cdf34
MT
3196
3197static int
94edc4ab 3198count_fields (tree fields)
f90cdf34
MT
3199{
3200 tree x;
3201 int n_fields = 0;
910ad8de 3202 for (x = fields; x; x = DECL_CHAIN (x))
f90cdf34
MT
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
cba0366c
FC
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. */
f90cdf34
MT
3215
3216static int
d07605f5 3217add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
f90cdf34
MT
3218{
3219 tree x;
910ad8de 3220 for (x = fields; x; x = DECL_CHAIN (x))
f90cdf34
MT
3221 {
3222 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
d07605f5 3223 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
f90cdf34 3224 else
d07605f5 3225 field_vec->elts[idx++] = x;
f90cdf34
MT
3226 }
3227 return idx;
3228}
3229
cba0366c
FC
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
1e30f9b4
MM
3244/* FIELD is a bit-field. We are finishing the processing for its
3245 enclosing type. Issue any appropriate messages and set appropriate
e7df0180 3246 flags. Returns false if an error has been diagnosed. */
1e30f9b4 3247
e7df0180 3248static bool
94edc4ab 3249check_bitfield_decl (tree field)
1e30f9b4
MM
3250{
3251 tree type = TREE_TYPE (field);
606791f6
MM
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);
3db45ab5 3257 gcc_assert (w != NULL_TREE);
606791f6
MM
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;
1e30f9b4 3261
cd8ed629 3262 /* Detect invalid bit-field type. */
550a799d 3263 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
1e30f9b4 3264 {
dee15844 3265 error ("bit-field %q+#D with non-integral type", field);
cd8ed629 3266 w = error_mark_node;
1e30f9b4 3267 }
606791f6 3268 else
1e30f9b4 3269 {
9e115cec 3270 location_t loc = input_location;
1e30f9b4
MM
3271 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
3272 STRIP_NOPS (w);
3273
3274 /* detect invalid field size. */
9e115cec 3275 input_location = DECL_SOURCE_LOCATION (field);
fa2200cb 3276 w = cxx_constant_value (w);
9e115cec 3277 input_location = loc;
1e30f9b4
MM
3278
3279 if (TREE_CODE (w) != INTEGER_CST)
3280 {
dee15844 3281 error ("bit-field %q+D width not an integer constant", field);
cd8ed629 3282 w = error_mark_node;
1e30f9b4 3283 }
05bccae2 3284 else if (tree_int_cst_sgn (w) < 0)
1e30f9b4 3285 {
dee15844 3286 error ("negative width in bit-field %q+D", field);
cd8ed629 3287 w = error_mark_node;
1e30f9b4 3288 }
05bccae2 3289 else if (integer_zerop (w) && DECL_NAME (field) != 0)
1e30f9b4 3290 {
dee15844 3291 error ("zero width for bit-field %q+D", field);
cd8ed629 3292 w = error_mark_node;
1e30f9b4 3293 }
7f5d76fb
PC
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)))
dee15844 3300 warning (0, "width of %q+D exceeds its type", field);
1e30f9b4 3301 else if (TREE_CODE (type) == ENUMERAL_TYPE
cbb4feb3
JM
3302 && (0 > (compare_tree_int
3303 (w, TYPE_PRECISION (ENUM_UNDERLYING_TYPE (type))))))
dee15844 3304 warning (0, "%q+D is too small to hold all values of %q#T", field, type);
cd8ed629 3305 }
c8094d83 3306
cd8ed629
MM
3307 if (w != error_mark_node)
3308 {
3309 DECL_SIZE (field) = convert (bitsizetype, w);
3310 DECL_BIT_FIELD (field) = 1;
e7df0180 3311 return true;
1e30f9b4
MM
3312 }
3313 else
cd8ed629
MM
3314 {
3315 /* Non-bit-fields are aligned for their type. */
3316 DECL_BIT_FIELD (field) = 0;
3317 CLEAR_DECL_C_BIT_FIELD (field);
e7df0180 3318 return false;
cd8ed629 3319 }
1e30f9b4
MM
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
94edc4ab 3327check_field_decl (tree field,
0cbd7506
MS
3328 tree t,
3329 int* cant_have_const_ctor,
3330 int* no_const_asn_ref,
10746f37 3331 int* any_default_members)
1e30f9b4
MM
3332{
3333 tree type = strip_array_types (TREE_TYPE (field));
3334
57ece258 3335 /* In C++98 an anonymous union cannot contain any fields which would change
1e30f9b4 3336 the settings of CANT_HAVE_CONST_CTOR and friends. */
604b2bfc 3337 if (ANON_UNION_TYPE_P (type) && cxx_dialect < cxx11)
1e30f9b4 3338 ;
066ec0a4 3339 /* And, we don't set TYPE_HAS_CONST_COPY_CTOR, etc., for anonymous
1e30f9b4
MM
3340 structs. So, we recurse through their fields here. */
3341 else if (ANON_AGGR_TYPE_P (type))
3342 {
3343 tree fields;
3344
910ad8de 3345 for (fields = TYPE_FIELDS (type); fields; fields = DECL_CHAIN (fields))
17aec3eb 3346 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
1e30f9b4 3347 check_field_decl (fields, t, cant_have_const_ctor,
10746f37 3348 no_const_asn_ref, any_default_members);
1e30f9b4
MM
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);
c8094d83 3357
604b2bfc 3358 if (TREE_CODE (t) == UNION_TYPE && cxx_dialect < cxx11)
1e30f9b4 3359 {
57ece258
JM
3360 static bool warned;
3361 int oldcount = errorcount;
1e30f9b4 3362 if (TYPE_NEEDS_CONSTRUCTING (type))
dee15844
JM
3363 error ("member %q+#D with constructor not allowed in union",
3364 field);
834c6dff 3365 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
dee15844 3366 error ("member %q+#D with destructor not allowed in union", field);
066ec0a4 3367 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
dee15844
JM
3368 error ("member %q+#D with copy assignment operator not allowed in union",
3369 field);
57ece258
JM
3370 if (!warned && errorcount > oldcount)
3371 {
3372 inform (DECL_SOURCE_LOCATION (field), "unrestricted unions "
97e3ad20 3373 "only available with -std=c++11 or -std=gnu++11");
57ece258
JM
3374 warned = true;
3375 }
1e30f9b4
MM
3376 }
3377 else
3378 {
3379 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
c8094d83 3380 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
834c6dff 3381 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
d758e847
JM
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));
ac177431
JM
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));
1e30f9b4
MM
3391 }
3392
d758e847
JM
3393 if (TYPE_HAS_COPY_CTOR (type)
3394 && !TYPE_HAS_CONST_COPY_CTOR (type))
1e30f9b4
MM
3395 *cant_have_const_ctor = 1;
3396
d758e847
JM
3397 if (TYPE_HAS_COPY_ASSIGN (type)
3398 && !TYPE_HAS_CONST_COPY_ASSIGN (type))
1e30f9b4 3399 *no_const_asn_ref = 1;
1e30f9b4 3400 }
7dbb85a7
JM
3401
3402 check_abi_tags (t, field);
3403
1e30f9b4
MM
3404 if (DECL_INITIAL (field) != NULL_TREE)
3405 {
3406 /* `build_class_init_list' does not recognize
3407 non-FIELD_DECLs. */
0e5f8a59 3408 if (TREE_CODE (t) == UNION_TYPE && *any_default_members != 0)
1f070f2b 3409 error ("multiple fields in union %qT initialized", t);
1e30f9b4
MM
3410 *any_default_members = 1;
3411 }
6bb88f3b 3412}
1e30f9b4 3413
08b962b0
MM
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.
8d08fdba 3419
08b962b0 3420 In addition, set the following flags:
8d08fdba 3421
08b962b0
MM
3422 EMPTY_P
3423 The class is empty, i.e., contains no non-static data members.
8d08fdba 3424
08b962b0
MM
3425 CANT_HAVE_CONST_CTOR_P
3426 This class cannot have an implicitly generated copy constructor
3427 taking a const reference.
8d08fdba 3428
08b962b0
MM
3429 CANT_HAVE_CONST_ASN_REF
3430 This class cannot have an implicitly generated assignment
3431 operator taking a const reference.
8d08fdba 3432
08b962b0
MM
3433 All of these flags should be initialized before calling this
3434 function.
8d08fdba 3435
08b962b0
MM
3436 Returns a pointer to the end of the TYPE_FIELDs chain; additional
3437 fields can be added by adding to this chain. */
8d08fdba 3438
607cf131 3439static void
58731fd1 3440check_field_decls (tree t, tree *access_decls,
58731fd1 3441 int *cant_have_const_ctor_p,
10746f37 3442 int *no_const_asn_ref_p)
08b962b0
MM
3443{
3444 tree *field;
3445 tree *next;
dd29d26b 3446 bool has_pointers;
08b962b0 3447 int any_default_members;
22002050 3448 int cant_pack = 0;
c32097d8 3449 int field_access = -1;
08b962b0
MM
3450
3451 /* Assume there are no access declarations. */
3452 *access_decls = NULL_TREE;
3453 /* Assume this class has no pointer members. */
dd29d26b 3454 has_pointers = false;
08b962b0
MM
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)
8d08fdba 3460 {
08b962b0
MM
3461 tree x = *field;
3462 tree type = TREE_TYPE (x);
c32097d8 3463 int this_field_access;
8d08fdba 3464
910ad8de 3465 next = &DECL_CHAIN (x);
8d08fdba 3466
cffa8729 3467 if (TREE_CODE (x) == USING_DECL)
f30432d7 3468 {
08b962b0
MM
3469 /* Save the access declarations for our caller. */
3470 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
f30432d7
MS
3471 continue;
3472 }
8d08fdba 3473
050367a3
MM
3474 if (TREE_CODE (x) == TYPE_DECL
3475 || TREE_CODE (x) == TEMPLATE_DECL)
f30432d7 3476 continue;
8d08fdba 3477
f30432d7 3478 /* If we've gotten this far, it's a data member, possibly static,
e92cc029 3479 or an enumerator. */
8d0d1915
JM
3480 if (TREE_CODE (x) != CONST_DECL)
3481 DECL_CONTEXT (x) = t;
8d08fdba 3482
58ec3cc5
MM
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
324f9dfb 3491 reference type, the program is ill-formed. */
5a6ccc94 3492 if (VAR_P (x))
58ec3cc5 3493 {
dee15844 3494 error ("%q+D may not be static because it is a member of a union", x);
58ec3cc5
MM
3495 continue;
3496 }
3497 if (TREE_CODE (type) == REFERENCE_TYPE)
3498 {
dee15844
JM
3499 error ("%q+D may not have reference type %qT because"
3500 " it is a member of a union",
3501 x, type);
58ec3cc5
MM
3502 continue;
3503 }
3504 }
3505
f30432d7
MS
3506 /* Perform error checking that did not get done in
3507 grokdeclarator. */
52fb2769 3508 if (TREE_CODE (type) == FUNCTION_TYPE)
f30432d7 3509 {
dee15844 3510 error ("field %q+D invalidly declared function type", x);
52fb2769
NS
3511 type = build_pointer_type (type);
3512 TREE_TYPE (x) = type;
f30432d7 3513 }
52fb2769 3514 else if (TREE_CODE (type) == METHOD_TYPE)
f30432d7 3515 {
dee15844 3516 error ("field %q+D invalidly declared method type", x);
52fb2769
NS
3517 type = build_pointer_type (type);
3518 TREE_TYPE (x) = type;
f30432d7 3519 }
8d08fdba 3520
52fb2769 3521 if (type == error_mark_node)
f30432d7 3522 continue;
c8094d83 3523
5a6ccc94 3524 if (TREE_CODE (x) == CONST_DECL || VAR_P (x))
73a8adb6 3525 continue;
8d08fdba 3526
f30432d7 3527 /* Now it can only be a FIELD_DECL. */
8d08fdba 3528
f30432d7 3529 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
08b962b0 3530 CLASSTYPE_NON_AGGREGATE (t) = 1;
8d08fdba 3531
3b49d762 3532 /* If at least one non-static data member is non-literal, the whole
48d261d2
PC
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))
3b49d762
GDR
3536 CLASSTYPE_LITERAL_P (t) = false;
3537
c32097d8
JM
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
0fcedd9c 3548 /* If this is of reference type, check if it needs an init. */
52fb2769 3549 if (TREE_CODE (type) == REFERENCE_TYPE)
0cbd7506 3550 {
c32097d8
JM
3551 CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3552 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
f30432d7 3553 if (DECL_INITIAL (x) == NULL_TREE)
6eb35968 3554 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
8d08fdba 3555
f30432d7
MS
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. */
066ec0a4 3560 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
ac177431 3561 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) = 1;
f30432d7 3562 }
8d08fdba 3563
1e30f9b4 3564 type = strip_array_types (type);
dd29d26b 3565
1937f939
JM
3566 if (TYPE_PACKED (t))
3567 {
c32097d8 3568 if (!layout_pod_type_p (type) && !TYPE_PACKED (type))
4666cd04
JM
3569 {
3570 warning
3571 (0,
3572 "ignoring packed attribute because of unpacked non-POD field %q+#D",
3573 x);
22002050 3574 cant_pack = 1;
4666cd04 3575 }
2cd36c22
AN
3576 else if (DECL_C_BIT_FIELD (x)
3577 || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
1937f939
JM
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
dd29d26b
GB
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)
66b1156a 3602 && !TYPE_PTRFN_P (type))
dd29d26b 3603 has_pointers = true;
824b9a4c 3604
58ec3cc5
MM
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
52fb2769 3613 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
08b962b0 3614 CLASSTYPE_HAS_MUTABLE (t) = 1;
a7a7710d 3615
42306d73
PC
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
c32097d8 3632 if (! layout_pod_type_p (type))
0cbd7506
MS
3633 /* DR 148 now allows pointers to members (which are POD themselves),
3634 to be allowed in POD structs. */
c32097d8
JM
3635 CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3636
3637 if (!std_layout_type_p (type))
3638 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
52fb2769 3639
94e6e4c4
AO
3640 if (! zero_init_p (type))
3641 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
3642
640c2adf
FC
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,
10746f37 3649 &any_default_members);
640c2adf 3650
ec3ebf45
OG
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
f30432d7 3657 /* If any field is const, the structure type is pseudo-const. */
52fb2769 3658 if (CP_TYPE_CONST_P (type))
f30432d7
MS
3659 {
3660 C_TYPE_FIELDS_READONLY (t) = 1;
3661 if (DECL_INITIAL (x) == NULL_TREE)
6eb35968 3662 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
f30432d7
MS
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. */
066ec0a4 3668 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
ac177431 3669 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) = 1;
f30432d7 3670 }
08b962b0 3671 /* A field that is pseudo-const makes the structure likewise. */
5552b43c 3672 else if (CLASS_TYPE_P (type))
f30432d7 3673 {
08b962b0 3674 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
6eb35968
DE
3675 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
3676 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
3677 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
f30432d7 3678 }
8d08fdba 3679
c10bffd0
JM
3680 /* Core issue 80: A nonstatic data member is required to have a
3681 different name from the class iff the class has a
b87d79e6 3682 user-declared constructor. */
0fcedd9c
JM
3683 if (constructor_name_p (DECL_NAME (x), t)
3684 && TYPE_HAS_USER_CONSTRUCTOR (t))
cbe5f3b3 3685 permerror (input_location, "field %q+#D with same name as class", x);
8d08fdba
MS
3686 }
3687
dd29d26b
GB
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.
c8094d83 3700
77880ae4 3701 This seems enough for practical purposes. */
22002050
JM
3702 if (warn_ecpp
3703 && has_pointers
0fcedd9c 3704 && TYPE_HAS_USER_CONSTRUCTOR (t)
22002050 3705 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
066ec0a4 3706 && !(TYPE_HAS_COPY_CTOR (t) && TYPE_HAS_COPY_ASSIGN (t)))
824b9a4c 3707 {
b323323f 3708 warning (OPT_Weffc__, "%q#T has pointer data members", t);
c8094d83 3709
066ec0a4 3710 if (! TYPE_HAS_COPY_CTOR (t))
824b9a4c 3711 {
74fa0285 3712 warning (OPT_Weffc__,
3db45ab5 3713 " but does not override %<%T(const %T&)%>", t, t);
066ec0a4 3714 if (!TYPE_HAS_COPY_ASSIGN (t))
74fa0285 3715 warning (OPT_Weffc__, " or %<operator=(const %T&)%>", t);
824b9a4c 3716 }
066ec0a4 3717 else if (! TYPE_HAS_COPY_ASSIGN (t))
74fa0285 3718 warning (OPT_Weffc__,
3db45ab5 3719 " but does not override %<operator=(const %T&)%>", t);
824b9a4c 3720 }
08b962b0 3721
0e5f8a59
JM
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
22002050
JM
3730 /* If any of the fields couldn't be packed, unset TYPE_PACKED. */
3731 if (cant_pack)
3732 TYPE_PACKED (t) = 0;
607cf131
MM
3733
3734 /* Check anonymous struct/anonymous union fields. */
3735 finish_struct_anon (t);
3736
08b962b0
MM
3737 /* We've built up the list of access declarations in reverse order.
3738 Fix that now. */
3739 *access_decls = nreverse (*access_decls);
08b962b0
MM
3740}
3741
c20118a8
MM
3742/* If TYPE is an empty class type, records its OFFSET in the table of
3743 OFFSETS. */
607cf131 3744
c20118a8 3745static int
94edc4ab 3746record_subobject_offset (tree type, tree offset, splay_tree offsets)
5c24fba6 3747{
c20118a8 3748 splay_tree_node n;
5c24fba6 3749
c20118a8
MM
3750 if (!is_empty_class (type))
3751 return 0;
5c24fba6 3752
c20118a8
MM
3753 /* Record the location of this empty object in OFFSETS. */
3754 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3755 if (!n)
c8094d83 3756 n = splay_tree_insert (offsets,
c20118a8
MM
3757 (splay_tree_key) offset,
3758 (splay_tree_value) NULL_TREE);
c8094d83 3759 n->value = ((splay_tree_value)
c20118a8
MM
3760 tree_cons (NULL_TREE,
3761 type,
3762 (tree) n->value));
3763
3764 return 0;
607cf131
MM
3765}
3766
838dfd8a 3767/* Returns nonzero if TYPE is an empty class type and there is
c20118a8 3768 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
9785e4b1 3769
c20118a8 3770static int
94edc4ab 3771check_subobject_offset (tree type, tree offset, splay_tree offsets)
9785e4b1 3772{
c20118a8
MM
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;
9785e4b1
MM
3789}
3790
c20118a8
MM
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
2003cd37
MM
3793 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3794 be traversed.
5cdba4ff
MM
3795
3796 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3797 than MAX_OFFSET will not be walked.
3798
838dfd8a 3799 If F returns a nonzero value, the traversal ceases, and that value
5cdba4ff 3800 is returned. Otherwise, returns zero. */
d77249e7 3801
c20118a8 3802static int
c8094d83 3803walk_subobject_offsets (tree type,
0cbd7506
MS
3804 subobject_offset_fn f,
3805 tree offset,
3806 splay_tree offsets,
3807 tree max_offset,
3808 int vbases_p)
5c24fba6 3809{
c20118a8 3810 int r = 0;
ff944b49 3811 tree type_binfo = NULL_TREE;
c20118a8 3812
5cdba4ff
MM
3813 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3814 stop. */
807e902e 3815 if (max_offset && tree_int_cst_lt (max_offset, offset))
5cdba4ff
MM
3816 return 0;
3817
dbe91deb
NS
3818 if (type == error_mark_node)
3819 return 0;
3db45ab5 3820
c8094d83 3821 if (!TYPE_P (type))
ff944b49
MM
3822 {
3823 if (abi_version_at_least (2))
3824 type_binfo = type;
3825 type = BINFO_TYPE (type);
3826 }
3827
c20118a8 3828 if (CLASS_TYPE_P (type))
5c24fba6 3829 {
c20118a8 3830 tree field;
17bbb839 3831 tree binfo;
c20118a8
MM
3832 int i;
3833
5ec1192e
MM
3834 /* Avoid recursing into objects that are not interesting. */
3835 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3836 return 0;
3837
c20118a8
MM
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. */
ff944b49
MM
3844 if (!type_binfo)
3845 type_binfo = TYPE_BINFO (type);
fa743e8c 3846 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
c20118a8 3847 {
ff944b49
MM
3848 tree binfo_offset;
3849
c8094d83 3850 if (abi_version_at_least (2)
809e3e7f 3851 && BINFO_VIRTUAL_P (binfo))
17bbb839 3852 continue;
5c24fba6 3853
c8094d83
MS
3854 if (!vbases_p
3855 && BINFO_VIRTUAL_P (binfo)
9965d119 3856 && !BINFO_PRIMARY_P (binfo))
c20118a8
MM
3857 continue;
3858
ff944b49
MM
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. */
604a3205 3869 orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
c8094d83 3870 binfo_offset = size_binop (PLUS_EXPR,
ff944b49
MM
3871 offset,
3872 BINFO_OFFSET (orig_binfo));
3873 }
3874
3875 r = walk_subobject_offsets (binfo,
c20118a8 3876 f,
ff944b49 3877 binfo_offset,
c20118a8 3878 offsets,
5cdba4ff 3879 max_offset,
c8094d83 3880 (abi_version_at_least (2)
17bbb839 3881 ? /*vbases_p=*/0 : vbases_p));
c20118a8
MM
3882 if (r)
3883 return r;
3884 }
3885
58c42dc2 3886 if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
17bbb839 3887 {
58c42dc2 3888 unsigned ix;
9771b263 3889 vec<tree, va_gc> *vbases;
17bbb839 3890
ff944b49
MM
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)
9ba5ff0f 3897 for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
9771b263 3898 vec_safe_iterate (vbases, ix, &binfo); ix++)
ff944b49 3899 {
ff944b49
MM
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
17bbb839 3912 {
ff944b49
MM
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.) */
58c42dc2 3916 tree vbase = get_primary_binfo (type_binfo);
c8094d83 3917
809e3e7f 3918 if (vbase && BINFO_VIRTUAL_P (vbase)
fc6633e0
NS
3919 && BINFO_PRIMARY_P (vbase)
3920 && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
ff944b49 3921 {
c8094d83 3922 r = (walk_subobject_offsets
dbbf88d1
NS
3923 (vbase, f, offset,
3924 offsets, max_offset, /*vbases_p=*/0));
3925 if (r)
3926 return r;
ff944b49 3927 }
17bbb839
MM
3928 }
3929 }
3930
c20118a8 3931 /* Iterate through the fields of TYPE. */
910ad8de 3932 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
e765a228
JM
3933 if (TREE_CODE (field) == FIELD_DECL
3934 && TREE_TYPE (field) != error_mark_node
3935 && !DECL_ARTIFICIAL (field))
c20118a8 3936 {
956d9305
MM
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
c20118a8
MM
3945 r = walk_subobject_offsets (TREE_TYPE (field),
3946 f,
3947 size_binop (PLUS_EXPR,
3948 offset,
956d9305 3949 field_offset),
c20118a8 3950 offsets,
5cdba4ff 3951 max_offset,
c20118a8
MM
3952 /*vbases_p=*/1);
3953 if (r)
3954 return r;
3955 }
5c24fba6 3956 }
c20118a8
MM
3957 else if (TREE_CODE (type) == ARRAY_TYPE)
3958 {
5ec1192e 3959 tree element_type = strip_array_types (type);
c20118a8
MM
3960 tree domain = TYPE_DOMAIN (type);
3961 tree index;
5c24fba6 3962
5ec1192e
MM
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
c20118a8 3968 /* Step through each of the elements in the array. */
17bbb839
MM
3969 for (index = size_zero_node;
3970 /* G++ 3.2 had an off-by-one error here. */
c8094d83 3971 (abi_version_at_least (2)
807e902e
KZ
3972 ? !tree_int_cst_lt (TYPE_MAX_VALUE (domain), index)
3973 : tree_int_cst_lt (index, TYPE_MAX_VALUE (domain)));
c20118a8
MM
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,
5cdba4ff 3980 max_offset,
c20118a8
MM
3981 /*vbases_p=*/1);
3982 if (r)
3983 return r;
c8094d83 3984 offset = size_binop (PLUS_EXPR, offset,
c20118a8 3985 TYPE_SIZE_UNIT (TREE_TYPE (type)));
5cdba4ff
MM
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. */
807e902e 3989 if (max_offset && tree_int_cst_lt (max_offset, offset))
5cdba4ff 3990 break;
c20118a8
MM
3991 }
3992 }
3993
3994 return 0;
3995}
3996
c0572427
MM
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
c5a35c3c
MM
3999 is being placed at OFFSET; otherwise, it is a base class that is
4000 being placed at OFFSET. */
c20118a8
MM
4001
4002static void
c8094d83 4003record_subobject_offsets (tree type,
0cbd7506
MS
4004 tree offset,
4005 splay_tree offsets,
c5a35c3c 4006 bool is_data_member)
c20118a8 4007{
c5a35c3c 4008 tree max_offset;
c0572427
MM
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
c5a35c3c
MM
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). */
3db45ab5 4022 if (is_data_member
c0572427 4023 || !is_empty_class (BINFO_TYPE (type)))
c5a35c3c
MM
4024 max_offset = sizeof_biggest_empty_class;
4025 else
4026 max_offset = NULL_TREE;
c20118a8 4027 walk_subobject_offsets (type, record_subobject_offset, offset,
c5a35c3c 4028 offsets, max_offset, is_data_member);
5c24fba6
MM
4029}
4030
838dfd8a
KH
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,
c20118a8 4033 virtual bases of TYPE are examined. */
9785e4b1
MM
4034
4035static int
94edc4ab 4036layout_conflict_p (tree type,
0cbd7506
MS
4037 tree offset,
4038 splay_tree offsets,
4039 int vbases_p)
9785e4b1 4040{
5cdba4ff
MM
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
c20118a8 4051 return walk_subobject_offsets (type, check_subobject_offset, offset,
5cdba4ff
MM
4052 offsets, (tree) (max_node->key),
4053 vbases_p);
9785e4b1
MM
4054}
4055
5c24fba6
MM
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
c20118a8 4058 binfo corresponding to the base subobject, OFFSETS maps offsets to
17bbb839
MM
4059 types already located at those offsets. This function determines
4060 the position of the DECL. */
5c24fba6
MM
4061
4062static void
c8094d83
MS
4063layout_nonempty_base_or_field (record_layout_info rli,
4064 tree decl,
4065 tree binfo,
17bbb839 4066 splay_tree offsets)
5c24fba6 4067{
c20118a8 4068 tree offset = NULL_TREE;
17bbb839
MM
4069 bool field_p;
4070 tree type;
c8094d83 4071
17bbb839
MM
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 }
c20118a8 4086
5c24fba6
MM
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 {
defd0dea 4092 struct record_layout_info_s old_rli = *rli;
5c24fba6 4093
770ae6cc
RK
4094 /* Place this field. */
4095 place_field (rli, decl);
da3d4dfa 4096 offset = byte_position (decl);
1e2e9f54 4097
5c24fba6
MM
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.
1e2e9f54 4100 For example, consider:
c8094d83 4101
1e2e9f54
MM
4102 struct S {};
4103 struct T : public S { int i; };
4104 struct U : public S, public T {};
c8094d83 4105
5c24fba6
MM
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
838dfd8a 4110 empty class, have nonzero size, any overlap can happen only
5c24fba6
MM
4111 with a direct or indirect base-class -- it can't happen with
4112 a data member. */
1e2e9f54
MM
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;
7ba539c6
MM
4117 /* G++ 3.2 did not check for overlaps when placing a non-empty
4118 virtual base. */
809e3e7f 4119 if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
7ba539c6 4120 break;
c8094d83 4121 if (layout_conflict_p (field_p ? type : binfo, offset,
ff944b49 4122 offsets, field_p))
5c24fba6 4123 {
5c24fba6
MM
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. */
770ae6cc
RK
4127 *rli = old_rli;
4128
c20118a8 4129 /* Bump up by the alignment required for the type. */
770ae6cc 4130 rli->bitpos
c8094d83
MS
4131 = size_binop (PLUS_EXPR, rli->bitpos,
4132 bitsize_int (binfo
c20118a8
MM
4133 ? CLASSTYPE_ALIGN (type)
4134 : TYPE_ALIGN (type)));
770ae6cc 4135 normalize_rli (rli);
5c24fba6
MM
4136 }
4137 else
4138 /* There was no conflict. We're done laying out this field. */
4139 break;
4140 }
c20118a8 4141
623fe76a 4142 /* Now that we know where it will be placed, update its
c20118a8
MM
4143 BINFO_OFFSET. */
4144 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
90024bdc 4145 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
17bbb839
MM
4146 this point because their BINFO_OFFSET is copied from another
4147 hierarchy. Therefore, we may not need to add the entire
4148 OFFSET. */
c8094d83 4149 propagate_binfo_offsets (binfo,
db3927fb
AH
4150 size_diffop_loc (input_location,
4151 convert (ssizetype, offset),
c8094d83 4152 convert (ssizetype,
dbbf88d1 4153 BINFO_OFFSET (binfo))));
5c24fba6
MM
4154}
4155
90024bdc 4156/* Returns true if TYPE is empty and OFFSET is nonzero. */
7ba539c6
MM
4157
4158static int
4159empty_base_at_nonzero_offset_p (tree type,
4160 tree offset,
12308bc6 4161 splay_tree /*offsets*/)
7ba539c6
MM
4162{
4163 return is_empty_class (type) && !integer_zerop (offset);
4164}
4165
9785e4b1 4166/* Layout the empty base BINFO. EOC indicates the byte currently just
ec386958 4167 past the end of the class, and should be correctly aligned for a
c20118a8 4168 class of the type indicated by BINFO; OFFSETS gives the offsets of
623fe76a 4169 the empty bases allocated so far. T is the most derived
838dfd8a 4170 type. Return nonzero iff we added it at the end. */
9785e4b1 4171
06d9f09f 4172static bool
d9d9dbc0
JM
4173layout_empty_base (record_layout_info rli, tree binfo,
4174 tree eoc, splay_tree offsets)
9785e4b1 4175{
ec386958 4176 tree alignment;
9785e4b1 4177 tree basetype = BINFO_TYPE (binfo);
06d9f09f 4178 bool atend = false;
956d9305 4179
9785e4b1 4180 /* This routine should only be used for empty classes. */
50bc768d 4181 gcc_assert (is_empty_class (basetype));
1b50716d 4182 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
9785e4b1 4183
3075b327
NS
4184 if (!integer_zerop (BINFO_OFFSET (binfo)))
4185 {
4186 if (abi_version_at_least (2))
4187 propagate_binfo_offsets
db3927fb
AH
4188 (binfo, size_diffop_loc (input_location,
4189 size_zero_node, BINFO_OFFSET (binfo)));
74fa0285
GDR
4190 else
4191 warning (OPT_Wabi,
3db45ab5 4192 "offset of empty base %qT may not be ABI-compliant and may"
3075b327
NS
4193 "change in a future version of GCC",
4194 BINFO_TYPE (binfo));
4195 }
c8094d83 4196
9785e4b1
MM
4197 /* This is an empty base class. We first try to put it at offset
4198 zero. */
ff944b49 4199 if (layout_conflict_p (binfo,
c20118a8 4200 BINFO_OFFSET (binfo),
c8094d83 4201 offsets,
c20118a8 4202 /*vbases_p=*/0))
9785e4b1
MM
4203 {
4204 /* That didn't work. Now, we move forward from the next
4205 available spot in the class. */
06d9f09f 4206 atend = true;
dbbf88d1 4207 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
c8094d83 4208 while (1)
9785e4b1 4209 {
ff944b49 4210 if (!layout_conflict_p (binfo,
c8094d83 4211 BINFO_OFFSET (binfo),
c20118a8
MM
4212 offsets,
4213 /*vbases_p=*/0))
9785e4b1
MM
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. */
dbbf88d1 4218 propagate_binfo_offsets (binfo, alignment);
9785e4b1
MM
4219 }
4220 }
d9d9dbc0
JM
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
06d9f09f 4230 return atend;
9785e4b1
MM
4231}
4232
78dcd41a 4233/* Layout the base given by BINFO in the class indicated by RLI.
58731fd1 4234 *BASE_ALIGN is a running maximum of the alignments of
17bbb839
MM
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
c8094d83 4238 *NEXT_FIELD, unless BINFO is for an empty base class.
5c24fba6 4239
17bbb839
MM
4240 Returns the location at which the next field should be inserted. */
4241
4242static tree *
58731fd1 4243build_base_field (record_layout_info rli, tree binfo,
17bbb839 4244 splay_tree offsets, tree *next_field)
d77249e7 4245{
17bbb839 4246 tree t = rli->t;
d77249e7 4247 tree basetype = BINFO_TYPE (binfo);
d77249e7 4248
d0f062fb 4249 if (!COMPLETE_TYPE_P (basetype))
d77249e7
MM
4250 /* This error is now reported in xref_tag, thus giving better
4251 location information. */
17bbb839 4252 return next_field;
c8094d83 4253
17bbb839
MM
4254 /* Place the base class. */
4255 if (!is_empty_class (basetype))
5c24fba6 4256 {
17bbb839
MM
4257 tree decl;
4258
5c24fba6
MM
4259 /* The containing class is non-empty because it has a non-empty
4260 base class. */
58731fd1 4261 CLASSTYPE_EMPTY_P (t) = 0;
c8094d83 4262
17bbb839 4263 /* Create the FIELD_DECL. */
c2255bc4
AH
4264 decl = build_decl (input_location,
4265 FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
17bbb839 4266 DECL_ARTIFICIAL (decl) = 1;
78e0d62b 4267 DECL_IGNORED_P (decl) = 1;
17bbb839 4268 DECL_FIELD_CONTEXT (decl) = t;
1ad8aeeb
DG
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. */
910ad8de 4283 DECL_CHAIN (decl) = *next_field;
1ad8aeeb 4284 *next_field = decl;
910ad8de 4285 next_field = &DECL_CHAIN (decl);
1ad8aeeb 4286 }
5c24fba6
MM
4287 }
4288 else
ec386958 4289 {
17bbb839 4290 tree eoc;
7ba539c6 4291 bool atend;
ec386958
MM
4292
4293 /* On some platforms (ARM), even empty classes will not be
4294 byte-aligned. */
db3927fb
AH
4295 eoc = round_up_loc (input_location,
4296 rli_size_unit_so_far (rli),
17bbb839 4297 CLASSTYPE_ALIGN_UNIT (basetype));
d9d9dbc0 4298 atend = layout_empty_base (rli, binfo, eoc, offsets);
7ba539c6
MM
4299 /* A nearly-empty class "has no proper base class that is empty,
4300 not morally virtual, and at an offset other than zero." */
809e3e7f 4301 if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
7ba539c6
MM
4302 {
4303 if (atend)
4304 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
c5a35c3c 4305 /* The check above (used in G++ 3.2) is insufficient because
7ba539c6 4306 an empty class placed at offset zero might itself have an
90024bdc 4307 empty base at a nonzero offset. */
c8094d83 4308 else if (walk_subobject_offsets (basetype,
7ba539c6
MM
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;
74fa0285
GDR
4317 else
4318 warning (OPT_Wabi,
3db45ab5 4319 "class %qT will be considered nearly empty in a "
7ba539c6
MM
4320 "future version of GCC", t);
4321 }
4322 }
c8094d83 4323
17bbb839
MM
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. */
58731fd1
MM
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. */
ec386958 4334 }
5c24fba6 4335
5c24fba6 4336 /* Record the offsets of BINFO and its base subobjects. */
ff944b49 4337 record_subobject_offsets (binfo,
c20118a8 4338 BINFO_OFFSET (binfo),
c8094d83 4339 offsets,
c5a35c3c 4340 /*is_data_member=*/false);
17bbb839
MM
4341
4342 return next_field;
d77249e7
MM
4343}
4344
c20118a8 4345/* Layout all of the non-virtual base classes. Record empty
17bbb839
MM
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. */
607cf131 4350
17bbb839 4351static void
58731fd1 4352build_base_fields (record_layout_info rli,
17bbb839 4353 splay_tree offsets, tree *next_field)
607cf131
MM
4354{
4355 /* Chain to hold all the new FIELD_DECLs which stand in for base class
4356 subobjects. */
17bbb839 4357 tree t = rli->t;
604a3205 4358 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
5c24fba6 4359 int i;
607cf131 4360
3461fba7 4361 /* The primary base class is always allocated first. */
17bbb839
MM
4362 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4363 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
58731fd1 4364 offsets, next_field);
d77249e7
MM
4365
4366 /* Now allocate the rest of the bases. */
607cf131
MM
4367 for (i = 0; i < n_baseclasses; ++i)
4368 {
d77249e7 4369 tree base_binfo;
607cf131 4370
604a3205 4371 base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
911a71a7 4372
3461fba7
NS
4373 /* The primary base was already allocated above, so we don't
4374 need to allocate it again here. */
17bbb839 4375 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
607cf131
MM
4376 continue;
4377
dbbf88d1
NS
4378 /* Virtual bases are added at the end (a primary virtual base
4379 will have already been added). */
809e3e7f 4380 if (BINFO_VIRTUAL_P (base_binfo))
607cf131
MM
4381 continue;
4382
58731fd1 4383 next_field = build_base_field (rli, base_binfo,
17bbb839 4384 offsets, next_field);
607cf131 4385 }
607cf131
MM
4386}
4387
58010b57
MM
4388/* Go through the TYPE_METHODS of T issuing any appropriate
4389 diagnostics, figuring out which methods override which other
3ef397c1 4390 methods, and so forth. */
58010b57
MM
4391
4392static void
94edc4ab 4393check_methods (tree t)
58010b57
MM
4394{
4395 tree x;
58010b57 4396
910ad8de 4397 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
58010b57 4398 {
58010b57 4399 check_for_override (x, t);
fee7654e 4400 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
dee15844 4401 error ("initializer specified for non-virtual method %q+D", x);
58010b57
MM
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 {
3ef397c1 4406 TYPE_POLYMORPHIC_P (t) = 1;
fee7654e 4407 if (DECL_PURE_VIRTUAL_P (x))
9771b263 4408 vec_safe_push (CLASSTYPE_PURE_VIRTUALS (t), x);
58010b57 4409 }
46408846
JM
4410 /* All user-provided destructors are non-trivial.
4411 Constructors and assignment ops are handled in
4412 grok_special_member_properties. */
20f2653e 4413 if (DECL_DESTRUCTOR_P (x) && user_provided_p (x))
9f4faeae 4414 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
58010b57 4415 }
58010b57
MM
4416}
4417
db9b2174
MM
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
94edc4ab 4423build_clone (tree fn, tree name)
db9b2174
MM
4424{
4425 tree parms;
4426 tree clone;
4427
4428 /* Copy the function. */
4429 clone = copy_decl (fn);
db9b2174
MM
4430 /* Reset the function name. */
4431 DECL_NAME (clone) = name;
71cb9286 4432 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
b97e8a14
JM
4433 /* Remember where this function came from. */
4434 DECL_ABSTRACT_ORIGIN (clone) = fn;
4435 /* Make it easy to find the CLONE given the FN. */
910ad8de
NF
4436 DECL_CHAIN (clone) = DECL_CHAIN (fn);
4437 DECL_CHAIN (fn) = clone;
b97e8a14
JM
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;
db9b2174
MM
4451 /* There's no pending inline data for this function. */
4452 DECL_PENDING_INLINE_INFO (clone) = NULL;
4453 DECL_PENDING_INLINE_P (clone) = 0;
db9b2174 4454
298d6f60
MM
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
4e7512c9 4463 /* If there was an in-charge parameter, drop it from the function
db9b2174
MM
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);
e0fff4b3
JM
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);
3ec6bad3
MM
4482 /* If this is subobject constructor or destructor, add the vtt
4483 parameter. */
c8094d83 4484 TREE_TYPE (clone)
43dc123f
MM
4485 = build_method_type_directly (basetype,
4486 TREE_TYPE (TREE_TYPE (clone)),
4487 parmtypes);
db9b2174
MM
4488 if (exceptions)
4489 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
4490 exceptions);
c8094d83 4491 TREE_TYPE (clone)
e9525111
MM
4492 = cp_build_type_attribute_variant (TREE_TYPE (clone),
4493 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
db9b2174
MM
4494 }
4495
b97e8a14
JM
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 {
910ad8de
NF
4501 DECL_CHAIN (DECL_ARGUMENTS (clone))
4502 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
b97e8a14
JM
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))
db9b2174 4507 {
b97e8a14
JM
4508 if (DECL_NEEDS_VTT_PARM_P (clone))
4509 DECL_HAS_VTT_PARM_P (clone) = 1;
4510 else
db9b2174 4511 {
910ad8de
NF
4512 DECL_CHAIN (DECL_ARGUMENTS (clone))
4513 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
b97e8a14 4514 DECL_HAS_VTT_PARM_P (clone) = 0;
3ec6bad3 4515 }
b97e8a14 4516 }
3ec6bad3 4517
910ad8de 4518 for (parms = DECL_ARGUMENTS (clone); parms; parms = DECL_CHAIN (parms))
b97e8a14
JM
4519 {
4520 DECL_CONTEXT (parms) = clone;
4521 cxx_dup_lang_specific_decl (parms);
db9b2174
MM
4522 }
4523
db9b2174 4524 /* Create the RTL for this function. */
245763e3 4525 SET_DECL_RTL (clone, NULL);
0e6df31e 4526 rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
c8094d83 4527
b97e8a14
JM
4528 if (pch_file)
4529 note_decl_for_pch (clone);
db9b2174 4530
b97e8a14
JM
4531 return clone;
4532}
db9b2174 4533
b97e8a14
JM
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;
db9b2174
MM
4562 }
4563
b97e8a14
JM
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;
db9b2174
MM
4569}
4570
4571/* Produce declarations for all appropriate clones of FN. If
838dfd8a 4572 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
db9b2174
MM
4573 CLASTYPE_METHOD_VEC as well. */
4574
4575void
94edc4ab 4576clone_function_decl (tree fn, int update_method_vec_p)
db9b2174
MM
4577{
4578 tree clone;
4579
c00996a3 4580 /* Avoid inappropriate cloning. */
910ad8de
NF
4581 if (DECL_CHAIN (fn)
4582 && DECL_CLONED_FUNCTION_P (DECL_CHAIN (fn)))
c00996a3
JM
4583 return;
4584
298d6f60 4585 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
db9b2174 4586 {
298d6f60
MM
4587 /* For each constructor, we need two variants: an in-charge version
4588 and a not-in-charge version. */
db9b2174
MM
4589 clone = build_clone (fn, complete_ctor_identifier);
4590 if (update_method_vec_p)
b2a9b208 4591 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
db9b2174
MM
4592 clone = build_clone (fn, base_ctor_identifier);
4593 if (update_method_vec_p)
b2a9b208 4594 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
db9b2174
MM
4595 }
4596 else
298d6f60 4597 {
50bc768d 4598 gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
298d6f60 4599
3ec6bad3 4600 /* For each destructor, we need three variants: an in-charge
298d6f60 4601 version, a not-in-charge version, and an in-charge deleting
4e7512c9
MM
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
c8094d83 4605 function table.
52682a1b 4606
0cbd7506 4607 For a non-virtual destructor, we do not build a deleting
52682a1b
MM
4608 destructor. */
4609 if (DECL_VIRTUAL_P (fn))
4610 {
4611 clone = build_clone (fn, deleting_dtor_identifier);
4612 if (update_method_vec_p)
b2a9b208 4613 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
52682a1b 4614 }
4e7512c9 4615 clone = build_clone (fn, complete_dtor_identifier);
298d6f60 4616 if (update_method_vec_p)
b2a9b208 4617 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
298d6f60
MM
4618 clone = build_clone (fn, base_dtor_identifier);
4619 if (update_method_vec_p)
b2a9b208 4620 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
298d6f60 4621 }
5daf7c0a
JM
4622
4623 /* Note that this is an abstract function that is never emitted. */
4624 DECL_ABSTRACT (fn) = 1;
db9b2174
MM
4625}
4626
5f6eeeb3
NS
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
00a17e31 4632 clones. */
5f6eeeb3
NS
4633
4634void
94edc4ab 4635adjust_clone_args (tree decl)
5f6eeeb3
NS
4636{
4637 tree clone;
c8094d83 4638
910ad8de
NF
4639 for (clone = DECL_CHAIN (decl); clone && DECL_CLONED_FUNCTION_P (clone);
4640 clone = DECL_CHAIN (clone))
5f6eeeb3
NS
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;
c8094d83 4647
00a17e31 4648 /* Skip the 'this' parameter. */
5f6eeeb3
NS
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);
c8094d83 4656
5f6eeeb3
NS
4657 clone_parms = orig_clone_parms;
4658 if (DECL_HAS_VTT_PARM_P (clone))
4659 clone_parms = TREE_CHAIN (clone_parms);
c8094d83 4660
5f6eeeb3
NS
4661 for (decl_parms = orig_decl_parms; decl_parms;
4662 decl_parms = TREE_CHAIN (decl_parms),
4663 clone_parms = TREE_CHAIN (clone_parms))
4664 {
50bc768d
NS
4665 gcc_assert (same_type_p (TREE_TYPE (decl_parms),
4666 TREE_TYPE (clone_parms)));
c8094d83 4667
5f6eeeb3
NS
4668 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
4669 {
4670 /* A default parameter has been added. Adjust the
00a17e31 4671 clone's parameters. */
5f6eeeb3 4672 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3c3905fc 4673 tree attrs = TYPE_ATTRIBUTES (TREE_TYPE (clone));
5f6eeeb3
NS
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 }
43dc123f
MM
4686 type = build_method_type_directly (basetype,
4687 TREE_TYPE (TREE_TYPE (clone)),
4688 clone_parms);
5f6eeeb3
NS
4689 if (exceptions)
4690 type = build_exception_variant (type, exceptions);
3c3905fc
JM
4691 if (attrs)
4692 type = cp_build_type_attribute_variant (type, attrs);
5f6eeeb3 4693 TREE_TYPE (clone) = type;
c8094d83 4694
5f6eeeb3
NS
4695 clone_parms = NULL_TREE;
4696 break;
4697 }
4698 }
50bc768d 4699 gcc_assert (!clone_parms);
5f6eeeb3
NS
4700 }
4701}
4702
db9b2174
MM
4703/* For each of the constructors and destructors in T, create an
4704 in-charge and not-in-charge variant. */
4705
4706static void
94edc4ab 4707clone_constructors_and_destructors (tree t)
db9b2174
MM
4708{
4709 tree fns;
4710
db9b2174
MM
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
db9b2174
MM
4716 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4717 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
298d6f60
MM
4718 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4719 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
db9b2174
MM
4720}
4721
593a0835
PC
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 {
b15ea309 4729 tree eh_spec = unevaluated_noexcept_spec ();
593a0835
PC
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{
593a0835
PC
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
a5e90b2a 4748 for (tree fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
593a0835
PC
4749 deduce_noexcept_on_destructor (OVL_CURRENT (fns));
4750}
4751
0a35513e
AH
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))
00a42fb3
AH
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 }
0a35513e
AH
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
8c95264b
MLI
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)
c2b58ba2
JM
4903 && (TREE_CODE (fn) == TEMPLATE_DECL
4904 || (skip_artificial_parms_for (fn, DECL_ARGUMENTS (fn))
4905 != NULL_TREE)))
8c95264b
MLI
4906 return true;
4907 }
4908
4909 return false;
4910}
4911
6ad86a5b
FC
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
b87d79e6 4940/* Returns true iff FN is a user-provided function, i.e. user-declared
20f2653e
JM
4941 and not defaulted at its first declaration; or explicit, private,
4942 protected, or non-const. */
b87d79e6 4943
20f2653e 4944bool
b87d79e6
JM
4945user_provided_p (tree fn)
4946{
4947 if (TREE_CODE (fn) == TEMPLATE_DECL)
4948 return true;
4949 else
4950 return (!DECL_ARTIFICIAL (fn)
eca7fc57
JM
4951 && !(DECL_INITIALIZED_IN_CLASS_P (fn)
4952 && (DECL_DEFAULTED_FN (fn) || DECL_DELETED_FN (fn))));
b87d79e6
JM
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
fd97a96a
JM
4962 if (!CLASS_TYPE_P (t))
4963 return false;
4964
b87d79e6
JM
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{
71b8cb01 4984 tree fns;
b87d79e6
JM
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);
7ad8d488 4992 if (TREE_CODE (fn) == FUNCTION_DECL
71b8cb01
JM
4993 && user_provided_p (fn)
4994 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)))
4995 return true;
b87d79e6
JM
4996 }
4997
4998 return false;
4999}
5000
32bfcf80
JM
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
6132bdd7
JM
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
fd3faf2b 5073/* Returns true iff for class T, a trivial synthesized default constructor
0930cc0e
JM
5074 would be constexpr. */
5075
5076bool
fd3faf2b 5077trivial_default_constructor_is_constexpr (tree t)
0930cc0e 5078{
fd3faf2b 5079 /* A defaulted trivial default constructor is constexpr
0930cc0e 5080 if there is nothing to initialize. */
fd3faf2b 5081 gcc_assert (!TYPE_HAS_COMPLEX_DFLT (t));
0930cc0e
JM
5082 return is_really_empty_class (t);
5083}
5084
91ea6df3
GDR
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))
69f36ba6
JM
5093 {
5094 /* The caller should have stripped an enclosing array. */
5095 gcc_assert (TREE_CODE (t) != ARRAY_TYPE);
5096 return false;
5097 }
0930cc0e 5098 if (CLASSTYPE_LAZY_DEFAULT_CTOR (t))
fd3faf2b
JM
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 }
f7d042e2 5105 fns = locate_ctor (t);
91ea6df3
GDR
5106 return (fns && DECL_DECLARED_CONSTEXPR_P (fns));
5107}
5108
46408846
JM
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
ac177431
JM
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
fa4ba4af 5160 for (fns = lookup_fnfields_slot_nolazy (t, ansi_assopname (NOP_EXPR));
ac177431
JM
5161 fns; fns = OVL_NEXT (fns))
5162 if (move_fn_p (OVL_CURRENT (fns)))
5163 return true;
5164
5165 return false;
5166}
5167
a2e70335
JM
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
fa4ba4af 5205 for (fns = lookup_fnfields_slot_nolazy (t, ansi_assopname (NOP_EXPR));
a2e70335
JM
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
95552437 5216/* Nonzero if we need to build up a constructor call when initializing an
eca7fc57 5217 object of this class, either because it has a user-declared constructor
95552437
JM
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);
eca7fc57
JM
5233 if (!CLASS_TYPE_P (inner) || ANON_AGGR_TYPE_P (inner))
5234 return false;
5235 if (!TYPE_HAS_DEFAULT_CONSTRUCTOR (inner))
5236 return true;
83f31d8d
JM
5237 if (cxx_dialect < cxx11)
5238 return false;
eca7fc57
JM
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;
83f31d8d
JM
5264 if (cxx_dialect < cxx11)
5265 return false;
eca7fc57
JM
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;
95552437
JM
5277}
5278
58010b57
MM
5279/* Remove all zero-width bit-fields from T. */
5280
5281static void
94edc4ab 5282remove_zero_width_bit_fields (tree t)
58010b57
MM
5283{
5284 tree *fieldsp;
5285
c8094d83 5286 fieldsp = &TYPE_FIELDS (t);
58010b57
MM
5287 while (*fieldsp)
5288 {
5289 if (TREE_CODE (*fieldsp) == FIELD_DECL
c8094d83 5290 && DECL_C_BIT_FIELD (*fieldsp)
84894f85
DS
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)))
910ad8de 5297 *fieldsp = DECL_CHAIN (*fieldsp);
58010b57 5298 else
910ad8de 5299 fieldsp = &DECL_CHAIN (*fieldsp);
58010b57
MM
5300 }
5301}
5302
dbc957f1
MM
5303/* Returns TRUE iff we need a cookie when dynamically allocating an
5304 array whose elements have the indicated class TYPE. */
5305
5306static bool
94edc4ab 5307type_requires_array_cookie (tree type)
dbc957f1
MM
5308{
5309 tree fns;
18fee3ee 5310 bool has_two_argument_delete_p = false;
dbc957f1 5311
50bc768d 5312 gcc_assert (CLASS_TYPE_P (type));
dbc957f1
MM
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. */
c8094d83 5324 fns = lookup_fnfields (TYPE_BINFO (type),
dbc957f1
MM
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. */
50ad9642 5332 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
dbc957f1
MM
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;
4b8cb94c
SM
5344 /* Do not consider this function if its second argument is an
5345 ellipsis. */
5346 if (!second_parm)
5347 continue;
dbc957f1
MM
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
c79154c4 5352 && same_type_p (TREE_VALUE (second_parm), size_type_node))
dbc957f1
MM
5353 has_two_argument_delete_p = true;
5354 }
5355
5356 return has_two_argument_delete_p;
5357}
5358
3b49d762
GDR
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{
0515f4d2
JM
5370 tree fn;
5371
604b2bfc 5372 if (cxx_dialect < cxx11
b198484e 5373 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
3b49d762
GDR
5374 CLASSTYPE_LITERAL_P (t) = false;
5375 else if (CLASSTYPE_LITERAL_P (t) && !TYPE_HAS_TRIVIAL_DFLT (t)
b198484e 5376 && CLASSTYPE_NON_AGGREGATE (t)
3b49d762
GDR
5377 && !TYPE_HAS_CONSTEXPR_CTOR (t))
5378 CLASSTYPE_LITERAL_P (t) = false;
0515f4d2
JM
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;
b432106b 5388 if (!DECL_GENERATED_P (fn))
f732fa7b
JM
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 }
0515f4d2 5394 }
3b49d762
GDR
5395}
5396
f732fa7b
JM
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))
fd3faf2b
JM
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))
efff2fb4
PC
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 }
fd3faf2b 5448 }
f732fa7b
JM
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
607cf131
MM
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
c32097d8 5484 CLASSTYPE_NON_LAYOUT_POD_T) for T. This routine works purely at the C++
607cf131
MM
5485 level: i.e., independently of the ABI in use. */
5486
5487static void
58731fd1 5488check_bases_and_members (tree t)
607cf131 5489{
607cf131
MM
5490 /* Nonzero if the implicitly generated copy constructor should take
5491 a non-const reference argument. */
5492 int cant_have_const_ctor;
78dcd41a 5493 /* Nonzero if the implicitly generated assignment operator
607cf131
MM
5494 should take a non-const reference argument. */
5495 int no_const_asn_ref;
5496 tree access_decls;
b87d79e6
JM
5497 bool saved_complex_asn_ref;
5498 bool saved_nontrivial_dtor;
20f2653e 5499 tree fn;
607cf131 5500
f585f02f
JM
5501 /* Pick up any abi_tags from our template arguments before checking. */
5502 inherit_targ_abi_tags (t);
5503
607cf131
MM
5504 /* By default, we use const reference arguments and generate default
5505 constructors. */
607cf131
MM
5506 cant_have_const_ctor = 0;
5507 no_const_asn_ref = 0;
5508
00a17e31 5509 /* Check all the base-classes. */
e5e459bf 5510 check_bases (t, &cant_have_const_ctor,
10746f37 5511 &no_const_asn_ref);
607cf131 5512
52d95c21
JM
5513 /* Deduce noexcept on destructors. This needs to happen after we've set
5514 triviality flags appropriately for our bases. */
604b2bfc 5515 if (cxx_dialect >= cxx11)
52d95c21
JM
5516 deduce_noexcept_on_destructors (t);
5517
9f4faeae
MM
5518 /* Check all the method declarations. */
5519 check_methods (t);
5520
b87d79e6
JM
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. */
066ec0a4 5524 saved_complex_asn_ref = TYPE_HAS_COMPLEX_COPY_ASSIGN (t);
b87d79e6
JM
5525 saved_nontrivial_dtor = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
5526
9f4faeae
MM
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. */
58731fd1 5531 check_field_decls (t, &access_decls,
607cf131 5532 &cant_have_const_ctor,
10746f37 5533 &no_const_asn_ref);
607cf131 5534
bbd15aac
MM
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))
f9c528ea
MM
5538 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
5539
607cf131
MM
5540 /* Do some bookkeeping that will guide the generation of implicitly
5541 declared member functions. */
066ec0a4 5542 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
ac177431 5543 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
0fcedd9c 5544 /* We need to call a constructor for this class if it has a
b87d79e6 5545 user-provided constructor, or if the default constructor is going
0fcedd9c
JM
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.) */
607cf131 5549 TYPE_NEEDS_CONSTRUCTING (t)
b87d79e6 5550 |= (type_has_user_provided_constructor (t) || TYPE_CONTAINS_VPTR_P (t));
0fcedd9c
JM
5551 /* [dcl.init.aggr]
5552
b87d79e6 5553 An aggregate is an array or a class with no user-provided
0fcedd9c
JM
5554 constructors ... and no virtual functions.
5555
5556 Again, other conditions for being an aggregate are checked
5557 elsewhere. */
5775a06a 5558 CLASSTYPE_NON_AGGREGATE (t)
b87d79e6 5559 |= (type_has_user_provided_constructor (t) || TYPE_POLYMORPHIC_P (t));
c32097d8
JM
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)
c8094d83 5563 |= (CLASSTYPE_NON_AGGREGATE (t)
b87d79e6 5564 || saved_nontrivial_dtor || saved_complex_asn_ref);
c32097d8 5565 CLASSTYPE_NON_STD_LAYOUT (t) |= TYPE_CONTAINS_VPTR_P (t);
066ec0a4 5566 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
ac177431 5567 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
f782c65c 5568 TYPE_HAS_COMPLEX_DFLT (t) |= TYPE_CONTAINS_VPTR_P (t);
607cf131 5569
38f09da3 5570 /* Warn if a public base of a polymorphic type has an accessible
880a467b
NS
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 {
38f09da3
NS
5576 tree binfo = TYPE_BINFO (t);
5577 vec<tree, va_gc> *accesses = BINFO_BASE_ACCESSES (binfo);
5578 tree base_binfo;
880a467b
NS
5579 unsigned i;
5580
38f09da3 5581 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
880a467b
NS
5582 {
5583 tree basetype = TREE_TYPE (base_binfo);
5584
38f09da3
NS
5585 if ((*accesses)[i] == access_public_node
5586 && (TYPE_POLYMORPHIC_P (basetype) || warn_ecpp)
5587 && accessible_nvdtor_p (basetype))
880a467b
NS
5588 warning (OPT_Wnon_virtual_dtor,
5589 "base class %q#T has accessible non-virtual destructor",
5590 basetype);
5591 }
5592 }
5593
0fcedd9c
JM
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. */
c73d5dd9 5597 if (warn_uninitialized
0fcedd9c
JM
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
910ad8de 5607 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
0fcedd9c
JM
5608 {
5609 tree type;
5610
f315d618
JJ
5611 if (TREE_CODE (field) != FIELD_DECL
5612 || DECL_INITIAL (field) != NULL_TREE)
0fcedd9c
JM
5613 continue;
5614
5615 type = TREE_TYPE (field);
5616 if (TREE_CODE (type) == REFERENCE_TYPE)
c73d5dd9
MLI
5617 warning (OPT_Wuninitialized, "non-static reference %q+#D "
5618 "in class without a constructor", field);
0fcedd9c
JM
5619 else if (CP_TYPE_CONST_P (type)
5620 && (!CLASS_TYPE_P (type)
5621 || !TYPE_HAS_DEFAULT_CONSTRUCTOR (type)))
c73d5dd9
MLI
5622 warning (OPT_Wuninitialized, "non-static const member %q+#D "
5623 "in class without a constructor", field);
0fcedd9c
JM
5624 }
5625 }
5626
03fd3f84 5627 /* Synthesize any needed methods. */
85b5d65a 5628 add_implicitly_declared_members (t, &access_decls,
607cf131 5629 cant_have_const_ctor,
10746f37 5630 no_const_asn_ref);
607cf131 5631
20f2653e
JM
5632 /* Check defaulted declarations here so we have cant_have_const_ctor
5633 and don't need to worry about clones. */
910ad8de 5634 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
85b5d65a 5635 if (!DECL_ARTIFICIAL (fn) && DECL_DEFAULTED_IN_CLASS_P (fn))
20f2653e
JM
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);
20f2653e
JM
5650 }
5651 defaulted_late_check (fn);
5652 }
5653
d5f4eddd
JM
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;
54ca9930
JM
5659 TYPE_HAS_COMPLEX_DFLT (t) = 1;
5660 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
5661 CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 0;
d5f4eddd
JM
5662
5663 /* "This class type is not an aggregate." */
5664 CLASSTYPE_NON_AGGREGATE (t) = 1;
5665 }
5666
3b49d762
GDR
5667 /* Compute the 'literal type' property before we
5668 do anything with non-static member functions. */
5669 finalize_literal_type_property (t);
5670
db9b2174
MM
5671 /* Create the in-charge and not-in-charge variants of constructors
5672 and destructors. */
5673 clone_constructors_and_destructors (t);
5674
aa52c1ff
JM
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
607cf131
MM
5679 /* Build and sort the CLASSTYPE_METHOD_VEC. */
5680 finish_struct_methods (t);
dbc957f1
MM
5681
5682 /* Figure out whether or not we will need a cookie when dynamically
5683 allocating an array of this type. */
e2500fed 5684 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
dbc957f1 5685 = type_requires_array_cookie (t);
607cf131
MM
5686}
5687
3ef397c1 5688/* If T needs a pointer to its virtual function table, set TYPE_VFIELD
5c24fba6
MM
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
c35cce41 5691 is not added to the TYPE_FIELDS list; it is the caller's
e6858a84
NS
5692 responsibility to do that. Accumulate declared virtual functions
5693 on VIRTUALS_P. */
3ef397c1 5694
5c24fba6 5695static tree
94edc4ab 5696create_vtable_ptr (tree t, tree* virtuals_p)
3ef397c1
MM
5697{
5698 tree fn;
5699
e6858a84 5700 /* Collect the virtual functions declared in T. */
910ad8de 5701 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
e6858a84
NS
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);
c8094d83 5706
e6858a84
NS
5707 BV_FN (new_virtual) = fn;
5708 BV_DELTA (new_virtual) = integer_zero_node;
d1f05f93 5709 BV_VCALL_INDEX (new_virtual) = NULL_TREE;
3ef397c1 5710
e6858a84
NS
5711 TREE_CHAIN (new_virtual) = *virtuals_p;
5712 *virtuals_p = new_virtual;
5713 }
c8094d83 5714
da3d4dfa
MM
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
bbd15aac
MM
5717 new virtual function table if we're supposed to include vptrs in
5718 all classes that need them. */
e6858a84 5719 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
3ef397c1
MM
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
a692ad2e 5723 `vtable_entry_type (*)[N]' where N is the number of virtual
3ef397c1
MM
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
4639c5c6 5731 types. Thus, in a derived class destructor, where the base
3ef397c1 5732 class constructor was inlined, we could generate bad code for
c8094d83 5733 setting up the vtable pointer.
3ef397c1 5734
0cbd7506 5735 Therefore, we use one type for all vtable pointers. We still
3ef397c1
MM
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*! */
0abe00c5
NS
5740 tree field;
5741
c2255bc4
AH
5742 field = build_decl (input_location,
5743 FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
0abe00c5
NS
5744 DECL_VIRTUAL_P (field) = 1;
5745 DECL_ARTIFICIAL (field) = 1;
5746 DECL_FIELD_CONTEXT (field) = t;
5747 DECL_FCONTEXT (field) = t;
7c08df6c
JM
5748 if (TYPE_PACKED (t))
5749 DECL_PACKED (field) = 1;
c8094d83 5750
0abe00c5 5751 TYPE_VFIELD (t) = field;
c8094d83 5752
0abe00c5 5753 /* This class is non-empty. */
58731fd1 5754 CLASSTYPE_EMPTY_P (t) = 0;
3ef397c1 5755
0abe00c5 5756 return field;
3ef397c1 5757 }
5c24fba6
MM
5758
5759 return NULL_TREE;
3ef397c1
MM
5760}
5761
9d4c0187
MM
5762/* Add OFFSET to all base types of BINFO which is a base in the
5763 hierarchy dominated by T.
80fd5f48 5764
911a71a7 5765 OFFSET, which is a type offset, is number of bytes. */
80fd5f48
MM
5766
5767static void
dbbf88d1 5768propagate_binfo_offsets (tree binfo, tree offset)
80fd5f48 5769{
911a71a7
MM
5770 int i;
5771 tree primary_binfo;
fa743e8c 5772 tree base_binfo;
80fd5f48 5773
911a71a7
MM
5774 /* Update BINFO's offset. */
5775 BINFO_OFFSET (binfo)
c8094d83 5776 = convert (sizetype,
911a71a7
MM
5777 size_binop (PLUS_EXPR,
5778 convert (ssizetype, BINFO_OFFSET (binfo)),
5779 offset));
80fd5f48 5780
911a71a7
MM
5781 /* Find the primary base class. */
5782 primary_binfo = get_primary_binfo (binfo);
5783
fc6633e0 5784 if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
090ad434 5785 propagate_binfo_offsets (primary_binfo, offset);
c8094d83 5786
911a71a7
MM
5787 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
5788 downwards. */
fa743e8c 5789 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
80fd5f48 5790 {
090ad434
NS
5791 /* Don't do the primary base twice. */
5792 if (base_binfo == primary_binfo)
5793 continue;
911a71a7 5794
090ad434 5795 if (BINFO_VIRTUAL_P (base_binfo))
911a71a7
MM
5796 continue;
5797
dbbf88d1 5798 propagate_binfo_offsets (base_binfo, offset);
911a71a7 5799 }
9d4c0187
MM
5800}
5801
17bbb839 5802/* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
c20118a8
MM
5803 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
5804 empty subobjects of T. */
80fd5f48 5805
d2c5305b 5806static void
17bbb839 5807layout_virtual_bases (record_layout_info rli, splay_tree offsets)
80fd5f48 5808{
dbbf88d1 5809 tree vbase;
17bbb839 5810 tree t = rli->t;
eca7f13c 5811 bool first_vbase = true;
17bbb839 5812 tree *next_field;
9785e4b1 5813
604a3205 5814 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
9785e4b1
MM
5815 return;
5816
17bbb839
MM
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);
9785e4b1 5822#ifdef STRUCTURE_SIZE_BOUNDARY
17bbb839
MM
5823 /* Packed structures don't need to have minimum size. */
5824 if (! TYPE_PACKED (t))
fc555370 5825 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
9785e4b1 5826#endif
17bbb839
MM
5827 rli->offset = TYPE_SIZE_UNIT (t);
5828 rli->bitpos = bitsize_zero_node;
5829 rli->record_align = TYPE_ALIGN (t);
5830 }
80fd5f48 5831
17bbb839
MM
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)
910ad8de 5836 next_field = &DECL_CHAIN (*next_field);
80fd5f48 5837
9d4c0187 5838 /* Go through the virtual bases, allocating space for each virtual
3461fba7
NS
5839 base that is not already a primary base class. These are
5840 allocated in inheritance graph order. */
dbbf88d1 5841 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
c35cce41 5842 {
809e3e7f 5843 if (!BINFO_VIRTUAL_P (vbase))
1f84ec23 5844 continue;
eca7f13c 5845
9965d119 5846 if (!BINFO_PRIMARY_P (vbase))
c35cce41 5847 {
17bbb839
MM
5848 tree basetype = TREE_TYPE (vbase);
5849
c35cce41
MM
5850 /* This virtual base is not a primary base of any class in the
5851 hierarchy, so we have to add space for it. */
58731fd1 5852 next_field = build_base_field (rli, vbase,
17bbb839 5853 offsets, next_field);
9785e4b1 5854
eca7f13c
MM
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
c8094d83 5864 && (tree_int_cst_lt
17bbb839 5865 (size_binop (CEIL_DIV_EXPR,
db3927fb
AH
5866 round_up_loc (input_location,
5867 CLASSTYPE_SIZE (t),
17bbb839
MM
5868 CLASSTYPE_ALIGN (basetype)),
5869 bitsize_unit_node),
5870 BINFO_OFFSET (vbase))))
74fa0285 5871 warning (OPT_Wabi,
3db45ab5 5872 "offset of virtual base %qT is not ABI-compliant and "
0cbd7506 5873 "may change in a future version of GCC",
eca7f13c
MM
5874 basetype);
5875
eca7f13c 5876 first_vbase = false;
c35cce41
MM
5877 }
5878 }
80fd5f48
MM
5879}
5880
ba9a991f
MM
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
1ad8aeeb
DG
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)))
ba9a991f
MM
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
9785e4b1
MM
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. */
80fd5f48 5905
17bbb839 5906static tree
94edc4ab 5907end_of_class (tree t, int include_virtuals_p)
80fd5f48 5908{
17bbb839 5909 tree result = size_zero_node;
9771b263 5910 vec<tree, va_gc> *vbases;
ba9a991f 5911 tree binfo;
9ba5ff0f 5912 tree base_binfo;
ba9a991f 5913 tree offset;
9785e4b1 5914 int i;
80fd5f48 5915
fa743e8c
NS
5916 for (binfo = TYPE_BINFO (t), i = 0;
5917 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
9785e4b1 5918 {
9785e4b1 5919 if (!include_virtuals_p
fc6633e0
NS
5920 && BINFO_VIRTUAL_P (base_binfo)
5921 && (!BINFO_PRIMARY_P (base_binfo)
5922 || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
9785e4b1 5923 continue;
80fd5f48 5924
fa743e8c 5925 offset = end_of_base (base_binfo);
807e902e 5926 if (tree_int_cst_lt (result, offset))
17bbb839 5927 result = offset;
9785e4b1 5928 }
80fd5f48 5929
ba9a991f
MM
5930 /* G++ 3.2 did not check indirect virtual bases. */
5931 if (abi_version_at_least (2) && include_virtuals_p)
9ba5ff0f 5932 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
9771b263 5933 vec_safe_iterate (vbases, i, &base_binfo); i++)
ba9a991f 5934 {
9ba5ff0f 5935 offset = end_of_base (base_binfo);
807e902e 5936 if (tree_int_cst_lt (result, offset))
ba9a991f
MM
5937 result = offset;
5938 }
5939
9785e4b1 5940 return result;
80fd5f48
MM
5941}
5942
17bbb839 5943/* Warn about bases of T that are inaccessible because they are
78b45a24
MM
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
94edc4ab 5954warn_about_ambiguous_bases (tree t)
78b45a24
MM
5955{
5956 int i;
9771b263 5957 vec<tree, va_gc> *vbases;
17bbb839 5958 tree basetype;
58c42dc2 5959 tree binfo;
fa743e8c 5960 tree base_binfo;
78b45a24 5961
18e4be85
NS
5962 /* If there are no repeated bases, nothing can be ambiguous. */
5963 if (!CLASSTYPE_REPEATED_BASE_P (t))
5964 return;
c8094d83 5965
17bbb839 5966 /* Check direct bases. */
fa743e8c
NS
5967 for (binfo = TYPE_BINFO (t), i = 0;
5968 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
78b45a24 5969 {
fa743e8c 5970 basetype = BINFO_TYPE (base_binfo);
78b45a24 5971
22854930 5972 if (!uniquely_derived_from_p (basetype, t))
d4ee4d25 5973 warning (0, "direct base %qT inaccessible in %qT due to ambiguity",
17bbb839 5974 basetype, t);
78b45a24 5975 }
17bbb839
MM
5976
5977 /* Check for ambiguous virtual bases. */
5978 if (extra_warnings)
9ba5ff0f 5979 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
9771b263 5980 vec_safe_iterate (vbases, i, &binfo); i++)
17bbb839 5981 {
58c42dc2 5982 basetype = BINFO_TYPE (binfo);
c8094d83 5983
22854930
PC
5984 if (!uniquely_derived_from_p (basetype, t))
5985 warning (OPT_Wextra, "virtual base %qT inaccessible in %qT due "
5986 "to ambiguity", basetype, t);
17bbb839 5987 }
78b45a24
MM
5988}
5989
c20118a8
MM
5990/* Compare two INTEGER_CSTs K1 and K2. */
5991
5992static int
94edc4ab 5993splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
c20118a8
MM
5994{
5995 return tree_int_cst_compare ((tree) k1, (tree) k2);
5996}
5997
17bbb839
MM
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;
e3ccdd50 6005 tree rli_size;
17bbb839
MM
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. */
c8094d83 6012 eoc = end_of_class (rli->t,
17bbb839 6013 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
e3ccdd50
MM
6014 rli_size = rli_size_unit_so_far (rli);
6015 if (TREE_CODE (rli_size) == INTEGER_CST
807e902e 6016 && tree_int_cst_lt (rli_size, eoc))
17bbb839 6017 {
43fe31f6
MM
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. */
50bc768d
NS
6027 gcc_assert (tree_int_cst_equal
6028 (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
c8094d83
MS
6029 rli->bitpos
6030 = size_binop (PLUS_EXPR,
e3ccdd50
MM
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);
17bbb839
MM
6038 }
6039}
6040
2ef16140
MM
6041/* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
6042 BINFO_OFFSETs for all of the base-classes. Position the vtable
00a17e31 6043 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
607cf131 6044
2ef16140 6045static void
e93ee644 6046layout_class_type (tree t, tree *virtuals_p)
2ef16140 6047{
5c24fba6
MM
6048 tree non_static_data_members;
6049 tree field;
6050 tree vptr;
6051 record_layout_info rli;
c20118a8
MM
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;
c65cb8d1 6055 /* True if the last field laid out was a bit-field. */
eca7f13c 6056 bool last_field_was_bitfield = false;
17bbb839
MM
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;
5c24fba6
MM
6061
6062 /* Keep track of the first non-static data member. */
6063 non_static_data_members = TYPE_FIELDS (t);
6064
770ae6cc
RK
6065 /* Start laying out the record. */
6066 rli = start_record_layout (t);
534170eb 6067
fc6633e0
NS
6068 /* Mark all the primary bases in the hierarchy. */
6069 determine_primary_bases (t);
8026246f 6070
5c24fba6 6071 /* Create a pointer to our virtual function table. */
58731fd1 6072 vptr = create_vtable_ptr (t, virtuals_p);
5c24fba6 6073
3461fba7 6074 /* The vptr is always the first thing in the class. */
1f84ec23 6075 if (vptr)
5c24fba6 6076 {
910ad8de 6077 DECL_CHAIN (vptr) = TYPE_FIELDS (t);
17bbb839 6078 TYPE_FIELDS (t) = vptr;
910ad8de 6079 next_field = &DECL_CHAIN (vptr);
770ae6cc 6080 place_field (rli, vptr);
5c24fba6 6081 }
17bbb839
MM
6082 else
6083 next_field = &TYPE_FIELDS (t);
5c24fba6 6084
72a50ab0 6085 /* Build FIELD_DECLs for all of the non-virtual base-types. */
c8094d83 6086 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
c20118a8 6087 NULL, NULL);
58731fd1 6088 build_base_fields (rli, empty_base_offsets, next_field);
c8094d83 6089
5c24fba6 6090 /* Layout the non-static data members. */
910ad8de 6091 for (field = non_static_data_members; field; field = DECL_CHAIN (field))
5c24fba6 6092 {
01955e96
MM
6093 tree type;
6094 tree padding;
5c24fba6
MM
6095
6096 /* We still pass things that aren't non-static data members to
3b426391 6097 the back end, in case it wants to do something with them. */
5c24fba6
MM
6098 if (TREE_CODE (field) != FIELD_DECL)
6099 {
770ae6cc 6100 place_field (rli, field);
0154eaa8 6101 /* If the static data member has incomplete type, keep track
c8094d83 6102 of it so that it can be completed later. (The handling
0154eaa8
MM
6103 of pending statics in finish_record_layout is
6104 insufficient; consider:
6105
6106 struct S1;
6107 struct S2 { static S1 s1; };
c8094d83 6108
0cbd7506 6109 At this point, finish_record_layout will be called, but
0154eaa8 6110 S1 is still incomplete.) */
5a6ccc94 6111 if (VAR_P (field))
532b37d9
MM
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 }
5c24fba6
MM
6119 continue;
6120 }
6121
01955e96 6122 type = TREE_TYPE (field);
4e3bd7d5
VR
6123 if (type == error_mark_node)
6124 continue;
c8094d83 6125
1e099144 6126 padding = NULL_TREE;
01955e96
MM
6127
6128 /* If this field is a bit-field whose width is greater than its
3461fba7
NS
6129 type, then there are some special rules for allocating
6130 it. */
01955e96 6131 if (DECL_C_BIT_FIELD (field)
807e902e 6132 && tree_int_cst_lt (TYPE_SIZE (type), DECL_SIZE (field)))
01955e96 6133 {
09639a83 6134 unsigned int itk;
01955e96 6135 tree integer_type;
555456b1 6136 bool was_unnamed_p = false;
01955e96
MM
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)
64c31785 6142 if (integer_types[itk] != NULL_TREE
807e902e
KZ
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]))))
01955e96
MM
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. */
64c31785
KT
6152 do
6153 {
6154 --itk;
6155 integer_type = integer_types[itk];
6156 } while (itk > 0 && integer_type == NULL_TREE);
2d3e278d 6157
1e099144
MM
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)
807e902e 6162 || tree_int_cst_lt (TYPE_SIZE (integer_type), DECL_SIZE (field)))
2d3e278d 6163 {
1e099144
MM
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 {
74fa0285
GDR
6170 if (TREE_CODE (t) == UNION_TYPE)
6171 warning (OPT_Wabi, "size assigned to %qT may not be "
1e099144 6172 "ABI-compliant and may change in a future "
c8094d83 6173 "version of GCC",
1e099144
MM
6174 t);
6175 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
6176 TYPE_SIZE (integer_type));
6177 }
2d3e278d 6178 }
c9372112 6179#ifdef PCC_BITFIELD_TYPE_MATTERS
63e5f567
MM
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 }
c9372112 6191#endif
01955e96
MM
6192 DECL_SIZE (field) = TYPE_SIZE (integer_type);
6193 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
11cf4d18 6194 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
555456b1
MM
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);
29edb15c
MM
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. */
74fa0285 6210 warning (OPT_Wabi,
3db45ab5 6211 "the offset of %qD may not be ABI-compliant and may "
29edb15c 6212 "change in a future version of GCC", field);
01955e96 6213 }
555456b1
MM
6214 else
6215 layout_nonempty_base_or_field (rli, field, NULL_TREE,
6216 empty_base_offsets);
01955e96 6217
2003cd37
MM
6218 /* Remember the location of any empty classes in FIELD. */
6219 if (abi_version_at_least (2))
c8094d83 6220 record_subobject_offsets (TREE_TYPE (field),
2003cd37
MM
6221 byte_position(field),
6222 empty_base_offsets,
c5a35c3c 6223 /*is_data_member=*/true);
2003cd37 6224
eca7f13c
MM
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
c8094d83 6229 && DECL_C_BIT_FIELD (field)
660845bf
ZL
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)
eca7f13c
MM
6235 && !last_field_was_bitfield
6236 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
6237 DECL_FIELD_BIT_OFFSET (field),
6238 bitsize_unit_node)))
74fa0285 6239 warning (OPT_Wabi, "offset of %q+D is not ABI-compliant and may "
dee15844 6240 "change in a future version of GCC", field);
eca7f13c 6241
956d9305
MM
6242 /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
6243 offset of the field. */
c8094d83 6244 if (warn_abi
254d1a5a 6245 && !abi_version_at_least (2)
956d9305
MM
6246 && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
6247 byte_position (field))
6248 && contains_empty_class_p (TREE_TYPE (field)))
74fa0285 6249 warning (OPT_Wabi, "%q+D contains empty classes which may cause base "
dee15844
JM
6250 "classes to be placed at different locations in a "
6251 "future version of GCC", field);
956d9305 6252
38a4afee
MM
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
3db45ab5 6256 must be made aware of the width of "i", via its type.
38a4afee 6257
3db45ab5 6258 Because C++ does not have integer types of arbitrary width,
38a4afee
MM
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 {
38a4afee 6266 unsigned HOST_WIDE_INT width;
24030e4c 6267 tree ftype = TREE_TYPE (field);
ae7e9ddd 6268 width = tree_to_uhwi (DECL_SIZE (field));
38a4afee 6269 if (width != TYPE_PRECISION (ftype))
24030e4c
JJ
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),
a3360e77 6276 cp_type_quals (ftype));
24030e4c 6277 }
38a4afee
MM
6278 }
6279
01955e96
MM
6280 /* If we needed additional padding after this field, add it
6281 now. */
6282 if (padding)
6283 {
6284 tree padding_field;
6285
c2255bc4
AH
6286 padding_field = build_decl (input_location,
6287 FIELD_DECL,
01955e96 6288 NULL_TREE,
c8094d83 6289 char_type_node);
01955e96
MM
6290 DECL_BIT_FIELD (padding_field) = 1;
6291 DECL_SIZE (padding_field) = padding;
1e099144 6292 DECL_CONTEXT (padding_field) = t;
ea258926 6293 DECL_ARTIFICIAL (padding_field) = 1;
78e0d62b 6294 DECL_IGNORED_P (padding_field) = 1;
c20118a8 6295 layout_nonempty_base_or_field (rli, padding_field,
c8094d83 6296 NULL_TREE,
17bbb839 6297 empty_base_offsets);
01955e96 6298 }
eca7f13c
MM
6299
6300 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
5c24fba6
MM
6301 }
6302
17bbb839 6303 if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
e3ccdd50
MM
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. */
db3927fb 6308 rli->bitpos = round_up_loc (input_location, rli->bitpos, BITS_PER_UNIT);
e3ccdd50
MM
6309 normalize_rli (rli);
6310 }
17bbb839 6311
8a874cb4
MM
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);
58010b57 6316
3ef397c1
MM
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
17bbb839 6321 /* Create the version of T used for virtual bases. We do not use
9e1e64ec 6322 make_class_type for this version; this is an artificial type. For
17bbb839 6323 a POD type, we just reuse T. */
c32097d8 6324 if (CLASSTYPE_NON_LAYOUT_POD_P (t) || CLASSTYPE_EMPTY_P (t))
06ceef4e 6325 {
17bbb839 6326 base_t = make_node (TREE_CODE (t));
c8094d83 6327
58731fd1
MM
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)))
74fa0285 6336 warning (OPT_Wabi,
3db45ab5 6337 "layout of classes derived from empty class %qT "
58731fd1
MM
6338 "may change in a future version of GCC",
6339 t);
6340 }
6341 else
6342 {
6b99d1c0
MM
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);
c8094d83 6353 TYPE_SIZE_UNIT (base_t)
8a874cb4 6354 = size_binop (MAX_EXPR,
6b99d1c0
MM
6355 convert (sizetype,
6356 size_binop (CEIL_DIV_EXPR,
6357 rli_size_so_far (rli),
6358 bitsize_int (BITS_PER_UNIT))),
6359 eoc);
c8094d83 6360 TYPE_SIZE (base_t)
8a874cb4
MM
6361 = size_binop (MAX_EXPR,
6362 rli_size_so_far (rli),
6363 size_binop (MULT_EXPR,
6b99d1c0 6364 convert (bitsizetype, eoc),
8a874cb4 6365 bitsize_int (BITS_PER_UNIT)));
58731fd1 6366 }
17bbb839
MM
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);
910ad8de 6372 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
17bbb839
MM
6373 if (TREE_CODE (field) == FIELD_DECL)
6374 {
c2255bc4
AH
6375 *next_field = build_decl (input_location,
6376 FIELD_DECL,
c8094d83 6377 DECL_NAME (field),
17bbb839
MM
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);
4f0a2b81
MM
6383 DECL_SIZE (*next_field) = DECL_SIZE (field);
6384 DECL_MODE (*next_field) = DECL_MODE (field);
910ad8de 6385 next_field = &DECL_CHAIN (*next_field);
17bbb839
MM
6386 }
6387
6388 /* Record the base version of the type. */
6389 CLASSTYPE_AS_BASE (t) = base_t;
5a5cccaa 6390 TYPE_CONTEXT (base_t) = t;
83b14b88 6391 }
1f84ec23 6392 else
17bbb839 6393 CLASSTYPE_AS_BASE (t) = t;
0b41abe6 6394
5ec1192e
MM
6395 /* Every empty class contains an empty class. */
6396 if (CLASSTYPE_EMPTY_P (t))
6397 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
6398
8d08fdba
MS
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. */
d2e5ee5c 6402 layout_decl (TYPE_MAIN_DECL (t), 0);
8d08fdba 6403
7177d104
MS
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
5c24fba6
MM
6406 virtual function table. As a side-effect, this will remove the
6407 base subobject fields. */
17bbb839
MM
6408 layout_virtual_bases (rli, empty_base_offsets);
6409
c8094d83 6410 /* Make sure that empty classes are reflected in RLI at this
17bbb839
MM
6411 point. */
6412 include_empty_classes(rli);
6413
6414 /* Make sure not to create any structures with zero size. */
58731fd1 6415 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
c8094d83 6416 place_field (rli,
c2255bc4
AH
6417 build_decl (input_location,
6418 FIELD_DECL, NULL_TREE, char_type_node));
17bbb839 6419
a402c1b1
JM
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
3b426391 6425 /* Let the back end lay out the type. */
17bbb839 6426 finish_record_layout (rli, /*free_p=*/true);
9785e4b1 6427
26d40c3d
JM
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
17bbb839
MM
6434 /* Warn about bases that can't be talked about due to ambiguity. */
6435 warn_about_ambiguous_bases (t);
78b45a24 6436
00bfffa4 6437 /* Now that we're done with layout, give the base fields the real types. */
910ad8de 6438 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
00bfffa4
JM
6439 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
6440 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
6441
9785e4b1 6442 /* Clean up. */
c20118a8 6443 splay_tree_delete (empty_base_offsets);
c5a35c3c
MM
6444
6445 if (CLASSTYPE_EMPTY_P (t)
3db45ab5 6446 && tree_int_cst_lt (sizeof_biggest_empty_class,
c0572427
MM
6447 TYPE_SIZE_UNIT (t)))
6448 sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t);
2ef16140 6449}
c35cce41 6450
af287697
MM
6451/* Determine the "key method" for the class type indicated by TYPE,
6452 and set CLASSTYPE_KEY_METHOD accordingly. */
9aad8f83 6453
af287697
MM
6454void
6455determine_key_method (tree type)
9aad8f83
MA
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))
af287697 6463 return;
9aad8f83 6464
af287697
MM
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. */
9aad8f83 6469 for (method = TYPE_METHODS (type); method != NULL_TREE;
910ad8de 6470 method = DECL_CHAIN (method))
9aad8f83
MA
6471 if (DECL_VINDEX (method) != NULL_TREE
6472 && ! DECL_DECLARED_INLINE_P (method)
6473 && ! DECL_PURE_VIRTUAL_P (method))
af287697
MM
6474 {
6475 CLASSTYPE_KEY_METHOD (type) = method;
6476 break;
6477 }
9aad8f83 6478
af287697 6479 return;
9aad8f83
MA
6480}
6481
385b73ab
DN
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;
6490 sft = ggc_alloc_sorted_fields_type (sizeof (struct sorted_fields_type)
6491 + n * sizeof (tree));
6492 sft->len = n;
6493
6494 return sft;
6495}
6496
6497
548502d3
MM
6498/* Perform processing required when the definition of T (a class type)
6499 is complete. */
2ef16140
MM
6500
6501void
94edc4ab 6502finish_struct_1 (tree t)
2ef16140
MM
6503{
6504 tree x;
00a17e31 6505 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
e6858a84 6506 tree virtuals = NULL_TREE;
2ef16140 6507
d0f062fb 6508 if (COMPLETE_TYPE_P (t))
2ef16140 6509 {
9e1e64ec 6510 gcc_assert (MAYBE_CLASS_TYPE_P (t));
1f070f2b 6511 error ("redefinition of %q#T", t);
2ef16140
MM
6512 popclass ();
6513 return;
6514 }
6515
2ef16140
MM
6516 /* If this type was previously laid out as a forward reference,
6517 make sure we lay it out again. */
2ef16140 6518 TYPE_SIZE (t) = NULL_TREE;
911a71a7 6519 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
2ef16140 6520
5ec1192e
MM
6521 /* Make assumptions about the class; we'll reset the flags if
6522 necessary. */
58731fd1
MM
6523 CLASSTYPE_EMPTY_P (t) = 1;
6524 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
5ec1192e 6525 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
3b49d762 6526 CLASSTYPE_LITERAL_P (t) = true;
58731fd1 6527
2ef16140 6528 /* Do end-of-class semantic processing: checking the validity of the
03702748 6529 bases and members and add implicitly generated methods. */
58731fd1 6530 check_bases_and_members (t);
2ef16140 6531
f4f206f4 6532 /* Find the key method. */
a63996f1 6533 if (TYPE_CONTAINS_VPTR_P (t))
9aad8f83 6534 {
af287697
MM
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);
9aad8f83
MA
6545
6546 /* If a polymorphic class has no key method, we may emit the vtable
9bcb9aae 6547 in every translation unit where the class definition appears. */
9aad8f83
MA
6548 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
6549 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
6550 }
6551
2ef16140 6552 /* Layout the class itself. */
e93ee644 6553 layout_class_type (t, &virtuals);
a0c68737
NS
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));
8ebeee52 6558
e93ee644 6559 virtuals = modify_all_vtables (t, nreverse (virtuals));
db5ae43f 6560
5e19c053 6561 /* If necessary, create the primary vtable for this class. */
e6858a84 6562 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
8d08fdba 6563 {
8d08fdba 6564 /* We must enter these virtuals into the table. */
3ef397c1 6565 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
da3d4dfa 6566 build_primary_vtable (NULL_TREE, t);
dbbf88d1 6567 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
0533d788
MM
6568 /* Here we know enough to change the type of our virtual
6569 function table, but we will wait until later this function. */
28531dd0 6570 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
d3061adb
JM
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));
8d08fdba
MS
6577 }
6578
bbd15aac 6579 if (TYPE_CONTAINS_VPTR_P (t))
8d08fdba 6580 {
e93ee644
MM
6581 int vindex;
6582 tree fn;
6583
604a3205 6584 if (BINFO_VTABLE (TYPE_BINFO (t)))
50bc768d 6585 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
1eb4bea9 6586 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
50bc768d 6587 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
1eb4bea9 6588
e6858a84 6589 /* Add entries for virtual functions introduced by this class. */
604a3205
NS
6590 BINFO_VIRTUALS (TYPE_BINFO (t))
6591 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
e93ee644
MM
6592
6593 /* Set DECL_VINDEX for all functions declared in this class. */
c8094d83
MS
6594 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
6595 fn;
6596 fn = TREE_CHAIN (fn),
e93ee644
MM
6597 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
6598 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
4977bab6
ZW
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)
7d60be94 6608 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
4977bab6 6609 }
8d08fdba
MS
6610 }
6611
d2c5305b 6612 finish_struct_bits (t);
0a35513e 6613 set_method_tm_attributes (t);
8d08fdba 6614
f30432d7
MS
6615 /* Complete the rtl for any static member objects of the type we're
6616 working on. */
910ad8de 6617 for (x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
5a6ccc94 6618 if (VAR_P (x) && TREE_STATIC (x)
650fcd07 6619 && TREE_TYPE (x) != error_mark_node
c7f4981a 6620 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
19e7881c 6621 DECL_MODE (x) = TYPE_MODE (t);
8d08fdba 6622
f90cdf34 6623 /* Done with FIELDS...now decide whether to sort these for
58010b57 6624 faster lookups later.
f90cdf34 6625
6c73ad72 6626 We use a small number because most searches fail (succeeding
f90cdf34
MT
6627 ultimately as the search bores through the inheritance
6628 hierarchy), and we want this failure to occur quickly. */
6629
cba0366c 6630 insert_into_classtype_sorted_fields (TYPE_FIELDS (t), t, 8);
f90cdf34 6631
b9e75696
JM
6632 /* Complain if one of the field types requires lower visibility. */
6633 constrain_class_visibility (t);
6634
8d7a5379
MM
6635 /* Make the rtl for any new vtables we have created, and unmark
6636 the base types we marked. */
6637 finish_vtbls (t);
c8094d83 6638
23656158
MM
6639 /* Build the VTT for T. */
6640 build_vtt (t);
8d7a5379 6641
f03e8526
MM
6642 /* This warning does not make sense for Java classes, since they
6643 cannot have destructors. */
880a467b
NS
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);
8d08fdba 6649
0154eaa8 6650 complete_vars (t);
8d08fdba 6651
9e9ff709
MS
6652 if (warn_overloaded_virtual)
6653 warn_hidden (t);
8d08fdba 6654
43d9ad1d
DS
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
ae673f14 6660 maybe_suppress_debug_info (t);
8d08fdba 6661
2077db1b
CT
6662 if (flag_vtable_verify)
6663 vtv_save_class_info (t);
6664
b7442fb5 6665 dump_class_hierarchy (t);
c8094d83 6666
d2e5ee5c 6667 /* Finish debugging output for this type. */
881c6935 6668 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
bfcbe068 6669
e7b6bcf3 6670 if (TYPE_TRANSPARENT_AGGR (t))
bfcbe068 6671 {
e7b6bcf3
JJ
6672 tree field = first_field (t);
6673 if (field == NULL_TREE || error_operand_p (field))
6674 {
42b40eff 6675 error ("type transparent %q#T does not have any fields", t);
e7b6bcf3
JJ
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 }
42b40eff
PC
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 }
bfcbe068 6696 }
8d08fdba 6697}
f30432d7 6698
cba0366c
FC
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
61a127b3
MM
6738/* When T was built up, the member declarations were added in reverse
6739 order. Rearrange them to declaration order. */
6740
6741void
94edc4ab 6742unreverse_member_declarations (tree t)
61a127b3
MM
6743{
6744 tree next;
6745 tree prev;
6746 tree x;
6747
7088fca9
KL
6748 /* The following lists are all in reverse order. Put them in
6749 declaration order now. */
61a127b3 6750 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
7088fca9 6751 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
61a127b3
MM
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;
c8094d83
MS
6756 for (x = TYPE_FIELDS (t);
6757 x && TREE_CODE (x) != TYPE_DECL;
61a127b3
MM
6758 x = next)
6759 {
910ad8de
NF
6760 next = DECL_CHAIN (x);
6761 DECL_CHAIN (x) = prev;
61a127b3
MM
6762 prev = x;
6763 }
6764 if (prev)
6765 {
910ad8de 6766 DECL_CHAIN (TYPE_FIELDS (t)) = x;
61a127b3
MM
6767 if (prev)
6768 TYPE_FIELDS (t) = prev;
6769 }
6770}
6771
f30432d7 6772tree
94edc4ab 6773finish_struct (tree t, tree attributes)
f30432d7 6774{
82a98427 6775 location_t saved_loc = input_location;
1f0d71c5 6776
61a127b3
MM
6777 /* Now that we've got all the field declarations, reverse everything
6778 as necessary. */
6779 unreverse_member_declarations (t);
f30432d7 6780
91d231cb 6781 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6467930b 6782
1f0d71c5
NS
6783 /* Nadger the current location so that diagnostics point to the start of
6784 the struct, not the end. */
f31686a3 6785 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
1f0d71c5 6786
5566b478 6787 if (processing_template_decl)
f30432d7 6788 {
7fb213d8
GB
6789 tree x;
6790
b0e0b31f 6791 finish_struct_methods (t);
867580ce 6792 TYPE_SIZE (t) = bitsize_zero_node;
ae54ec16 6793 TYPE_SIZE_UNIT (t) = size_zero_node;
7fb213d8
GB
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. */
585b44d3 6802 CLASSTYPE_PURE_VIRTUALS (t) = NULL;
910ad8de 6803 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
7fb213d8 6804 if (DECL_PURE_VIRTUAL_P (x))
9771b263 6805 vec_safe_push (CLASSTYPE_PURE_VIRTUALS (t), x);
7fb213d8 6806 complete_vars (t);
e58d4228
JM
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 }
040ca4b3
JM
6819
6820 /* Remember current #pragma pack value. */
6821 TYPE_PRECISION (t) = maximum_field_alignment;
947296ca
JM
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 }
6f1b4c42 6831 }
f30432d7 6832 else
9f33663b 6833 finish_struct_1 (t);
5566b478 6834
82a98427 6835 input_location = saved_loc;
1f0d71c5 6836
5566b478 6837 TYPE_BEING_DEFINED (t) = 0;
8f032717 6838
5566b478 6839 if (current_class_type)
b74a0560 6840 popclass ();
5566b478 6841 else
357351e5 6842 error ("trying to finish struct, but kicked out due to previous parse errors");
5566b478 6843
637f68e8
JM
6844 if (processing_template_decl && at_function_scope_p ()
6845 /* Lambdas are defined by the LAMBDA_EXPR. */
6846 && !LAMBDA_TYPE_P (t))
5f261ba9 6847 add_stmt (build_min (TAG_DEFN, t));
ae673f14 6848
5566b478 6849 return t;
f30432d7 6850}
8d08fdba 6851\f
abcc192b
JJ
6852/* Hash table to avoid endless recursion when handling references. */
6853static hash_table <pointer_hash <tree_node> > fixed_type_or_null_ref_ht;
6854
51ddb82e 6855/* Return the dynamic type of INSTANCE, if known.
8d08fdba
MS
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
97d953bb
MM
6860 of our knowledge of its type. *NONNULL should be initialized
6861 before this function is called. */
e92cc029 6862
d8e178a0 6863static tree
555551c2 6864fixed_type_or_null (tree instance, int *nonnull, int *cdtorp)
8d08fdba 6865{
555551c2
MM
6866#define RECUR(T) fixed_type_or_null((T), nonnull, cdtorp)
6867
8d08fdba
MS
6868 switch (TREE_CODE (instance))
6869 {
6870 case INDIRECT_REF:
608afcc5 6871 if (POINTER_TYPE_P (TREE_TYPE (instance)))
a0de9d20
JM
6872 return NULL_TREE;
6873 else
555551c2 6874 return RECUR (TREE_OPERAND (instance, 0));
a0de9d20 6875
8d08fdba
MS
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;
51ddb82e 6882 return TREE_TYPE (instance);
8d08fdba 6883 }
51ddb82e 6884 return NULL_TREE;
8d08fdba
MS
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;
51ddb82e 6892 return TREE_TYPE (instance);
8d08fdba 6893 }
555551c2 6894 return RECUR (TREE_OPERAND (instance, 0));
8d08fdba 6895
5be014d5 6896 case POINTER_PLUS_EXPR:
8d08fdba
MS
6897 case PLUS_EXPR:
6898 case MINUS_EXPR:
394fd776 6899 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
555551c2 6900 return RECUR (TREE_OPERAND (instance, 0));
8d08fdba
MS
6901 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
6902 /* Propagate nonnull. */
555551c2
MM
6903 return RECUR (TREE_OPERAND (instance, 0));
6904
51ddb82e 6905 return NULL_TREE;
8d08fdba 6906
63a906f0 6907 CASE_CONVERT:
555551c2 6908 return RECUR (TREE_OPERAND (instance, 0));
8d08fdba
MS
6909
6910 case ADDR_EXPR:
88f19756 6911 instance = TREE_OPERAND (instance, 0);
8d08fdba 6912 if (nonnull)
88f19756
RH
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 }
555551c2 6921 return RECUR (instance);
8d08fdba
MS
6922
6923 case COMPONENT_REF:
642124c6
RH
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)))
555551c2
MM
6927 return RECUR (TREE_OPERAND (instance, 0));
6928 return RECUR (TREE_OPERAND (instance, 1));
8d08fdba 6929
8d08fdba
MS
6930 case VAR_DECL:
6931 case FIELD_DECL:
6932 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
9e1e64ec 6933 && MAYBE_CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (instance))))
8d08fdba
MS
6934 {
6935 if (nonnull)
6936 *nonnull = 1;
51ddb82e 6937 return TREE_TYPE (TREE_TYPE (instance));
8d08fdba 6938 }
e92cc029 6939 /* fall through... */
8d08fdba
MS
6940 case TARGET_EXPR:
6941 case PARM_DECL:
f63ab951 6942 case RESULT_DECL:
9e1e64ec 6943 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (instance)))
8d08fdba
MS
6944 {
6945 if (nonnull)
6946 *nonnull = 1;
51ddb82e 6947 return TREE_TYPE (instance);
8d08fdba 6948 }
394fd776 6949 else if (instance == current_class_ptr)
0cbd7506
MS
6950 {
6951 if (nonnull)
6952 *nonnull = 1;
6953
f10eaa2d
JM
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))))
0cbd7506
MS
6961 {
6962 if (cdtorp)
6963 *cdtorp = 1;
6964 return TREE_TYPE (TREE_TYPE (instance));
6965 }
6966 }
394fd776 6967 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
0cbd7506 6968 {
555551c2 6969 /* We only need one hash table because it is always left empty. */
abcc192b
JJ
6970 if (!fixed_type_or_null_ref_ht.is_created ())
6971 fixed_type_or_null_ref_ht.create (37);
555551c2 6972
0cbd7506
MS
6973 /* Reference variables should be references to objects. */
6974 if (nonnull)
8d08fdba 6975 *nonnull = 1;
c8094d83 6976
555551c2 6977 /* Enter the INSTANCE in a table to prevent recursion; a
772f8889
MM
6978 variable's initializer may refer to the variable
6979 itself. */
5a6ccc94 6980 if (VAR_P (instance)
772f8889 6981 && DECL_INITIAL (instance)
bae14a37 6982 && !type_dependent_expression_p_push (DECL_INITIAL (instance))
abcc192b 6983 && !fixed_type_or_null_ref_ht.find (instance))
772f8889
MM
6984 {
6985 tree type;
703c8606 6986 tree_node **slot;
555551c2 6987
abcc192b 6988 slot = fixed_type_or_null_ref_ht.find_slot (instance, INSERT);
555551c2
MM
6989 *slot = instance;
6990 type = RECUR (DECL_INITIAL (instance));
abcc192b 6991 fixed_type_or_null_ref_ht.remove_elt (instance);
555551c2 6992
772f8889
MM
6993 return type;
6994 }
8d08fdba 6995 }
51ddb82e 6996 return NULL_TREE;
8d08fdba
MS
6997
6998 default:
51ddb82e 6999 return NULL_TREE;
8d08fdba 7000 }
555551c2 7001#undef RECUR
8d08fdba 7002}
51ddb82e 7003
838dfd8a 7004/* Return nonzero if the dynamic type of INSTANCE is known, and
338d90b8
NS
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
c65cb8d1 7009 bases may not be laid out according to this type.
51ddb82e
JM
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
97d953bb
MM
7015 of our knowledge of its type. *NONNULL should be initialized
7016 before this function is called. */
51ddb82e
JM
7017
7018int
94edc4ab 7019resolves_to_fixed_type_p (tree instance, int* nonnull)
51ddb82e
JM
7020{
7021 tree t = TREE_TYPE (instance);
394fd776 7022 int cdtorp = 0;
4d3baecc
JM
7023 tree fixed;
7024
65f0c5b3
JM
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. */
e0e1b357 7027 if (in_template_function ())
4d3baecc
JM
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);
51ddb82e
JM
7036 if (fixed == NULL_TREE)
7037 return 0;
7038 if (POINTER_TYPE_P (t))
7039 t = TREE_TYPE (t);
394fd776
NS
7040 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
7041 return 0;
7042 return cdtorp ? -1 : 1;
51ddb82e
JM
7043}
7044
8d08fdba
MS
7045\f
7046void
94edc4ab 7047init_class_processing (void)
8d08fdba
MS
7048{
7049 current_class_depth = 0;
61a127b3 7050 current_class_stack_size = 10;
c8094d83 7051 current_class_stack
0ac1b889 7052 = XNEWVEC (struct class_stack_node, current_class_stack_size);
9771b263 7053 vec_alloc (local_classes, 8);
c5a35c3c 7054 sizeof_biggest_empty_class = size_zero_node;
8d08fdba 7055
0e5921e8
ZW
7056 ridpointers[(int) RID_PUBLIC] = access_public_node;
7057 ridpointers[(int) RID_PRIVATE] = access_private_node;
7058 ridpointers[(int) RID_PROTECTED] = access_protected_node;
8d08fdba
MS
7059}
7060
39fb05d0
MM
7061/* Restore the cached PREVIOUS_CLASS_LEVEL. */
7062
7063static void
7064restore_class_cache (void)
7065{
39fb05d0 7066 tree type;
39fb05d0
MM
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;
39fb05d0 7074 /* Restore IDENTIFIER_TYPE_VALUE. */
c8094d83
MS
7075 for (type = class_binding_level->type_shadowed;
7076 type;
39fb05d0
MM
7077 type = TREE_CHAIN (type))
7078 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
7079}
7080
a723baf1
MM
7081/* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
7082 appropriate for TYPE.
8d08fdba 7083
8d08fdba
MS
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
39fb05d0 7088 of the type lattice. */
8d08fdba
MS
7089
7090void
29370796 7091pushclass (tree type)
8d08fdba 7092{
c888c93b
MM
7093 class_stack_node_t csn;
7094
0771d9d7
JM
7095 type = TYPE_MAIN_VARIANT (type);
7096
61a127b3 7097 /* Make sure there is enough room for the new entry on the stack. */
c8094d83 7098 if (current_class_depth + 1 >= current_class_stack_size)
8d08fdba 7099 {
61a127b3
MM
7100 current_class_stack_size *= 2;
7101 current_class_stack
7767580e 7102 = XRESIZEVEC (struct class_stack_node, current_class_stack,
3db45ab5 7103 current_class_stack_size);
8d08fdba
MS
7104 }
7105
61a127b3 7106 /* Insert a new entry on the class stack. */
c888c93b
MM
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;
61a127b3
MM
7113 current_class_depth++;
7114
7115 /* Now set up the new type. */
8d08fdba
MS
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
61a127b3
MM
7121 /* By default, things in classes are private, while things in
7122 structures or unions are public. */
c8094d83
MS
7123 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
7124 ? access_private_node
61a127b3
MM
7125 : access_public_node);
7126
89b578be
MM
7127 if (previous_class_level
7128 && type != previous_class_level->this_entity
8d08fdba
MS
7129 && current_class_depth == 1)
7130 {
7131 /* Forcibly remove any old class remnants. */
8f032717 7132 invalidate_class_lookup_cache ();
8d08fdba
MS
7133 }
7134
c8094d83 7135 if (!previous_class_level
89b578be
MM
7136 || type != previous_class_level->this_entity
7137 || current_class_depth > 1)
90ea9897 7138 pushlevel_class ();
29370796 7139 else
39fb05d0 7140 restore_class_cache ();
8f032717
MM
7141}
7142
39fb05d0
MM
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. */
8d08fdba 7146
8f032717 7147void
94edc4ab 7148invalidate_class_lookup_cache (void)
8f032717 7149{
89b578be 7150 previous_class_level = NULL;
8d08fdba 7151}
c8094d83 7152
8d08fdba 7153/* Get out of the current class scope. If we were in a class scope
b74a0560 7154 previously, that is the one popped to. */
e92cc029 7155
8d08fdba 7156void
94edc4ab 7157popclass (void)
8d08fdba 7158{
0771d9d7 7159 poplevel_class ();
8d08fdba
MS
7160
7161 current_class_depth--;
61a127b3
MM
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;
8f032717
MM
7165 if (current_class_stack[current_class_depth].names_used)
7166 splay_tree_delete (current_class_stack[current_class_depth].names_used);
8d08fdba
MS
7167}
7168
c888c93b
MM
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
fa6098f8
MM
7187/* Returns 1 if the class type currently being defined is either T or
7188 a nested type of T. */
b9082e8a 7189
fa6098f8 7190bool
94edc4ab 7191currently_open_class (tree t)
b9082e8a
JM
7192{
7193 int i;
fa6098f8 7194
1cb801bc
JM
7195 if (!CLASS_TYPE_P (t))
7196 return false;
7197
3e5e84be
JM
7198 t = TYPE_MAIN_VARIANT (t);
7199
fa6098f8
MM
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)
c888c93b 7203 {
fa6098f8
MM
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;
c888c93b 7217 }
fa6098f8 7218 return false;
b9082e8a
JM
7219}
7220
70adf8a9
JM
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
94edc4ab 7226currently_open_derived_class (tree t)
70adf8a9
JM
7227{
7228 int i;
7229
9bcb9aae 7230 /* The bases of a dependent type are unknown. */
1fb3244a
MM
7231 if (dependent_type_p (t))
7232 return NULL_TREE;
7233
c44e68a5
KL
7234 if (!current_class_type)
7235 return NULL_TREE;
7236
70adf8a9
JM
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)
c888c93b
MM
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 }
70adf8a9
JM
7247
7248 return NULL_TREE;
7249}
7250
a6846853
JM
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
8d08fdba 7279/* When entering a class scope, all enclosing class scopes' names with
14d22dd6
MM
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. */
8d08fdba
MS
7284
7285void
14d22dd6 7286push_nested_class (tree type)
8d08fdba 7287{
b262d64c 7288 /* A namespace might be passed in error cases, like A::B:C. */
c8094d83 7289 if (type == NULL_TREE
56d0c6e3 7290 || !CLASS_TYPE_P (type))
a28e3c7f 7291 return;
c8094d83 7292
56d0c6e3 7293 push_nested_class (DECL_CONTEXT (TYPE_MAIN_DECL (type)));
8d08fdba 7294
29370796 7295 pushclass (type);
8d08fdba
MS
7296}
7297
a723baf1 7298/* Undoes a push_nested_class call. */
8d08fdba
MS
7299
7300void
94edc4ab 7301pop_nested_class (void)
8d08fdba 7302{
d2e5ee5c 7303 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
8d08fdba 7304
b74a0560 7305 popclass ();
6b400b21 7306 if (context && CLASS_TYPE_P (context))
b74a0560 7307 pop_nested_class ();
8d08fdba
MS
7308}
7309
46ccf50a
JM
7310/* Returns the number of extern "LANG" blocks we are nested within. */
7311
7312int
94edc4ab 7313current_lang_depth (void)
46ccf50a 7314{
9771b263 7315 return vec_safe_length (current_lang_base);
46ccf50a
JM
7316}
7317
8d08fdba
MS
7318/* Set global variables CURRENT_LANG_NAME to appropriate value
7319 so that behavior of name-mangling machinery is correct. */
7320
7321void
94edc4ab 7322push_lang_context (tree name)
8d08fdba 7323{
9771b263 7324 vec_safe_push (current_lang_base, current_lang_name);
8d08fdba 7325
e229f2cd 7326 if (name == lang_name_cplusplus)
8d08fdba 7327 {
8d08fdba
MS
7328 current_lang_name = name;
7329 }
e229f2cd
PB
7330 else if (name == lang_name_java)
7331 {
e229f2cd
PB
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.
00a17e31 7336 So we re-enable debug output after extern "Java". */
e3cd9945
APB
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;
e229f2cd 7345 }
8d08fdba
MS
7346 else if (name == lang_name_c)
7347 {
8d08fdba
MS
7348 current_lang_name = name;
7349 }
7350 else
9e637a26 7351 error ("language string %<\"%E\"%> not recognized", name);
8d08fdba 7352}
c8094d83 7353
8d08fdba 7354/* Get out of the current language scope. */
e92cc029 7355
8d08fdba 7356void
94edc4ab 7357pop_lang_context (void)
8d08fdba 7358{
9771b263 7359 current_lang_name = current_lang_base->pop ();
8d08fdba 7360}
8d08fdba
MS
7361\f
7362/* Type instantiation routines. */
7363
104bf76a
MM
7364/* Given an OVERLOAD and a TARGET_TYPE, return the function that
7365 matches the TARGET_TYPE. If there is no satisfactory match, return
eff3a276
MM
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
248e1b22
MM
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
5e7b9f60
JM
7374 the address is resolved to a member function, access checks will be
7375 performed and errors issued if appropriate. */
104bf76a 7376
2c73f9f5 7377static tree
c8094d83 7378resolve_address_of_overloaded_function (tree target_type,
94edc4ab 7379 tree overload,
92af500d
NS
7380 tsubst_flags_t flags,
7381 bool template_only,
eff3a276
MM
7382 tree explicit_targs,
7383 tree access_path)
2c73f9f5 7384{
104bf76a 7385 /* Here's what the standard says:
c8094d83 7386
104bf76a
MM
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;
104bf76a
MM
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;
50714e79 7416 tree fn;
7bead48f 7417 tree target_fn_type;
104bf76a 7418
d8f8dca1
MM
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. */
50e10fa8 7422 gcc_assert (!TYPE_PTR_P (target_type)
50bc768d 7423 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
104bf76a 7424
50bc768d 7425 gcc_assert (is_overloaded_fn (overload));
c8094d83 7426
104bf76a 7427 /* Check that the TARGET_TYPE is reasonable. */
6721db5d
JM
7428 if (TYPE_PTRFN_P (target_type)
7429 || TYPE_REFFN_P (target_type))
381ddaa6 7430 /* This is OK. */;
104bf76a
MM
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)
db80e34e
JJ
7435 /* This is OK, too. This comes from a conversion to reference
7436 type. */
7437 target_type = build_reference_type (target_type);
c8094d83 7438 else
104bf76a 7439 {
92af500d 7440 if (flags & tf_error)
c4f73174 7441 error ("cannot resolve overloaded function %qD based on"
0cbd7506
MS
7442 " conversion to type %qT",
7443 DECL_NAME (OVL_FUNCTION (overload)), target_type);
104bf76a
MM
7444 return error_mark_node;
7445 }
c8094d83 7446
7bead48f
JM
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
104bf76a
MM
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
a723baf1 7464 for (fns = overload; fns; fns = OVL_NEXT (fns))
104bf76a 7465 {
a723baf1 7466 tree fn = OVL_CURRENT (fns);
2c73f9f5 7467
104bf76a
MM
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;
34ff2673 7477
d63d5d0c
ILT
7478 /* Ignore functions which haven't been explicitly
7479 declared. */
34ff2673
RS
7480 if (DECL_ANTICIPATED (fn))
7481 continue;
7482
104bf76a 7483 /* See if there's a match. */
7bead48f 7484 if (same_type_p (target_fn_type, static_fn_type (fn)))
e1b3e07d 7485 matches = tree_cons (fn, NULL_TREE, matches);
104bf76a
MM
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. */
c8094d83 7492 if (!matches)
2c73f9f5 7493 {
104bf76a 7494 tree target_arg_types;
8d3631f8 7495 tree target_ret_type;
104bf76a 7496 tree fns;
c166b898
ILT
7497 tree *args;
7498 unsigned int nargs, ia;
7499 tree arg;
104bf76a 7500
4393e105 7501 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
8d3631f8 7502 target_ret_type = TREE_TYPE (target_fn_type);
e5214479 7503
c166b898
ILT
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
a723baf1 7512 for (fns = overload; fns; fns = OVL_NEXT (fns))
104bf76a 7513 {
a723baf1 7514 tree fn = OVL_CURRENT (fns);
104bf76a 7515 tree instantiation;
104bf76a
MM
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)
4393e105 7524 /* We're not looking for a non-static member, and this is
104bf76a
MM
7525 one, or vice versa. */
7526 continue;
7527
79d8a272
JM
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
104bf76a 7535 /* Try to do argument deduction. */
f31c0a32 7536 targs = make_tree_vec (DECL_NTPARMS (fn));
cd057e3a 7537 instantiation = fn_type_unification (fn, explicit_targs, targs, args,
79d8a272 7538 nargs, ret,
cd057e3a 7539 DEDUCE_EXACT, LOOKUP_NORMAL,
2b24855e 7540 false, false);
104bf76a
MM
7541 if (instantiation == error_mark_node)
7542 /* Instantiation failed. */
7543 continue;
7544
79d8a272
JM
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
104bf76a 7555 /* See if there's a match. */
7bead48f 7556 if (same_type_p (target_fn_type, static_fn_type (instantiation)))
e1b3e07d 7557 matches = tree_cons (instantiation, fn, matches);
104bf76a
MM
7558 }
7559
7560 /* Now, remove all but the most specialized of the matches. */
7561 if (matches)
7562 {
e5214479 7563 tree match = most_specialized_instantiation (matches);
104bf76a
MM
7564
7565 if (match != error_mark_node)
3db45ab5
MS
7566 matches = tree_cons (TREE_PURPOSE (match),
7567 NULL_TREE,
7ca383e6 7568 NULL_TREE);
104bf76a
MM
7569 }
7570 }
7571
7572 /* Now we should have exactly one function in MATCHES. */
7573 if (matches == NULL_TREE)
7574 {
7575 /* There were *no* matches. */
92af500d 7576 if (flags & tf_error)
104bf76a 7577 {
0cbd7506 7578 error ("no matches converting function %qD to type %q#T",
95e20768 7579 DECL_NAME (OVL_CURRENT (overload)),
0cbd7506 7580 target_type);
6b9b6b15 7581
c224bdc1 7582 print_candidates (overload);
104bf76a
MM
7583 }
7584 return error_mark_node;
2c73f9f5 7585 }
104bf76a
MM
7586 else if (TREE_CHAIN (matches))
7587 {
e04c614e
JM
7588 /* There were too many matches. First check if they're all
7589 the same function. */
3649b9b7 7590 tree match = NULL_TREE;
104bf76a 7591
e04c614e 7592 fn = TREE_PURPOSE (matches);
3649b9b7 7593
beb42d20
ST
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;
e04c614e
JM
7601
7602 if (match)
104bf76a 7603 {
e04c614e
JM
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);
104bf76a 7609
e04c614e
JM
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);
104bf76a 7614
e04c614e
JM
7615 print_candidates (matches);
7616 }
104bf76a 7617
e04c614e 7618 return error_mark_node;
104bf76a 7619 }
104bf76a
MM
7620 }
7621
50714e79
MM
7622 /* Good, exactly one match. Now, convert it to the correct type. */
7623 fn = TREE_PURPOSE (matches);
7624
b1ce3eb2 7625 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
92af500d 7626 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
19420d00 7627 {
b1ce3eb2 7628 static int explained;
c8094d83 7629
92af500d 7630 if (!(flags & tf_error))
0cbd7506 7631 return error_mark_node;
19420d00 7632
cbe5f3b3 7633 permerror (input_location, "assuming pointer to member %qD", fn);
b1ce3eb2 7634 if (!explained)
0cbd7506 7635 {
1f5b3869 7636 inform (input_location, "(a pointer to member can only be formed with %<&%E%>)", fn);
0cbd7506
MS
7637 explained = 1;
7638 }
19420d00 7639 }
84583208 7640
3649b9b7
ST
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 {
beb42d20
ST
7647 fn = get_function_version_dispatcher (fn);
7648 if (fn == NULL)
7649 return error_mark_node;
3649b9b7
ST
7650 /* Mark all the versions corresponding to the dispatcher as used. */
7651 if (!(flags & tf_conv))
7652 mark_versions_used (fn);
7653 }
7654
84583208
MM
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))
eff3a276 7660 {
4ad610c9
JM
7661 /* Make =delete work with SFINAE. */
7662 if (DECL_DELETED_FN (fn) && !(flags & tf_error))
7663 return error_mark_node;
7664
eff3a276 7665 mark_used (fn);
248e1b22
MM
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. */
5e7b9f60 7671 if (DECL_FUNCTION_MEMBER_P (fn))
248e1b22
MM
7672 {
7673 gcc_assert (access_path);
5e7b9f60 7674 perform_or_defer_access_check (access_path, fn, fn, flags);
eff3a276 7675 }
a6ecf8b6 7676
50714e79 7677 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
93c0e0bb 7678 return cp_build_addr_expr (fn, flags);
50714e79
MM
7679 else
7680 {
5ade1ed2 7681 /* The target must be a REFERENCE_TYPE. Above, cp_build_unary_op
50714e79
MM
7682 will mark the function as addressed, but here we must do it
7683 explicitly. */
dffd7eb6 7684 cxx_mark_addressable (fn);
50714e79
MM
7685
7686 return fn;
7687 }
2c73f9f5
ML
7688}
7689
ec255269
MS
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
92af500d 7692 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
5e76004e
NS
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.
c8094d83 7696
e6e174e5
JM
7697 For non-recursive calls, LHSTYPE should be a function, pointer to
7698 function, or a pointer to member function. */
e92cc029 7699
8d08fdba 7700tree
94edc4ab 7701instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
8d08fdba 7702{
92af500d 7703 tsubst_flags_t flags_in = flags;
eff3a276 7704 tree access_path = NULL_TREE;
c8094d83 7705
c2ea3a40 7706 flags &= ~tf_ptrmem_ok;
c8094d83 7707
fbfc8363 7708 if (lhstype == unknown_type_node)
8d08fdba 7709 {
92af500d 7710 if (flags & tf_error)
8251199e 7711 error ("not enough type information");
8d08fdba
MS
7712 return error_mark_node;
7713 }
7714
7715 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
abff8e06 7716 {
6721db5d
JM
7717 tree fntype = non_reference (lhstype);
7718 if (same_type_p (fntype, TREE_TYPE (rhs)))
abff8e06 7719 return rhs;
c8094d83 7720 if (flag_ms_extensions
6721db5d 7721 && TYPE_PTRMEMFUNC_P (fntype)
a723baf1
MM
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 {
92af500d 7728 if (flags & tf_error)
c3c1f2b7 7729 error ("cannot convert %qE from type %qT to type %qT",
6721db5d 7730 rhs, TREE_TYPE (rhs), fntype);
a723baf1
MM
7731 return error_mark_node;
7732 }
abff8e06 7733 }
8d08fdba 7734
c5ce25ce 7735 if (BASELINK_P (rhs))
eff3a276
MM
7736 {
7737 access_path = BASELINK_ACCESS_BINFO (rhs);
7738 rhs = BASELINK_FUNCTIONS (rhs);
7739 }
50ad9642 7740
5ae9ba3e
MM
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
eff3a276
MM
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
3f3fd87d 7754 || is_overloaded_fn (rhs)
95e20768 7755 || (flag_ms_extensions && TREE_CODE (rhs) == FUNCTION_DECL));
c73964b2 7756
8d08fdba
MS
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 {
8d08fdba 7764 case COMPONENT_REF:
92af500d 7765 {
5ae9ba3e 7766 tree member = TREE_OPERAND (rhs, 1);
92af500d 7767
5ae9ba3e
MM
7768 member = instantiate_type (lhstype, member, flags);
7769 if (member != error_mark_node
92af500d 7770 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
04c06002 7771 /* Do not lose object's side effects. */
5ae9ba3e
MM
7772 return build2 (COMPOUND_EXPR, TREE_TYPE (member),
7773 TREE_OPERAND (rhs, 0), member);
7774 return member;
92af500d 7775 }
8d08fdba 7776
2a238a97 7777 case OFFSET_REF:
05e0b2f4
JM
7778 rhs = TREE_OPERAND (rhs, 1);
7779 if (BASELINK_P (rhs))
eff3a276 7780 return instantiate_type (lhstype, rhs, flags_in);
05e0b2f4 7781
2a238a97
MM
7782 /* This can happen if we are forming a pointer-to-member for a
7783 member template. */
50bc768d 7784 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
05e0b2f4 7785
2a238a97 7786 /* Fall through. */
874503bc 7787
386b8a85 7788 case TEMPLATE_ID_EXPR:
2bdb0643
JM
7789 {
7790 tree fns = TREE_OPERAND (rhs, 0);
7791 tree args = TREE_OPERAND (rhs, 1);
7792
19420d00 7793 return
92af500d
NS
7794 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
7795 /*template_only=*/true,
eff3a276 7796 args, access_path);
2bdb0643 7797 }
386b8a85 7798
2c73f9f5 7799 case OVERLOAD:
a723baf1 7800 case FUNCTION_DECL:
c8094d83 7801 return
92af500d
NS
7802 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
7803 /*template_only=*/false,
eff3a276
MM
7804 /*explicit_targs=*/NULL_TREE,
7805 access_path);
2c73f9f5 7806
ca36f057 7807 case ADDR_EXPR:
19420d00
NS
7808 {
7809 if (PTRMEM_OK_P (rhs))
0cbd7506 7810 flags |= tf_ptrmem_ok;
c8094d83 7811
ca36f057 7812 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
19420d00 7813 }
ca36f057
MM
7814
7815 case ERROR_MARK:
7816 return error_mark_node;
7817
7818 default:
8dc2b103 7819 gcc_unreachable ();
ca36f057 7820 }
8dc2b103 7821 return error_mark_node;
ca36f057
MM
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
94edc4ab 7831get_vfield_name (tree type)
ca36f057 7832{
37a247a0 7833 tree binfo, base_binfo;
ca36f057
MM
7834 char *buf;
7835
37a247a0 7836 for (binfo = TYPE_BINFO (type);
fa743e8c 7837 BINFO_N_BASE_BINFOS (binfo);
37a247a0
NS
7838 binfo = base_binfo)
7839 {
7840 base_binfo = BINFO_BASE_BINFO (binfo, 0);
ca36f057 7841
37a247a0
NS
7842 if (BINFO_VIRTUAL_P (base_binfo)
7843 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
7844 break;
7845 }
c8094d83 7846
ca36f057 7847 type = BINFO_TYPE (binfo);
67f5655f 7848 buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
3db45ab5 7849 + TYPE_NAME_LENGTH (type) + 2);
ea122333
JM
7850 sprintf (buf, VFIELD_NAME_FORMAT,
7851 IDENTIFIER_POINTER (constructor_name (type)));
ca36f057
MM
7852 return get_identifier (buf);
7853}
7854
7855void
94edc4ab 7856print_class_statistics (void)
ca36f057 7857{
7aa6d18a
SB
7858 if (! GATHER_STATISTICS)
7859 return;
7860
ca36f057
MM
7861 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
7862 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
ca36f057
MM
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 }
ca36f057
MM
7870}
7871
7872/* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
7873 according to [class]:
0cbd7506 7874 The class-name is also inserted
ca36f057
MM
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
94edc4ab 7879build_self_reference (void)
ca36f057
MM
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;
a3d87771 7888 SET_DECL_SELF_REFERENCE_P (value);
6f1abb06 7889 set_underlying_type (value);
ca36f057
MM
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
94edc4ab 7903is_empty_class (tree type)
ca36f057 7904{
ca36f057
MM
7905 if (type == error_mark_node)
7906 return 0;
7907
2588c9e9 7908 if (! CLASS_TYPE_P (type))
ca36f057
MM
7909 return 0;
7910
58731fd1
MM
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));
ca36f057
MM
7917}
7918
956d9305
MM
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;
fa743e8c
NS
7929 tree binfo;
7930 tree base_binfo;
956d9305
MM
7931 int i;
7932
fa743e8c
NS
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)))
956d9305
MM
7936 return true;
7937 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
17bbb839
MM
7938 if (TREE_CODE (field) == FIELD_DECL
7939 && !DECL_ARTIFICIAL (field)
7940 && is_empty_class (TREE_TYPE (field)))
956d9305
MM
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
2588c9e9 7948/* Returns true if TYPE contains no actual data, just various
0930cc0e 7949 possible combinations of empty classes and possibly a vptr. */
2588c9e9
JM
7950
7951bool
7952is_really_empty_class (tree type)
7953{
2588c9e9
JM
7954 if (CLASS_TYPE_P (type))
7955 {
7956 tree field;
7957 tree binfo;
7958 tree base_binfo;
7959 int i;
7960
0930cc0e
JM
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
2588c9e9
JM
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;
910ad8de 7970 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
2588c9e9
JM
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
ca36f057
MM
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
94edc4ab 7986maybe_note_name_used_in_class (tree name, tree decl)
ca36f057
MM
7987{
7988 splay_tree names_used;
7989
7990 /* If we're not defining a class, there's nothing to do. */
39fb05d0 7991 if (!(innermost_scope_kind() == sk_class
d5f4eddd
JM
7992 && TYPE_BEING_DEFINED (current_class_type)
7993 && !LAMBDA_TYPE_P (current_class_type)))
ca36f057 7994 return;
c8094d83 7995
ca36f057
MM
7996 /* If there's already a binding for this NAME, then we don't have
7997 anything to worry about. */
c8094d83 7998 if (lookup_member (current_class_type, name,
db422ace 7999 /*protect=*/0, /*want_type=*/false, tf_warning_or_error))
ca36f057
MM
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,
c8094d83 8008 (splay_tree_key) name,
ca36f057
MM
8009 (splay_tree_value) decl);
8010}
8011
8012/* Note that NAME was declared (as DECL) in the current class. Check
0e339752 8013 to see that the declaration is valid. */
ca36f057
MM
8014
8015void
94edc4ab 8016note_name_declared_in_class (tree name, tree decl)
ca36f057
MM
8017{
8018 splay_tree names_used;
8019 splay_tree_node n;
8020
8021 /* Look to see if we ever used this name. */
c8094d83 8022 names_used
ca36f057
MM
8023 = current_class_stack[current_class_depth - 1].names_used;
8024 if (!names_used)
8025 return;
8ce1235b
KT
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;
ca36f057
MM
8033 n = splay_tree_lookup (names_used, (splay_tree_key) name);
8034 if (n)
8035 {
8036 /* [basic.scope.class]
c8094d83 8037
ca36f057
MM
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. */
cbe5f3b3
MLI
8041 permerror (input_location, "declaration of %q#D", decl);
8042 permerror (input_location, "changes meaning of %qD from %q+#D",
2ae2031e 8043 DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
ca36f057
MM
8044 }
8045}
8046
3461fba7
NS
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. */
ca36f057 8050
c35cce41 8051tree
94edc4ab 8052get_vtbl_decl_for_binfo (tree binfo)
c35cce41
MM
8053{
8054 tree decl;
8055
8056 decl = BINFO_VTABLE (binfo);
5be014d5 8057 if (decl && TREE_CODE (decl) == POINTER_PLUS_EXPR)
c35cce41 8058 {
50bc768d 8059 gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
c35cce41
MM
8060 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
8061 }
8062 if (decl)
5a6ccc94 8063 gcc_assert (VAR_P (decl));
c35cce41
MM
8064 return decl;
8065}
8066
911a71a7 8067
dbbf88d1
NS
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. */
911a71a7 8073
b5791fdc 8074static tree
94edc4ab 8075get_primary_binfo (tree binfo)
911a71a7
MM
8076{
8077 tree primary_base;
c8094d83 8078
911a71a7
MM
8079 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
8080 if (!primary_base)
8081 return NULL_TREE;
8082
b5791fdc 8083 return copied_binfo (primary_base, binfo);
911a71a7
MM
8084}
8085
838dfd8a 8086/* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
b7442fb5
NS
8087
8088static int
94edc4ab 8089maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
b7442fb5
NS
8090{
8091 if (!indented_p)
8092 fprintf (stream, "%*s", indent, "");
8093 return 1;
8094}
8095
dbbf88d1
NS
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
9bcb9aae 8099 inheritance graph ordering. */
c35cce41 8100
dbbf88d1
NS
8101static tree
8102dump_class_hierarchy_r (FILE *stream,
0cbd7506
MS
8103 int flags,
8104 tree binfo,
8105 tree igo,
8106 int indent)
ca36f057 8107{
b7442fb5 8108 int indented = 0;
fa743e8c
NS
8109 tree base_binfo;
8110 int i;
c8094d83 8111
b7442fb5 8112 indented = maybe_indent_hierarchy (stream, indent, 0);
6c5bf58a 8113 fprintf (stream, "%s (0x" HOST_WIDE_INT_PRINT_HEX ") ",
fc6633e0 8114 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
6c5bf58a 8115 (HOST_WIDE_INT) (uintptr_t) binfo);
dbbf88d1
NS
8116 if (binfo != igo)
8117 {
8118 fprintf (stream, "alternative-path\n");
8119 return igo;
8120 }
8121 igo = TREE_CHAIN (binfo);
c8094d83 8122
9965d119 8123 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
9439e9a1 8124 tree_to_shwi (BINFO_OFFSET (binfo)));
9965d119
NS
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");
809e3e7f 8129 if (BINFO_VIRTUAL_P (binfo))
dbbf88d1 8130 fprintf (stream, " virtual");
9965d119 8131 fprintf (stream, "\n");
ca36f057 8132
b7442fb5 8133 indented = 0;
fc6633e0 8134 if (BINFO_PRIMARY_P (binfo))
b7442fb5
NS
8135 {
8136 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6c5bf58a 8137 fprintf (stream, " primary-for %s (0x" HOST_WIDE_INT_PRINT_HEX ")",
fc6633e0 8138 type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
b7442fb5 8139 TFF_PLAIN_IDENTIFIER),
6c5bf58a 8140 (HOST_WIDE_INT) (uintptr_t) BINFO_INHERITANCE_CHAIN (binfo));
b7442fb5
NS
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;
c8094d83 8153
b7442fb5
NS
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 }
c8094d83 8182
b7442fb5
NS
8183 if (indented)
8184 fprintf (stream, "\n");
8185 }
dbbf88d1 8186
fa743e8c
NS
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);
c8094d83 8189
dbbf88d1 8190 return igo;
c35cce41
MM
8191}
8192
8193/* Dump the BINFO hierarchy for T. */
8194
b7442fb5 8195static void
bb885938 8196dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
c35cce41 8197{
b7442fb5
NS
8198 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
8199 fprintf (stream, " size=%lu align=%lu\n",
9439e9a1 8200 (unsigned long)(tree_to_shwi (TYPE_SIZE (t)) / BITS_PER_UNIT),
b7442fb5 8201 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
dbbf88d1 8202 fprintf (stream, " base size=%lu base align=%lu\n",
9439e9a1 8203 (unsigned long)(tree_to_shwi (TYPE_SIZE (CLASSTYPE_AS_BASE (t)))
dbbf88d1
NS
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);
b7442fb5 8208 fprintf (stream, "\n");
bb885938
NS
8209}
8210
da1d7781 8211/* Debug interface to hierarchy dumping. */
bb885938 8212
ac1f3b7e 8213void
bb885938
NS
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 }
b7442fb5
NS
8230}
8231
8232static void
94edc4ab 8233dump_array (FILE * stream, tree decl)
b7442fb5 8234{
4038c495
GB
8235 tree value;
8236 unsigned HOST_WIDE_INT ix;
b7442fb5
NS
8237 HOST_WIDE_INT elt;
8238 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
8239
9439e9a1 8240 elt = (tree_to_shwi (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))))
b7442fb5
NS
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
4038c495
GB
8248 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
8249 ix, value)
4fdc14ca 8250 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
4038c495 8251 expr_as_string (value, TFF_PLAIN_IDENTIFIER));
b7442fb5
NS
8252}
8253
8254static void
94edc4ab 8255dump_vtable (tree t, tree binfo, tree vtable)
b7442fb5
NS
8256{
8257 int flags;
8258 FILE *stream = dump_begin (TDI_class, &flags);
8259
8260 if (!stream)
8261 return;
8262
8263 if (!(flags & TDF_SLIM))
9965d119 8264 {
b7442fb5 8265 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
c8094d83 8266
b7442fb5
NS
8267 fprintf (stream, "%s for %s",
8268 ctor_vtbl_p ? "Construction vtable" : "Vtable",
fc6633e0 8269 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
b7442fb5
NS
8270 if (ctor_vtbl_p)
8271 {
809e3e7f 8272 if (!BINFO_VIRTUAL_P (binfo))
6c5bf58a
KT
8273 fprintf (stream, " (0x" HOST_WIDE_INT_PRINT_HEX " instance)",
8274 (HOST_WIDE_INT) (uintptr_t) binfo);
b7442fb5
NS
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");
9965d119 8280 }
c8094d83 8281
b7442fb5
NS
8282 dump_end (TDI_class, stream);
8283}
8284
8285static void
94edc4ab 8286dump_vtt (tree t, tree vtt)
b7442fb5
NS
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 }
c8094d83 8301
b7442fb5 8302 dump_end (TDI_class, stream);
ca36f057
MM
8303}
8304
bb885938
NS
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;
c8094d83 8313
bb885938
NS
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>");
e00853fd 8319 if (DECL_THUNK_P (thunk))
bb885938
NS
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,
9439e9a1 8329 tree_to_shwi (virtual_adjust));
bb885938
NS
8330 else
8331 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
9439e9a1 8332 tree_to_shwi (BINFO_VPTR_FIELD (virtual_adjust)),
bb885938 8333 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
e00853fd
NS
8334 if (THUNK_ALIAS (thunk))
8335 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
bb885938
NS
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
ac1f3b7e 8344void
bb885938
NS
8345debug_thunks (tree fn)
8346{
8347 dump_thunk (stderr, 0, fn);
8348}
8349
ca36f057
MM
8350/* Virtual function table initialization. */
8351
8352/* Create all the necessary vtables for T and its base classes. */
8353
8354static void
94edc4ab 8355finish_vtbls (tree t)
ca36f057 8356{
3461fba7 8357 tree vbase;
9771b263 8358 vec<constructor_elt, va_gc> *v = NULL;
9d6a019c 8359 tree vtable = BINFO_VTABLE (TYPE_BINFO (t));
ca36f057 8360
3461fba7
NS
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. */
9d6a019c
NF
8364 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t), TYPE_BINFO (t),
8365 vtable, t, &v);
c8094d83 8366
3461fba7
NS
8367 /* Then come the virtual bases, also in inheritance graph order. */
8368 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
8369 {
809e3e7f 8370 if (!BINFO_VIRTUAL_P (vbase))
3461fba7 8371 continue;
9d6a019c 8372 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), vtable, t, &v);
ff668506
JM
8373 }
8374
604a3205 8375 if (BINFO_VTABLE (TYPE_BINFO (t)))
9d6a019c 8376 initialize_vtable (TYPE_BINFO (t), v);
ca36f057
MM
8377}
8378
8379/* Initialize the vtable for BINFO with the INITS. */
8380
8381static void
9771b263 8382initialize_vtable (tree binfo, vec<constructor_elt, va_gc> *inits)
ca36f057 8383{
ca36f057
MM
8384 tree decl;
8385
9771b263 8386 layout_vtable_decl (binfo, vec_safe_length (inits));
c35cce41 8387 decl = get_vtbl_decl_for_binfo (binfo);
19c29b2f 8388 initialize_artificial_var (decl, inits);
b7442fb5 8389 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
23656158
MM
8390}
8391
9965d119
NS
8392/* Build the VTT (virtual table table) for T.
8393 A class requires a VTT if it has virtual bases.
c8094d83 8394
9965d119
NS
8395 This holds
8396 1 - primary virtual pointer for complete object T
90ecce3e
JM
8397 2 - secondary VTTs for each direct non-virtual base of T which requires a
8398 VTT
9965d119
NS
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.
c8094d83 8402
9965d119 8403 Secondary VTTs look like complete object VTTs without part 4. */
23656158
MM
8404
8405static void
94edc4ab 8406build_vtt (tree t)
23656158 8407{
23656158
MM
8408 tree type;
8409 tree vtt;
3ec6bad3 8410 tree index;
9771b263 8411 vec<constructor_elt, va_gc> *inits;
23656158 8412
23656158 8413 /* Build up the initializers for the VTT. */
9d6a019c 8414 inits = NULL;
3ec6bad3 8415 index = size_zero_node;
9965d119 8416 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
23656158
MM
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. */
dcedcddb 8423 type = build_array_of_n_type (const_ptr_type_node,
9771b263 8424 inits->length ());
c8094d83 8425
23656158 8426 /* Now, build the VTT object itself. */
3e355d92 8427 vtt = build_vtable (t, mangle_vtt_for_type (t), type);
19c29b2f 8428 initialize_artificial_var (vtt, inits);
548502d3 8429 /* Add the VTT to the vtables list. */
910ad8de
NF
8430 DECL_CHAIN (vtt) = DECL_CHAIN (CLASSTYPE_VTABLES (t));
8431 DECL_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
b7442fb5
NS
8432
8433 dump_vtt (t, vtt);
23656158
MM
8434}
8435
13de7ec4
JM
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
00a17e31 8439 complete. VALUE can also be another BINFO, in which case we recurse. */
13de7ec4
JM
8440
8441static tree
94edc4ab 8442binfo_ctor_vtable (tree binfo)
13de7ec4
JM
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);
95b4aca6 8451 if (TREE_CODE (vt) == TREE_BINFO)
13de7ec4
JM
8452 binfo = vt;
8453 else
8454 break;
8455 }
8456
8457 return vt;
8458}
8459
a3a0fc7f
NS
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
9d6a019c 8469 /* Vector of initializers built up. */
9771b263 8470 vec<constructor_elt, va_gc> *inits;
a3a0fc7f
NS
8471
8472 /* The type being constructed by this secondary VTT. */
8473 tree type_being_constructed;
8474} secondary_vptr_vtt_init_data;
8475
23656158 8476/* Recursively build the VTT-initializer for BINFO (which is in the
9965d119
NS
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. */
23656158 8483
9d6a019c 8484static void
9771b263
DN
8485build_vtt_inits (tree binfo, tree t, vec<constructor_elt, va_gc> **inits,
8486 tree *index)
23656158
MM
8487{
8488 int i;
8489 tree b;
8490 tree init;
a3a0fc7f 8491 secondary_vptr_vtt_init_data data;
539ed333 8492 int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
23656158
MM
8493
8494 /* We only need VTTs for subobjects with virtual bases. */
5775a06a 8495 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
9d6a019c 8496 return;
23656158
MM
8497
8498 /* We need to use a construction vtable if this is not the primary
8499 VTT. */
9965d119 8500 if (!top_level_p)
3ec6bad3
MM
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 }
23656158
MM
8507
8508 /* Add the address of the primary vtable for the complete object. */
13de7ec4 8509 init = binfo_ctor_vtable (binfo);
9d6a019c 8510 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
9965d119
NS
8511 if (top_level_p)
8512 {
50bc768d 8513 gcc_assert (!BINFO_VPTR_INDEX (binfo));
9965d119
NS
8514 BINFO_VPTR_INDEX (binfo) = *index;
8515 }
3ec6bad3 8516 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
c8094d83 8517
23656158 8518 /* Recursively add the secondary VTTs for non-virtual bases. */
fa743e8c
NS
8519 for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
8520 if (!BINFO_VIRTUAL_P (b))
9d6a019c 8521 build_vtt_inits (b, t, inits, index);
c8094d83 8522
23656158 8523 /* Add secondary virtual pointers for all subobjects of BINFO with
9965d119
NS
8524 either virtual bases or reachable along a virtual path, except
8525 subobjects that are non-virtual primary bases. */
a3a0fc7f
NS
8526 data.top_level_p = top_level_p;
8527 data.index = *index;
9d6a019c 8528 data.inits = *inits;
a3a0fc7f 8529 data.type_being_constructed = BINFO_TYPE (binfo);
c8094d83 8530
5d5a519f 8531 dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
9965d119 8532
a3a0fc7f 8533 *index = data.index;
23656158 8534
9d6a019c
NF
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;
23656158 8538
9965d119 8539 if (top_level_p)
a3a0fc7f
NS
8540 /* Add the secondary VTTs for virtual bases in inheritance graph
8541 order. */
9ccf6541
MM
8542 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
8543 {
809e3e7f 8544 if (!BINFO_VIRTUAL_P (b))
9ccf6541 8545 continue;
c8094d83 8546
9d6a019c 8547 build_vtt_inits (b, t, inits, index);
9ccf6541 8548 }
a3a0fc7f
NS
8549 else
8550 /* Remove the ctor vtables we created. */
5d5a519f 8551 dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
23656158
MM
8552}
8553
8df83eae 8554/* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
a3a0fc7f 8555 in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure. */
23656158
MM
8556
8557static tree
a3a0fc7f 8558dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
23656158 8559{
a3a0fc7f 8560 secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
23656158 8561
23656158
MM
8562 /* We don't care about bases that don't have vtables. */
8563 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
5d5a519f 8564 return dfs_skip_bases;
23656158 8565
a3a0fc7f
NS
8566 /* We're only interested in proper subobjects of the type being
8567 constructed. */
539ed333 8568 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
23656158
MM
8569 return NULL_TREE;
8570
a3a0fc7f
NS
8571 /* We're only interested in bases with virtual bases or reachable
8572 via a virtual path from the type being constructed. */
5d5a519f
NS
8573 if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
8574 || binfo_via_virtual (binfo, data->type_being_constructed)))
8575 return dfs_skip_bases;
c8094d83 8576
5d5a519f
NS
8577 /* We're not interested in non-virtual primary bases. */
8578 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
db3d8cde 8579 return NULL_TREE;
c8094d83 8580
3ec6bad3 8581 /* Record the index where this secondary vptr can be found. */
a3a0fc7f 8582 if (data->top_level_p)
9965d119 8583 {
50bc768d 8584 gcc_assert (!BINFO_VPTR_INDEX (binfo));
a3a0fc7f 8585 BINFO_VPTR_INDEX (binfo) = data->index;
3ec6bad3 8586
a3a0fc7f
NS
8587 if (BINFO_VIRTUAL_P (binfo))
8588 {
0cbd7506
MS
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. */
a3a0fc7f
NS
8593 while (BINFO_PRIMARY_P (binfo))
8594 binfo = BINFO_INHERITANCE_CHAIN (binfo);
8595 }
9965d119 8596 }
c8094d83 8597
a3a0fc7f 8598 /* Add the initializer for the secondary vptr itself. */
9d6a019c 8599 CONSTRUCTOR_APPEND_ELT (data->inits, NULL_TREE, binfo_ctor_vtable (binfo));
23656158 8600
a3a0fc7f
NS
8601 /* Advance the vtt index. */
8602 data->index = size_binop (PLUS_EXPR, data->index,
8603 TYPE_SIZE_UNIT (ptr_type_node));
9965d119 8604
a3a0fc7f 8605 return NULL_TREE;
9965d119
NS
8606}
8607
a3a0fc7f
NS
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. */
23656158
MM
8612
8613static tree
94edc4ab 8614dfs_fixup_binfo_vtbls (tree binfo, void* data)
23656158 8615{
a3a0fc7f 8616 tree vtable = BINFO_VTABLE (binfo);
23656158 8617
5d5a519f
NS
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;
c8094d83 8621
5d5a519f
NS
8622 if (!vtable)
8623 /* This might be a primary base, so have no vtable in this
8624 hierarchy. */
8625 return NULL_TREE;
c8094d83 8626
23656158
MM
8627 /* If we scribbled the construction vtable vptr into BINFO, clear it
8628 out now. */
5d5a519f 8629 if (TREE_CODE (vtable) == TREE_LIST
a3a0fc7f
NS
8630 && (TREE_PURPOSE (vtable) == (tree) data))
8631 BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
23656158
MM
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
94edc4ab 8640build_ctor_vtbl_group (tree binfo, tree t)
23656158 8641{
23656158
MM
8642 tree type;
8643 tree vtbl;
23656158 8644 tree id;
9ccf6541 8645 tree vbase;
9771b263 8646 vec<constructor_elt, va_gc> *v;
23656158 8647
7bdcf888 8648 /* See if we've already created this construction vtable group. */
1f84ec23 8649 id = mangle_ctor_vtbl_for_type (t, binfo);
23656158
MM
8650 if (IDENTIFIER_GLOBAL_VALUE (id))
8651 return;
8652
539ed333 8653 gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
23656158
MM
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. */
459c43ad 8657 vtbl = build_vtable (t, id, ptr_type_node);
505970fc 8658 DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
2ee8a2d5
JM
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;
9d6a019c
NF
8665
8666 v = NULL;
23656158 8667 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
9d6a019c 8668 binfo, vtbl, t, &v);
9965d119
NS
8669
8670 /* Add the vtables for each of our virtual bases using the vbase in T
8671 binfo. */
c8094d83
MS
8672 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
8673 vbase;
9ccf6541
MM
8674 vbase = TREE_CHAIN (vbase))
8675 {
8676 tree b;
8677
809e3e7f 8678 if (!BINFO_VIRTUAL_P (vbase))
9ccf6541 8679 continue;
dbbf88d1 8680 b = copied_binfo (vbase, binfo);
c8094d83 8681
9d6a019c 8682 accumulate_vtbl_inits (b, vbase, binfo, vtbl, t, &v);
9ccf6541 8683 }
23656158
MM
8684
8685 /* Figure out the type of the construction vtable. */
9771b263 8686 type = build_array_of_n_type (vtable_entry_type, v->length ());
8208d7dc 8687 layout_type (type);
23656158 8688 TREE_TYPE (vtbl) = type;
8208d7dc
DJ
8689 DECL_SIZE (vtbl) = DECL_SIZE_UNIT (vtbl) = NULL_TREE;
8690 layout_decl (vtbl, 0);
23656158
MM
8691
8692 /* Initialize the construction vtable. */
548502d3 8693 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
9d6a019c 8694 initialize_artificial_var (vtbl, v);
b7442fb5 8695 dump_vtable (t, binfo, vtbl);
23656158
MM
8696}
8697
9965d119
NS
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. */
ca36f057
MM
8707
8708static void
94edc4ab 8709accumulate_vtbl_inits (tree binfo,
0cbd7506
MS
8710 tree orig_binfo,
8711 tree rtti_binfo,
9d6a019c 8712 tree vtbl,
0cbd7506 8713 tree t,
9771b263 8714 vec<constructor_elt, va_gc> **inits)
ca36f057 8715{
23656158 8716 int i;
fa743e8c 8717 tree base_binfo;
539ed333 8718 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
23656158 8719
539ed333 8720 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
23656158 8721
00a17e31 8722 /* If it doesn't have a vptr, we don't do anything. */
623fe76a
NS
8723 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
8724 return;
c8094d83 8725
23656158
MM
8726 /* If we're building a construction vtable, we're not interested in
8727 subobjects that don't require construction vtables. */
c8094d83 8728 if (ctor_vtbl_p
5775a06a 8729 && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
9965d119 8730 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
23656158
MM
8731 return;
8732
8733 /* Build the initializers for the BINFO-in-T vtable. */
9d6a019c 8734 dfs_accumulate_vtbl_inits (binfo, orig_binfo, rtti_binfo, vtbl, t, inits);
c8094d83 8735
c35cce41
MM
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
23656158
MM
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. */
fa743e8c 8741 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
23656158 8742 {
23656158 8743 /* Skip virtual bases. */
809e3e7f 8744 if (BINFO_VIRTUAL_P (base_binfo))
23656158
MM
8745 continue;
8746 accumulate_vtbl_inits (base_binfo,
604a3205 8747 BINFO_BASE_BINFO (orig_binfo, i),
9d6a019c 8748 rtti_binfo, vtbl, t,
23656158
MM
8749 inits);
8750 }
ca36f057
MM
8751}
8752
9d6a019c
NF
8753/* Called from accumulate_vtbl_inits. Adds the initializers for the
8754 BINFO vtable to L. */
ca36f057 8755
9d6a019c 8756static void
94edc4ab 8757dfs_accumulate_vtbl_inits (tree binfo,
0cbd7506
MS
8758 tree orig_binfo,
8759 tree rtti_binfo,
9d6a019c 8760 tree orig_vtbl,
0cbd7506 8761 tree t,
9771b263 8762 vec<constructor_elt, va_gc> **l)
ca36f057 8763{
9965d119 8764 tree vtbl = NULL_TREE;
539ed333 8765 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
9d6a019c 8766 int n_inits;
9965d119 8767
13de7ec4 8768 if (ctor_vtbl_p
809e3e7f 8769 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
9965d119 8770 {
13de7ec4
JM
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.
c8094d83 8778
13de7ec4 8779 There are three possible cases:
c8094d83 8780
13de7ec4
JM
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.
049d2def 8784 3) We are primary to something not a base of RTTI_BINFO. */
c8094d83 8785
fc6633e0 8786 tree b;
13de7ec4 8787 tree last = NULL_TREE;
85a9a0a2 8788
13de7ec4
JM
8789 /* First, look through the bases we are primary to for RTTI_BINFO
8790 or a virtual base. */
fc6633e0
NS
8791 b = binfo;
8792 while (BINFO_PRIMARY_P (b))
7bdcf888 8793 {
fc6633e0 8794 b = BINFO_INHERITANCE_CHAIN (b);
13de7ec4 8795 last = b;
809e3e7f 8796 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
fc6633e0 8797 goto found;
7bdcf888 8798 }
13de7ec4
JM
8799 /* If we run out of primary links, keep looking down our
8800 inheritance chain; we might be an indirect primary. */
fc6633e0
NS
8801 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
8802 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
8803 break;
8804 found:
c8094d83 8805
13de7ec4
JM
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
58c42dc2 8811 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
049d2def
JM
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;
13de7ec4 8816
049d2def 8817 /* Otherwise, this is case 3 and we get our own. */
9965d119 8818 }
dbbf88d1 8819 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
9d6a019c
NF
8820 return;
8821
9771b263 8822 n_inits = vec_safe_length (*l);
7bdcf888 8823
9965d119 8824 if (!vtbl)
ca36f057 8825 {
c35cce41
MM
8826 tree index;
8827 int non_fn_entries;
8828
9d6a019c
NF
8829 /* Add the initializer for this vtable. */
8830 build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
8831 &non_fn_entries, l);
c35cce41 8832
23656158 8833 /* Figure out the position to which the VPTR should point. */
9d6a019c 8834 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, orig_vtbl);
23656158
MM
8835 index = size_binop (MULT_EXPR,
8836 TYPE_SIZE_UNIT (vtable_entry_type),
5d49b6a7
RG
8837 size_int (non_fn_entries + n_inits));
8838 vtbl = fold_build_pointer_plus (vtbl, index);
9965d119 8839 }
23656158 8840
7bdcf888 8841 if (ctor_vtbl_p)
9965d119
NS
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));
809e3e7f 8846 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
9d6a019c 8847 /* Throw away any unneeded intializers. */
9771b263 8848 (*l)->truncate (n_inits);
7bdcf888
NS
8849 else
8850 /* For an ordinary vtable, set BINFO_VTABLE. */
8851 BINFO_VTABLE (binfo) = vtbl;
ca36f057
MM
8852}
8853
1b746b0f
AP
8854static GTY(()) tree abort_fndecl_addr;
8855
90ecce3e 8856/* Construct the initializer for BINFO's virtual function table. BINFO
aabb4cd6 8857 is part of the hierarchy dominated by T. If we're building a
23656158 8858 construction vtable, the ORIG_BINFO is the binfo we should use to
9965d119
NS
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,
911a71a7 8862 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
23656158
MM
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.
aabb4cd6
MM
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
c8094d83 8870 number of non-function entries in the vtable.
911a71a7
MM
8871
8872 It might seem that this function should never be called with a
9965d119 8873 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
911a71a7 8874 base is always subsumed by a derived class vtable. However, when
9965d119 8875 we are building construction vtables, we do build vtables for
911a71a7
MM
8876 primary bases; we need these while the primary base is being
8877 constructed. */
ca36f057 8878
9d6a019c 8879static void
94edc4ab 8880build_vtbl_initializer (tree binfo,
0cbd7506
MS
8881 tree orig_binfo,
8882 tree t,
8883 tree rtti_binfo,
9d6a019c 8884 int* non_fn_entries_p,
9771b263 8885 vec<constructor_elt, va_gc> **inits)
ca36f057 8886{
02dea3ff 8887 tree v;
911a71a7 8888 vtbl_init_data vid;
9d6a019c 8889 unsigned ix, jx;
58c42dc2 8890 tree vbinfo;
9771b263 8891 vec<tree, va_gc> *vbases;
9d6a019c 8892 constructor_elt *e;
c8094d83 8893
911a71a7 8894 /* Initialize VID. */
961192e1 8895 memset (&vid, 0, sizeof (vid));
911a71a7
MM
8896 vid.binfo = binfo;
8897 vid.derived = t;
73ea87d7 8898 vid.rtti_binfo = rtti_binfo;
539ed333
NS
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);
548502d3 8901 vid.generate_vcall_entries = true;
c35cce41 8902 /* The first vbase or vcall offset is at index -3 in the vtable. */
ce552f75 8903 vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
c35cce41 8904
9bab6c90 8905 /* Add entries to the vtable for RTTI. */
73ea87d7 8906 build_rtti_vtbl_entries (binfo, &vid);
9bab6c90 8907
b485e15b
MM
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. */
9771b263 8911 vec_alloc (vid.fns, 32);
c35cce41 8912 /* Add the vcall and vbase offset entries. */
911a71a7 8913 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
c8094d83 8914
79cda2d1 8915 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
c35cce41 8916 build_vbase_offset_vtbl_entries. */
9ba5ff0f 8917 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
9771b263 8918 vec_safe_iterate (vbases, ix, &vbinfo); ix++)
58c42dc2 8919 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
ca36f057 8920
a6f5e048
RH
8921 /* If the target requires padding between data entries, add that now. */
8922 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
8923 {
9771b263 8924 int n_entries = vec_safe_length (vid.inits);
9d6a019c 8925
9771b263 8926 vec_safe_grow (vid.inits, TARGET_VTABLE_DATA_ENTRY_DISTANCE * n_entries);
a6f5e048 8927
9d6a019c
NF
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;
9771b263 8932 vid.inits->iterate (ix, &e);
9d6a019c 8933 ix--)
a6f5e048 8934 {
9d6a019c 8935 int j;
25d8a217
NF
8936 int new_position = (TARGET_VTABLE_DATA_ENTRY_DISTANCE * ix
8937 + (TARGET_VTABLE_DATA_ENTRY_DISTANCE - 1));
9d6a019c 8938
9771b263 8939 (*vid.inits)[new_position] = *e;
a6f5e048 8940
9d6a019c
NF
8941 for (j = 1; j < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++j)
8942 {
9771b263 8943 constructor_elt *f = &(*vid.inits)[new_position - j];
9d6a019c
NF
8944 f->index = NULL_TREE;
8945 f->value = build1 (NOP_EXPR, vtable_entry_type,
8946 null_pointer_node);
8947 }
a6f5e048
RH
8948 }
8949 }
8950
c35cce41 8951 if (non_fn_entries_p)
9771b263 8952 *non_fn_entries_p = vec_safe_length (vid.inits);
9d6a019c
NF
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. */
9771b263
DN
8957 jx = vec_safe_length (*inits);
8958 vec_safe_grow (*inits, jx + vid.inits->length ());
9d6a019c 8959
9771b263
DN
8960 for (ix = vid.inits->length () - 1;
8961 vid.inits->iterate (ix, &e);
9d6a019c 8962 ix--, jx++)
9771b263 8963 (**inits)[jx] = *e;
ca36f057
MM
8964
8965 /* Go through all the ordinary virtual functions, building up
8966 initializers. */
23656158 8967 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
ca36f057
MM
8968 {
8969 tree delta;
8970 tree vcall_index;
4977bab6 8971 tree fn, fn_original;
f11ee281 8972 tree init = NULL_TREE;
c8094d83 8973
ca36f057 8974 fn = BV_FN (v);
07fa4878
NS
8975 fn_original = fn;
8976 if (DECL_THUNK_P (fn))
4977bab6 8977 {
07fa4878
NS
8978 if (!DECL_NAME (fn))
8979 finish_thunk (fn);
e00853fd 8980 if (THUNK_ALIAS (fn))
bb885938
NS
8981 {
8982 fn = THUNK_ALIAS (fn);
8983 BV_FN (v) = fn;
8984 }
07fa4878 8985 fn_original = THUNK_TARGET (fn);
4977bab6 8986 }
c8094d83 8987
d0cd8b44
JM
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
f11ee281
JM
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
39a13be5 8995 zero out unused slots in ctor vtables, rather than filling them
f11ee281
JM
8996 with erroneous values (though harmless, apart from relocation
8997 costs). */
02dea3ff
JM
8998 if (BV_LOST_PRIMARY (v))
8999 init = size_zero_node;
d0cd8b44 9000
f11ee281
JM
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);
548502d3 9006 vcall_index = BV_VCALL_INDEX (v);
f11ee281 9007
50bc768d
NS
9008 gcc_assert (TREE_CODE (delta) == INTEGER_CST);
9009 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
f11ee281
JM
9010
9011 /* You can't call an abstract virtual function; it's abstract.
9012 So, we replace these functions with __pure_virtual. */
4977bab6 9013 if (DECL_PURE_VIRTUAL_P (fn_original))
4977bab6 9014 {
1b746b0f 9015 fn = abort_fndecl;
21b6aca3
JJ
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 }
1b746b0f 9024 }
4ce7d589
JM
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)),
8595a07d 9032 NULL_TREE, ECF_NORETURN);
4ce7d589
JM
9033 if (!TARGET_VTABLE_USES_DESCRIPTORS)
9034 init = fold_convert (vfunc_ptr_type_node,
9035 build_fold_addr_expr (fn));
9036 }
1b746b0f
AP
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. */
21b6aca3
JJ
9047 if (!TARGET_VTABLE_USES_DESCRIPTORS)
9048 init = fold_convert (vfunc_ptr_type_node,
9049 build_fold_addr_expr (fn));
d74db8ff
JM
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;
4977bab6 9060 }
f11ee281 9061 }
d0cd8b44 9062
ca36f057 9063 /* And add it to the chain of initializers. */
67231816
RH
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)
9d6a019c 9069 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
67231816
RH
9070 else
9071 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
9072 {
f293ce4b 9073 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
21b6aca3 9074 fn, build_int_cst (NULL_TREE, i));
67231816
RH
9075 TREE_CONSTANT (fdesc) = 1;
9076
9d6a019c 9077 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, fdesc);
67231816
RH
9078 }
9079 }
9080 else
9d6a019c 9081 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
ca36f057 9082 }
ca36f057
MM
9083}
9084
d0cd8b44 9085/* Adds to vid->inits the initializers for the vbase and vcall
c35cce41 9086 offsets in BINFO, which is in the hierarchy dominated by T. */
ca36f057 9087
c35cce41 9088static void
94edc4ab 9089build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
ca36f057 9090{
c35cce41 9091 tree b;
8d08fdba 9092
c35cce41 9093 /* If this is a derived class, we must first create entries
9bab6c90 9094 corresponding to the primary base class. */
911a71a7 9095 b = get_primary_binfo (binfo);
c35cce41 9096 if (b)
911a71a7 9097 build_vcall_and_vbase_vtbl_entries (b, vid);
c35cce41
MM
9098
9099 /* Add the vbase entries for this base. */
911a71a7 9100 build_vbase_offset_vtbl_entries (binfo, vid);
c35cce41 9101 /* Add the vcall entries for this base. */
911a71a7 9102 build_vcall_offset_vtbl_entries (binfo, vid);
ca36f057 9103}
8d08fdba 9104
ca36f057
MM
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
c35cce41
MM
9107 reverse order. VBASE_OFFSET_INDEX gives the vtable index
9108 where the next vbase offset will go. */
8d08fdba 9109
c35cce41 9110static void
94edc4ab 9111build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
ca36f057 9112{
c35cce41
MM
9113 tree vbase;
9114 tree t;
90b1ca2f 9115 tree non_primary_binfo;
8d08fdba 9116
ca36f057
MM
9117 /* If there are no virtual baseclasses, then there is nothing to
9118 do. */
5775a06a 9119 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
c35cce41 9120 return;
ca36f057 9121
911a71a7 9122 t = vid->derived;
c8094d83 9123
90b1ca2f
NS
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. */
809e3e7f 9136 if (BINFO_VIRTUAL_P (non_primary_binfo))
90b1ca2f
NS
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 }
ca36f057 9147
c35cce41
MM
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;
c8094d83 9155
809e3e7f 9156 if (!BINFO_VIRTUAL_P (vbase))
c35cce41 9157 continue;
ca36f057 9158
c35cce41
MM
9159 /* Find the instance of this virtual base in the complete
9160 object. */
dbbf88d1 9161 b = copied_binfo (vbase, binfo);
c35cce41
MM
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;
dbbf88d1 9167 BINFO_VTABLE_PATH_MARKED (b) = 1;
c35cce41
MM
9168
9169 /* Figure out where we can find this vbase offset. */
c8094d83 9170 delta = size_binop (MULT_EXPR,
911a71a7 9171 vid->index,
c35cce41
MM
9172 convert (ssizetype,
9173 TYPE_SIZE_UNIT (vtable_entry_type)));
911a71a7 9174 if (vid->primary_vtbl_p)
c35cce41
MM
9175 BINFO_VPTR_FIELD (b) = delta;
9176
9177 if (binfo != TYPE_BINFO (t))
50bc768d
NS
9178 /* The vbase offset had better be the same. */
9179 gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
c35cce41
MM
9180
9181 /* The next vbase will come at a more negative offset. */
a6f5e048
RH
9182 vid->index = size_binop (MINUS_EXPR, vid->index,
9183 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
c35cce41
MM
9184
9185 /* The initializer is the delta from BINFO to this virtual base.
4e7512c9
MM
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. */
db3927fb
AH
9189 delta = size_diffop_loc (input_location,
9190 BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
c8094d83 9191
9d6a019c
NF
9192 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE,
9193 fold_build1_loc (input_location, NOP_EXPR,
9194 vtable_entry_type, delta));
c35cce41 9195 }
8d08fdba 9196}
ca36f057 9197
b485e15b 9198/* Adds the initializers for the vcall offset entries in the vtable
d0cd8b44
JM
9199 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
9200 to VID->INITS. */
b485e15b
MM
9201
9202static void
94edc4ab 9203build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
b485e15b 9204{
548502d3
MM
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. */
b9302915
MM
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))
548502d3
MM
9216 {
9217 /* We need a vcall offset for each of the virtual functions in this
9218 vtable. For example:
b485e15b 9219
548502d3
MM
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 (); };
d0cd8b44 9224
548502d3
MM
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.
b485e15b 9232
548502d3
MM
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. */
809e3e7f 9238 if (!BINFO_VIRTUAL_P (binfo))
548502d3
MM
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 }
b485e15b
MM
9243}
9244
9245/* Build vcall offsets, starting with those for BINFO. */
9246
9247static void
94edc4ab 9248add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
b485e15b
MM
9249{
9250 int i;
9251 tree primary_binfo;
fa743e8c 9252 tree base_binfo;
b485e15b
MM
9253
9254 /* Don't walk into virtual bases -- except, of course, for the
d0cd8b44
JM
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. */
809e3e7f 9258 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
b485e15b 9259 return;
c8094d83 9260
b485e15b
MM
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. */
fa743e8c
NS
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);
b485e15b
MM
9273}
9274
9965d119 9275/* Called from build_vcall_offset_vtbl_entries_r. */
e92cc029 9276
b485e15b 9277static void
94edc4ab 9278add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
8d08fdba 9279{
e6a66567
MM
9280 /* Make entries for the rest of the virtuals. */
9281 if (abi_version_at_least (2))
31f8e4f3 9282 {
e6a66567 9283 tree orig_fn;
911a71a7 9284
e6a66567
MM
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;
910ad8de 9289 orig_fn = DECL_CHAIN (orig_fn))
e6a66567 9290 if (DECL_VINDEX (orig_fn))
95675950 9291 add_vcall_offset (orig_fn, binfo, vid);
e6a66567
MM
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))
911a71a7 9307 {
e6a66567
MM
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. */
809e3e7f 9316 if (BINFO_VIRTUAL_P (non_primary_binfo))
e6a66567 9317 {
8dc2b103 9318 gcc_assert (non_primary_binfo == vid->vbase);
e6a66567
MM
9319 non_primary_binfo = vid->binfo;
9320 break;
9321 }
911a71a7 9322
e6a66567
MM
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 }
4e7512c9 9328
e6a66567
MM
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. */
dbbf88d1
NS
9332 non_primary_binfo
9333 = original_binfo (non_primary_binfo, vid->rtti_binfo);
c8094d83 9334
e6a66567
MM
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;
73ea87d7 9344
e6a66567
MM
9345 /* Find the declaration that originally caused this function to
9346 be present in BINFO_TYPE (binfo). */
9347 orig_fn = BV_FN (orig_virtuals);
9bab6c90 9348
e6a66567
MM
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. */
539ed333 9352 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), DECL_CONTEXT (orig_fn)))
e6a66567 9353 continue;
b485e15b 9354
95675950 9355 add_vcall_offset (orig_fn, binfo, vid);
e6a66567
MM
9356 }
9357 }
9358}
b485e15b 9359
95675950 9360/* Add a vcall offset entry for ORIG_FN to the vtable. */
b485e15b 9361
e6a66567 9362static void
95675950 9363add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
e6a66567
MM
9364{
9365 size_t i;
9366 tree vcall_offset;
1e625046 9367 tree derived_entry;
9bab6c90 9368
e6a66567
MM
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. */
9771b263 9373 FOR_EACH_VEC_SAFE_ELT (vid->fns, i, derived_entry)
e6a66567 9374 {
e6a66567
MM
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 }
4e7512c9 9382
e6a66567
MM
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))
0871761b 9387 {
f32682ca 9388 tree_pair_s elt = {orig_fn, vid->index};
9771b263 9389 vec_safe_push (CLASSTYPE_VCALL_INDICES (vid->derived), elt);
0871761b 9390 }
c8094d83 9391
e6a66567
MM
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. */
9771b263 9398 vec_safe_push (vid->fns, orig_fn);
e6a66567
MM
9399
9400 if (vid->generate_vcall_entries)
9401 {
9402 tree base;
e6a66567 9403 tree fn;
548502d3 9404
e6a66567 9405 /* Find the overriding function. */
95675950 9406 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
e6a66567 9407 if (fn == error_mark_node)
e8160c9a 9408 vcall_offset = build_zero_cst (vtable_entry_type);
e6a66567
MM
9409 else
9410 {
95675950
MM
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. */
db3927fb
AH
9417 vcall_offset = size_diffop_loc (input_location,
9418 BINFO_OFFSET (base),
95675950 9419 BINFO_OFFSET (vid->binfo));
db3927fb
AH
9420 vcall_offset = fold_build1_loc (input_location,
9421 NOP_EXPR, vtable_entry_type,
7866705a 9422 vcall_offset);
548502d3 9423 }
34cd5ae7 9424 /* Add the initializer to the vtable. */
9d6a019c 9425 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, vcall_offset);
c35cce41 9426 }
570221c2 9427}
b54ccf71 9428
34cd5ae7 9429/* Return vtbl initializers for the RTTI entries corresponding to the
aabb4cd6 9430 BINFO's vtable. The RTTI entries should indicate the object given
73ea87d7 9431 by VID->rtti_binfo. */
b54ccf71 9432
9bab6c90 9433static void
94edc4ab 9434build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
b54ccf71 9435{
ca36f057 9436 tree b;
aabb4cd6 9437 tree t;
ca36f057
MM
9438 tree offset;
9439 tree decl;
9440 tree init;
b54ccf71 9441
73ea87d7 9442 t = BINFO_TYPE (vid->rtti_binfo);
b54ccf71 9443
ca36f057
MM
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;
9965d119 9447 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
0cbd7506 9448 && !BINFO_LOST_PRIMARY_P (b))
b54ccf71 9449 {
c35cce41
MM
9450 tree primary_base;
9451
911a71a7 9452 primary_base = get_primary_binfo (b);
fc6633e0
NS
9453 gcc_assert (BINFO_PRIMARY_P (primary_base)
9454 && BINFO_INHERITANCE_CHAIN (primary_base) == b);
c35cce41 9455 b = primary_base;
b54ccf71 9456 }
db3927fb
AH
9457 offset = size_diffop_loc (input_location,
9458 BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
8f032717 9459
8fa33dfa
MM
9460 /* The second entry is the address of the typeinfo object. */
9461 if (flag_rtti)
7993382e 9462 decl = build_address (get_tinfo_decl (t));
ca36f057 9463 else
8fa33dfa 9464 decl = integer_zero_node;
c8094d83 9465
8fa33dfa
MM
9466 /* Convert the declaration to a type that can be stored in the
9467 vtable. */
7993382e 9468 init = build_nop (vfunc_ptr_type_node, decl);
9d6a019c 9469 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
8f032717 9470
78dcd41a
VR
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
c4372ef4 9473 function pointer, so that we can put it in the vtable. */
7993382e 9474 init = build_nop (vfunc_ptr_type_node, offset);
9d6a019c 9475 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
8f032717 9476}
0f59171d 9477
22854930
PC
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
3a6a88c8
JM
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
1b746b0f 9524#include "gt-cp-class.h"