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