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