]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/class.c
re PR rtl-optimization/67447 (ICE in extract_constrain_insn (reload_cse_simplify_oper...
[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;
58010b57 4573 }
58010b57
MM
4574}
4575
db9b2174
MM
4576/* FN is a constructor or destructor. Clone the declaration to create
4577 a specialized in-charge or not-in-charge version, as indicated by
4578 NAME. */
4579
4580static tree
94edc4ab 4581build_clone (tree fn, tree name)
db9b2174
MM
4582{
4583 tree parms;
4584 tree clone;
4585
4586 /* Copy the function. */
4587 clone = copy_decl (fn);
db9b2174
MM
4588 /* Reset the function name. */
4589 DECL_NAME (clone) = name;
b97e8a14
JM
4590 /* Remember where this function came from. */
4591 DECL_ABSTRACT_ORIGIN (clone) = fn;
4592 /* Make it easy to find the CLONE given the FN. */
910ad8de
NF
4593 DECL_CHAIN (clone) = DECL_CHAIN (fn);
4594 DECL_CHAIN (fn) = clone;
b97e8a14
JM
4595
4596 /* If this is a template, do the rest on the DECL_TEMPLATE_RESULT. */
4597 if (TREE_CODE (clone) == TEMPLATE_DECL)
4598 {
4599 tree result = build_clone (DECL_TEMPLATE_RESULT (clone), name);
4600 DECL_TEMPLATE_RESULT (clone) = result;
4601 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
4602 DECL_TI_TEMPLATE (result) = clone;
4603 TREE_TYPE (clone) = TREE_TYPE (result);
4604 return clone;
4605 }
971e17ff
AS
4606 else
4607 {
4608 // Clone constraints.
4609 if (flag_concepts)
4610 if (tree ci = get_constraints (fn))
4611 set_constraints (clone, copy_node (ci));
4612 }
4613
b97e8a14 4614
ad115a3c 4615 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
b97e8a14 4616 DECL_CLONED_FUNCTION (clone) = fn;
db9b2174
MM
4617 /* There's no pending inline data for this function. */
4618 DECL_PENDING_INLINE_INFO (clone) = NULL;
4619 DECL_PENDING_INLINE_P (clone) = 0;
db9b2174 4620
298d6f60
MM
4621 /* The base-class destructor is not virtual. */
4622 if (name == base_dtor_identifier)
4623 {
4624 DECL_VIRTUAL_P (clone) = 0;
4625 if (TREE_CODE (clone) != TEMPLATE_DECL)
4626 DECL_VINDEX (clone) = NULL_TREE;
4627 }
4628
4e7512c9 4629 /* If there was an in-charge parameter, drop it from the function
db9b2174
MM
4630 type. */
4631 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4632 {
4633 tree basetype;
4634 tree parmtypes;
4635 tree exceptions;
4636
4637 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
4638 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4639 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
4640 /* Skip the `this' parameter. */
4641 parmtypes = TREE_CHAIN (parmtypes);
4642 /* Skip the in-charge parameter. */
4643 parmtypes = TREE_CHAIN (parmtypes);
e0fff4b3
JM
4644 /* And the VTT parm, in a complete [cd]tor. */
4645 if (DECL_HAS_VTT_PARM_P (fn)
4646 && ! DECL_NEEDS_VTT_PARM_P (clone))
4647 parmtypes = TREE_CHAIN (parmtypes);
3ec6bad3
MM
4648 /* If this is subobject constructor or destructor, add the vtt
4649 parameter. */
c8094d83 4650 TREE_TYPE (clone)
43dc123f
MM
4651 = build_method_type_directly (basetype,
4652 TREE_TYPE (TREE_TYPE (clone)),
4653 parmtypes);
db9b2174
MM
4654 if (exceptions)
4655 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
4656 exceptions);
c8094d83 4657 TREE_TYPE (clone)
e9525111
MM
4658 = cp_build_type_attribute_variant (TREE_TYPE (clone),
4659 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
db9b2174
MM
4660 }
4661
b97e8a14
JM
4662 /* Copy the function parameters. */
4663 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
4664 /* Remove the in-charge parameter. */
4665 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4666 {
910ad8de
NF
4667 DECL_CHAIN (DECL_ARGUMENTS (clone))
4668 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
b97e8a14
JM
4669 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
4670 }
4671 /* And the VTT parm, in a complete [cd]tor. */
4672 if (DECL_HAS_VTT_PARM_P (fn))
db9b2174 4673 {
b97e8a14
JM
4674 if (DECL_NEEDS_VTT_PARM_P (clone))
4675 DECL_HAS_VTT_PARM_P (clone) = 1;
4676 else
db9b2174 4677 {
910ad8de
NF
4678 DECL_CHAIN (DECL_ARGUMENTS (clone))
4679 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
b97e8a14 4680 DECL_HAS_VTT_PARM_P (clone) = 0;
3ec6bad3 4681 }
b97e8a14 4682 }
3ec6bad3 4683
910ad8de 4684 for (parms = DECL_ARGUMENTS (clone); parms; parms = DECL_CHAIN (parms))
b97e8a14
JM
4685 {
4686 DECL_CONTEXT (parms) = clone;
4687 cxx_dup_lang_specific_decl (parms);
db9b2174
MM
4688 }
4689
db9b2174 4690 /* Create the RTL for this function. */
245763e3 4691 SET_DECL_RTL (clone, NULL);
0e6df31e 4692 rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
c8094d83 4693
b97e8a14
JM
4694 return clone;
4695}
db9b2174 4696
b97e8a14
JM
4697/* Implementation of DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P, do
4698 not invoke this function directly.
4699
4700 For a non-thunk function, returns the address of the slot for storing
4701 the function it is a clone of. Otherwise returns NULL_TREE.
4702
4703 If JUST_TESTING, looks through TEMPLATE_DECL and returns NULL if
4704 cloned_function is unset. This is to support the separate
4705 DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P modes; using the latter
4706 on a template makes sense, but not the former. */
4707
4708tree *
4709decl_cloned_function_p (const_tree decl, bool just_testing)
4710{
4711 tree *ptr;
4712 if (just_testing)
4713 decl = STRIP_TEMPLATE (decl);
4714
4715 if (TREE_CODE (decl) != FUNCTION_DECL
4716 || !DECL_LANG_SPECIFIC (decl)
4717 || DECL_LANG_SPECIFIC (decl)->u.fn.thunk_p)
4718 {
4719#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
4720 if (!just_testing)
4721 lang_check_failed (__FILE__, __LINE__, __FUNCTION__);
4722 else
4723#endif
4724 return NULL;
db9b2174
MM
4725 }
4726
b97e8a14
JM
4727 ptr = &DECL_LANG_SPECIFIC (decl)->u.fn.u5.cloned_function;
4728 if (just_testing && *ptr == NULL_TREE)
4729 return NULL;
4730 else
4731 return ptr;
db9b2174
MM
4732}
4733
4734/* Produce declarations for all appropriate clones of FN. If
838dfd8a 4735 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
db9b2174
MM
4736 CLASTYPE_METHOD_VEC as well. */
4737
4738void
94edc4ab 4739clone_function_decl (tree fn, int update_method_vec_p)
db9b2174
MM
4740{
4741 tree clone;
4742
c00996a3 4743 /* Avoid inappropriate cloning. */
910ad8de
NF
4744 if (DECL_CHAIN (fn)
4745 && DECL_CLONED_FUNCTION_P (DECL_CHAIN (fn)))
c00996a3
JM
4746 return;
4747
298d6f60 4748 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
db9b2174 4749 {
298d6f60
MM
4750 /* For each constructor, we need two variants: an in-charge version
4751 and a not-in-charge version. */
db9b2174
MM
4752 clone = build_clone (fn, complete_ctor_identifier);
4753 if (update_method_vec_p)
b2a9b208 4754 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
db9b2174
MM
4755 clone = build_clone (fn, base_ctor_identifier);
4756 if (update_method_vec_p)
b2a9b208 4757 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
db9b2174
MM
4758 }
4759 else
298d6f60 4760 {
50bc768d 4761 gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
298d6f60 4762
3ec6bad3 4763 /* For each destructor, we need three variants: an in-charge
298d6f60 4764 version, a not-in-charge version, and an in-charge deleting
4e7512c9
MM
4765 version. We clone the deleting version first because that
4766 means it will go second on the TYPE_METHODS list -- and that
4767 corresponds to the correct layout order in the virtual
c8094d83 4768 function table.
52682a1b 4769
0cbd7506 4770 For a non-virtual destructor, we do not build a deleting
52682a1b
MM
4771 destructor. */
4772 if (DECL_VIRTUAL_P (fn))
4773 {
4774 clone = build_clone (fn, deleting_dtor_identifier);
4775 if (update_method_vec_p)
b2a9b208 4776 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
52682a1b 4777 }
4e7512c9 4778 clone = build_clone (fn, complete_dtor_identifier);
298d6f60 4779 if (update_method_vec_p)
b2a9b208 4780 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
298d6f60
MM
4781 clone = build_clone (fn, base_dtor_identifier);
4782 if (update_method_vec_p)
b2a9b208 4783 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
298d6f60 4784 }
5daf7c0a
JM
4785
4786 /* Note that this is an abstract function that is never emitted. */
00de328a 4787 DECL_ABSTRACT_P (fn) = true;
db9b2174
MM
4788}
4789
5f6eeeb3
NS
4790/* DECL is an in charge constructor, which is being defined. This will
4791 have had an in class declaration, from whence clones were
4792 declared. An out-of-class definition can specify additional default
4793 arguments. As it is the clones that are involved in overload
4794 resolution, we must propagate the information from the DECL to its
00a17e31 4795 clones. */
5f6eeeb3
NS
4796
4797void
94edc4ab 4798adjust_clone_args (tree decl)
5f6eeeb3
NS
4799{
4800 tree clone;
c8094d83 4801
910ad8de
NF
4802 for (clone = DECL_CHAIN (decl); clone && DECL_CLONED_FUNCTION_P (clone);
4803 clone = DECL_CHAIN (clone))
5f6eeeb3
NS
4804 {
4805 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
4806 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
4807 tree decl_parms, clone_parms;
4808
4809 clone_parms = orig_clone_parms;
c8094d83 4810
00a17e31 4811 /* Skip the 'this' parameter. */
5f6eeeb3
NS
4812 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
4813 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4814
4815 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
4816 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4817 if (DECL_HAS_VTT_PARM_P (decl))
4818 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
c8094d83 4819
5f6eeeb3
NS
4820 clone_parms = orig_clone_parms;
4821 if (DECL_HAS_VTT_PARM_P (clone))
4822 clone_parms = TREE_CHAIN (clone_parms);
c8094d83 4823
5f6eeeb3
NS
4824 for (decl_parms = orig_decl_parms; decl_parms;
4825 decl_parms = TREE_CHAIN (decl_parms),
4826 clone_parms = TREE_CHAIN (clone_parms))
4827 {
50bc768d
NS
4828 gcc_assert (same_type_p (TREE_TYPE (decl_parms),
4829 TREE_TYPE (clone_parms)));
c8094d83 4830
5f6eeeb3
NS
4831 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
4832 {
4833 /* A default parameter has been added. Adjust the
00a17e31 4834 clone's parameters. */
5f6eeeb3 4835 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3c3905fc 4836 tree attrs = TYPE_ATTRIBUTES (TREE_TYPE (clone));
5f6eeeb3
NS
4837 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4838 tree type;
4839
4840 clone_parms = orig_decl_parms;
4841
4842 if (DECL_HAS_VTT_PARM_P (clone))
4843 {
4844 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
4845 TREE_VALUE (orig_clone_parms),
4846 clone_parms);
4847 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
4848 }
43dc123f
MM
4849 type = build_method_type_directly (basetype,
4850 TREE_TYPE (TREE_TYPE (clone)),
4851 clone_parms);
5f6eeeb3
NS
4852 if (exceptions)
4853 type = build_exception_variant (type, exceptions);
3c3905fc
JM
4854 if (attrs)
4855 type = cp_build_type_attribute_variant (type, attrs);
5f6eeeb3 4856 TREE_TYPE (clone) = type;
c8094d83 4857
5f6eeeb3
NS
4858 clone_parms = NULL_TREE;
4859 break;
4860 }
4861 }
50bc768d 4862 gcc_assert (!clone_parms);
5f6eeeb3
NS
4863 }
4864}
4865
db9b2174
MM
4866/* For each of the constructors and destructors in T, create an
4867 in-charge and not-in-charge variant. */
4868
4869static void
94edc4ab 4870clone_constructors_and_destructors (tree t)
db9b2174
MM
4871{
4872 tree fns;
4873
db9b2174
MM
4874 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4875 out now. */
4876 if (!CLASSTYPE_METHOD_VEC (t))
4877 return;
4878
db9b2174
MM
4879 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4880 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
298d6f60
MM
4881 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4882 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
db9b2174
MM
4883}
4884
593a0835
PC
4885/* Deduce noexcept for a destructor DTOR. */
4886
4887void
4888deduce_noexcept_on_destructor (tree dtor)
4889{
4890 if (!TYPE_RAISES_EXCEPTIONS (TREE_TYPE (dtor)))
4891 {
b15ea309 4892 tree eh_spec = unevaluated_noexcept_spec ();
593a0835
PC
4893 TREE_TYPE (dtor) = build_exception_variant (TREE_TYPE (dtor), eh_spec);
4894 }
4895}
4896
4897/* For each destructor in T, deduce noexcept:
4898
4899 12.4/3: A declaration of a destructor that does not have an
4900 exception-specification is implicitly considered to have the
4901 same exception-specification as an implicit declaration (15.4). */
4902
4903static void
4904deduce_noexcept_on_destructors (tree t)
4905{
593a0835
PC
4906 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4907 out now. */
4908 if (!CLASSTYPE_METHOD_VEC (t))
4909 return;
4910
a5e90b2a 4911 for (tree fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
593a0835
PC
4912 deduce_noexcept_on_destructor (OVL_CURRENT (fns));
4913}
4914
0a35513e
AH
4915/* Subroutine of set_one_vmethod_tm_attributes. Search base classes
4916 of TYPE for virtual functions which FNDECL overrides. Return a
4917 mask of the tm attributes found therein. */
4918
4919static int
4920look_for_tm_attr_overrides (tree type, tree fndecl)
4921{
4922 tree binfo = TYPE_BINFO (type);
4923 tree base_binfo;
4924 int ix, found = 0;
4925
4926 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ++ix)
4927 {
4928 tree o, basetype = BINFO_TYPE (base_binfo);
4929
4930 if (!TYPE_POLYMORPHIC_P (basetype))
4931 continue;
4932
4933 o = look_for_overrides_here (basetype, fndecl);
4934 if (o)
4935 found |= tm_attr_to_mask (find_tm_attribute
4936 (TYPE_ATTRIBUTES (TREE_TYPE (o))));
4937 else
4938 found |= look_for_tm_attr_overrides (basetype, fndecl);
4939 }
4940
4941 return found;
4942}
4943
4944/* Subroutine of set_method_tm_attributes. Handle the checks and
4945 inheritance for one virtual method FNDECL. */
4946
4947static void
4948set_one_vmethod_tm_attributes (tree type, tree fndecl)
4949{
4950 tree tm_attr;
4951 int found, have;
4952
4953 found = look_for_tm_attr_overrides (type, fndecl);
4954
4955 /* If FNDECL doesn't actually override anything (i.e. T is the
4956 class that first declares FNDECL virtual), then we're done. */
4957 if (found == 0)
4958 return;
4959
4960 tm_attr = find_tm_attribute (TYPE_ATTRIBUTES (TREE_TYPE (fndecl)));
4961 have = tm_attr_to_mask (tm_attr);
4962
4963 /* Intel STM Language Extension 3.0, Section 4.2 table 4:
4964 tm_pure must match exactly, otherwise no weakening of
4965 tm_safe > tm_callable > nothing. */
4966 /* ??? The tm_pure attribute didn't make the transition to the
4967 multivendor language spec. */
4968 if (have == TM_ATTR_PURE)
4969 {
4970 if (found != TM_ATTR_PURE)
4971 {
4972 found &= -found;
4973 goto err_override;
4974 }
4975 }
4976 /* If the overridden function is tm_pure, then FNDECL must be. */
4977 else if (found == TM_ATTR_PURE && tm_attr)
4978 goto err_override;
4979 /* Look for base class combinations that cannot be satisfied. */
4980 else if (found != TM_ATTR_PURE && (found & TM_ATTR_PURE))
4981 {
4982 found &= ~TM_ATTR_PURE;
4983 found &= -found;
4984 error_at (DECL_SOURCE_LOCATION (fndecl),
4985 "method overrides both %<transaction_pure%> and %qE methods",
4986 tm_mask_to_attr (found));
4987 }
4988 /* If FNDECL did not declare an attribute, then inherit the most
4989 restrictive one. */
4990 else if (tm_attr == NULL)
4991 {
4992 apply_tm_attr (fndecl, tm_mask_to_attr (found & -found));
4993 }
4994 /* Otherwise validate that we're not weaker than a function
4995 that is being overridden. */
4996 else
4997 {
4998 found &= -found;
4999 if (found <= TM_ATTR_CALLABLE && have > found)
5000 goto err_override;
5001 }
5002 return;
5003
5004 err_override:
5005 error_at (DECL_SOURCE_LOCATION (fndecl),
5006 "method declared %qE overriding %qE method",
5007 tm_attr, tm_mask_to_attr (found));
5008}
5009
5010/* For each of the methods in T, propagate a class-level tm attribute. */
5011
5012static void
5013set_method_tm_attributes (tree t)
5014{
5015 tree class_tm_attr, fndecl;
5016
5017 /* Don't bother collecting tm attributes if transactional memory
5018 support is not enabled. */
5019 if (!flag_tm)
5020 return;
5021
5022 /* Process virtual methods first, as they inherit directly from the
5023 base virtual function and also require validation of new attributes. */
5024 if (TYPE_CONTAINS_VPTR_P (t))
5025 {
5026 tree vchain;
5027 for (vchain = BINFO_VIRTUALS (TYPE_BINFO (t)); vchain;
5028 vchain = TREE_CHAIN (vchain))
00a42fb3
AH
5029 {
5030 fndecl = BV_FN (vchain);
5031 if (DECL_THUNK_P (fndecl))
5032 fndecl = THUNK_TARGET (fndecl);
5033 set_one_vmethod_tm_attributes (t, fndecl);
5034 }
0a35513e
AH
5035 }
5036
5037 /* If the class doesn't have an attribute, nothing more to do. */
5038 class_tm_attr = find_tm_attribute (TYPE_ATTRIBUTES (t));
5039 if (class_tm_attr == NULL)
5040 return;
5041
5042 /* Any method that does not yet have a tm attribute inherits
5043 the one from the class. */
5044 for (fndecl = TYPE_METHODS (t); fndecl; fndecl = TREE_CHAIN (fndecl))
5045 {
5046 if (!find_tm_attribute (TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
5047 apply_tm_attr (fndecl, class_tm_attr);
5048 }
5049}
5050
8c95264b
MLI
5051/* Returns true iff class T has a user-defined constructor other than
5052 the default constructor. */
5053
5054bool
5055type_has_user_nondefault_constructor (tree t)
5056{
5057 tree fns;
5058
5059 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
5060 return false;
5061
5062 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5063 {
5064 tree fn = OVL_CURRENT (fns);
5065 if (!DECL_ARTIFICIAL (fn)
c2b58ba2
JM
5066 && (TREE_CODE (fn) == TEMPLATE_DECL
5067 || (skip_artificial_parms_for (fn, DECL_ARGUMENTS (fn))
5068 != NULL_TREE)))
8c95264b
MLI
5069 return true;
5070 }
5071
5072 return false;
5073}
5074
6ad86a5b
FC
5075/* Returns the defaulted constructor if T has one. Otherwise, returns
5076 NULL_TREE. */
5077
5078tree
5079in_class_defaulted_default_constructor (tree t)
5080{
5081 tree fns, args;
5082
5083 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
5084 return NULL_TREE;
5085
5086 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5087 {
5088 tree fn = OVL_CURRENT (fns);
5089
5090 if (DECL_DEFAULTED_IN_CLASS_P (fn))
5091 {
5092 args = FUNCTION_FIRST_USER_PARMTYPE (fn);
5093 while (args && TREE_PURPOSE (args))
5094 args = TREE_CHAIN (args);
5095 if (!args || args == void_list_node)
5096 return fn;
5097 }
5098 }
5099
5100 return NULL_TREE;
5101}
5102
b87d79e6 5103/* Returns true iff FN is a user-provided function, i.e. user-declared
20f2653e
JM
5104 and not defaulted at its first declaration; or explicit, private,
5105 protected, or non-const. */
b87d79e6 5106
20f2653e 5107bool
b87d79e6
JM
5108user_provided_p (tree fn)
5109{
5110 if (TREE_CODE (fn) == TEMPLATE_DECL)
5111 return true;
5112 else
5113 return (!DECL_ARTIFICIAL (fn)
eca7fc57
JM
5114 && !(DECL_INITIALIZED_IN_CLASS_P (fn)
5115 && (DECL_DEFAULTED_FN (fn) || DECL_DELETED_FN (fn))));
b87d79e6
JM
5116}
5117
5118/* Returns true iff class T has a user-provided constructor. */
5119
5120bool
5121type_has_user_provided_constructor (tree t)
5122{
5123 tree fns;
5124
fd97a96a
JM
5125 if (!CLASS_TYPE_P (t))
5126 return false;
5127
b87d79e6
JM
5128 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
5129 return false;
5130
5131 /* This can happen in error cases; avoid crashing. */
5132 if (!CLASSTYPE_METHOD_VEC (t))
5133 return false;
5134
5135 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5136 if (user_provided_p (OVL_CURRENT (fns)))
5137 return true;
5138
5139 return false;
5140}
5141
a710f1f8
JM
5142/* Returns true iff class T has a non-user-provided (i.e. implicitly
5143 declared or explicitly defaulted in the class body) default
5144 constructor. */
b87d79e6
JM
5145
5146bool
a710f1f8 5147type_has_non_user_provided_default_constructor (tree t)
b87d79e6 5148{
71b8cb01 5149 tree fns;
b87d79e6 5150
a710f1f8 5151 if (!TYPE_HAS_DEFAULT_CONSTRUCTOR (t))
b87d79e6 5152 return false;
a710f1f8
JM
5153 if (CLASSTYPE_LAZY_DEFAULT_CTOR (t))
5154 return true;
b87d79e6
JM
5155
5156 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5157 {
5158 tree fn = OVL_CURRENT (fns);
7ad8d488 5159 if (TREE_CODE (fn) == FUNCTION_DECL
a710f1f8 5160 && !user_provided_p (fn)
71b8cb01
JM
5161 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)))
5162 return true;
b87d79e6
JM
5163 }
5164
5165 return false;
5166}
5167
32bfcf80
JM
5168/* TYPE is being used as a virtual base, and has a non-trivial move
5169 assignment. Return true if this is due to there being a user-provided
5170 move assignment in TYPE or one of its subobjects; if there isn't, then
5171 multiple move assignment can't cause any harm. */
5172
5173bool
5174vbase_has_user_provided_move_assign (tree type)
5175{
5176 /* Does the type itself have a user-provided move assignment operator? */
5177 for (tree fns
5178 = lookup_fnfields_slot_nolazy (type, ansi_assopname (NOP_EXPR));
5179 fns; fns = OVL_NEXT (fns))
5180 {
5181 tree fn = OVL_CURRENT (fns);
5182 if (move_fn_p (fn) && user_provided_p (fn))
5183 return true;
5184 }
5185
5186 /* Do any of its bases? */
5187 tree binfo = TYPE_BINFO (type);
5188 tree base_binfo;
5189 for (int i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
5190 if (vbase_has_user_provided_move_assign (BINFO_TYPE (base_binfo)))
5191 return true;
5192
5193 /* Or non-static data members? */
5194 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
5195 {
5196 if (TREE_CODE (field) == FIELD_DECL
5197 && CLASS_TYPE_P (TREE_TYPE (field))
5198 && vbase_has_user_provided_move_assign (TREE_TYPE (field)))
5199 return true;
5200 }
5201
5202 /* Seems not. */
5203 return false;
5204}
5205
6132bdd7
JM
5206/* If default-initialization leaves part of TYPE uninitialized, returns
5207 a DECL for the field or TYPE itself (DR 253). */
5208
5209tree
5210default_init_uninitialized_part (tree type)
5211{
5212 tree t, r, binfo;
5213 int i;
5214
5215 type = strip_array_types (type);
5216 if (!CLASS_TYPE_P (type))
5217 return type;
a710f1f8 5218 if (!type_has_non_user_provided_default_constructor (type))
6132bdd7
JM
5219 return NULL_TREE;
5220 for (binfo = TYPE_BINFO (type), i = 0;
5221 BINFO_BASE_ITERATE (binfo, i, t); ++i)
5222 {
5223 r = default_init_uninitialized_part (BINFO_TYPE (t));
5224 if (r)
5225 return r;
5226 }
5227 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
5228 if (TREE_CODE (t) == FIELD_DECL
5229 && !DECL_ARTIFICIAL (t)
5230 && !DECL_INITIAL (t))
5231 {
5232 r = default_init_uninitialized_part (TREE_TYPE (t));
5233 if (r)
5234 return DECL_P (r) ? r : t;
5235 }
5236
5237 return NULL_TREE;
5238}
5239
fd3faf2b 5240/* Returns true iff for class T, a trivial synthesized default constructor
0930cc0e
JM
5241 would be constexpr. */
5242
5243bool
fd3faf2b 5244trivial_default_constructor_is_constexpr (tree t)
0930cc0e 5245{
fd3faf2b 5246 /* A defaulted trivial default constructor is constexpr
0930cc0e 5247 if there is nothing to initialize. */
fd3faf2b 5248 gcc_assert (!TYPE_HAS_COMPLEX_DFLT (t));
0930cc0e
JM
5249 return is_really_empty_class (t);
5250}
5251
91ea6df3
GDR
5252/* Returns true iff class T has a constexpr default constructor. */
5253
5254bool
5255type_has_constexpr_default_constructor (tree t)
5256{
5257 tree fns;
5258
5259 if (!CLASS_TYPE_P (t))
69f36ba6
JM
5260 {
5261 /* The caller should have stripped an enclosing array. */
5262 gcc_assert (TREE_CODE (t) != ARRAY_TYPE);
5263 return false;
5264 }
0930cc0e 5265 if (CLASSTYPE_LAZY_DEFAULT_CTOR (t))
fd3faf2b
JM
5266 {
5267 if (!TYPE_HAS_COMPLEX_DFLT (t))
5268 return trivial_default_constructor_is_constexpr (t);
5269 /* Non-trivial, we need to check subobject constructors. */
5270 lazily_declare_fn (sfk_constructor, t);
5271 }
f7d042e2 5272 fns = locate_ctor (t);
91ea6df3
GDR
5273 return (fns && DECL_DECLARED_CONSTEXPR_P (fns));
5274}
5275
46408846
JM
5276/* Returns true iff class TYPE has a virtual destructor. */
5277
5278bool
5279type_has_virtual_destructor (tree type)
5280{
5281 tree dtor;
5282
5283 if (!CLASS_TYPE_P (type))
5284 return false;
5285
5286 gcc_assert (COMPLETE_TYPE_P (type));
5287 dtor = CLASSTYPE_DESTRUCTORS (type);
5288 return (dtor && DECL_VIRTUAL_P (dtor));
5289}
5290
ac177431
JM
5291/* Returns true iff class T has a move constructor. */
5292
5293bool
5294type_has_move_constructor (tree t)
5295{
5296 tree fns;
5297
5298 if (CLASSTYPE_LAZY_MOVE_CTOR (t))
5299 {
5300 gcc_assert (COMPLETE_TYPE_P (t));
5301 lazily_declare_fn (sfk_move_constructor, t);
5302 }
5303
5304 if (!CLASSTYPE_METHOD_VEC (t))
5305 return false;
5306
5307 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5308 if (move_fn_p (OVL_CURRENT (fns)))
5309 return true;
5310
5311 return false;
5312}
5313
5314/* Returns true iff class T has a move assignment operator. */
5315
5316bool
5317type_has_move_assign (tree t)
5318{
5319 tree fns;
5320
5321 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
5322 {
5323 gcc_assert (COMPLETE_TYPE_P (t));
5324 lazily_declare_fn (sfk_move_assignment, t);
5325 }
5326
fa4ba4af 5327 for (fns = lookup_fnfields_slot_nolazy (t, ansi_assopname (NOP_EXPR));
ac177431
JM
5328 fns; fns = OVL_NEXT (fns))
5329 if (move_fn_p (OVL_CURRENT (fns)))
5330 return true;
5331
5332 return false;
5333}
5334
a2e70335
JM
5335/* Returns true iff class T has a move constructor that was explicitly
5336 declared in the class body. Note that this is different from
5337 "user-provided", which doesn't include functions that are defaulted in
5338 the class. */
5339
5340bool
5341type_has_user_declared_move_constructor (tree t)
5342{
5343 tree fns;
5344
5345 if (CLASSTYPE_LAZY_MOVE_CTOR (t))
5346 return false;
5347
5348 if (!CLASSTYPE_METHOD_VEC (t))
5349 return false;
5350
5351 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5352 {
5353 tree fn = OVL_CURRENT (fns);
5354 if (move_fn_p (fn) && !DECL_ARTIFICIAL (fn))
5355 return true;
5356 }
5357
5358 return false;
5359}
5360
5361/* Returns true iff class T has a move assignment operator that was
5362 explicitly declared in the class body. */
5363
5364bool
5365type_has_user_declared_move_assign (tree t)
5366{
5367 tree fns;
5368
5369 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
5370 return false;
5371
fa4ba4af 5372 for (fns = lookup_fnfields_slot_nolazy (t, ansi_assopname (NOP_EXPR));
a2e70335
JM
5373 fns; fns = OVL_NEXT (fns))
5374 {
5375 tree fn = OVL_CURRENT (fns);
5376 if (move_fn_p (fn) && !DECL_ARTIFICIAL (fn))
5377 return true;
5378 }
5379
5380 return false;
5381}
5382
95552437 5383/* Nonzero if we need to build up a constructor call when initializing an
eca7fc57 5384 object of this class, either because it has a user-declared constructor
95552437
JM
5385 or because it doesn't have a default constructor (so we need to give an
5386 error if no initializer is provided). Use TYPE_NEEDS_CONSTRUCTING when
5387 what you care about is whether or not an object can be produced by a
5388 constructor (e.g. so we don't set TREE_READONLY on const variables of
5389 such type); use this function when what you care about is whether or not
5390 to try to call a constructor to create an object. The latter case is
5391 the former plus some cases of constructors that cannot be called. */
5392
5393bool
5394type_build_ctor_call (tree t)
5395{
5396 tree inner;
5397 if (TYPE_NEEDS_CONSTRUCTING (t))
5398 return true;
5399 inner = strip_array_types (t);
eca7fc57
JM
5400 if (!CLASS_TYPE_P (inner) || ANON_AGGR_TYPE_P (inner))
5401 return false;
5402 if (!TYPE_HAS_DEFAULT_CONSTRUCTOR (inner))
5403 return true;
83f31d8d
JM
5404 if (cxx_dialect < cxx11)
5405 return false;
eca7fc57
JM
5406 /* A user-declared constructor might be private, and a constructor might
5407 be trivial but deleted. */
5408 for (tree fns = lookup_fnfields_slot (inner, complete_ctor_identifier);
5409 fns; fns = OVL_NEXT (fns))
5410 {
5411 tree fn = OVL_CURRENT (fns);
5412 if (!DECL_ARTIFICIAL (fn)
5413 || DECL_DELETED_FN (fn))
5414 return true;
5415 }
5416 return false;
5417}
5418
5419/* Like type_build_ctor_call, but for destructors. */
5420
5421bool
5422type_build_dtor_call (tree t)
5423{
5424 tree inner;
5425 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
5426 return true;
5427 inner = strip_array_types (t);
5428 if (!CLASS_TYPE_P (inner) || ANON_AGGR_TYPE_P (inner)
5429 || !COMPLETE_TYPE_P (inner))
5430 return false;
83f31d8d
JM
5431 if (cxx_dialect < cxx11)
5432 return false;
eca7fc57
JM
5433 /* A user-declared destructor might be private, and a destructor might
5434 be trivial but deleted. */
5435 for (tree fns = lookup_fnfields_slot (inner, complete_dtor_identifier);
5436 fns; fns = OVL_NEXT (fns))
5437 {
5438 tree fn = OVL_CURRENT (fns);
5439 if (!DECL_ARTIFICIAL (fn)
5440 || DECL_DELETED_FN (fn))
5441 return true;
5442 }
5443 return false;
95552437
JM
5444}
5445
58010b57
MM
5446/* Remove all zero-width bit-fields from T. */
5447
5448static void
94edc4ab 5449remove_zero_width_bit_fields (tree t)
58010b57
MM
5450{
5451 tree *fieldsp;
5452
c8094d83 5453 fieldsp = &TYPE_FIELDS (t);
58010b57
MM
5454 while (*fieldsp)
5455 {
5456 if (TREE_CODE (*fieldsp) == FIELD_DECL
c8094d83 5457 && DECL_C_BIT_FIELD (*fieldsp)
84894f85
DS
5458 /* We should not be confused by the fact that grokbitfield
5459 temporarily sets the width of the bit field into
5460 DECL_INITIAL (*fieldsp).
5461 check_bitfield_decl eventually sets DECL_SIZE (*fieldsp)
5462 to that width. */
2a924bb4
MP
5463 && (DECL_SIZE (*fieldsp) == NULL_TREE
5464 || integer_zerop (DECL_SIZE (*fieldsp))))
910ad8de 5465 *fieldsp = DECL_CHAIN (*fieldsp);
58010b57 5466 else
910ad8de 5467 fieldsp = &DECL_CHAIN (*fieldsp);
58010b57
MM
5468 }
5469}
5470
dbc957f1
MM
5471/* Returns TRUE iff we need a cookie when dynamically allocating an
5472 array whose elements have the indicated class TYPE. */
5473
5474static bool
94edc4ab 5475type_requires_array_cookie (tree type)
dbc957f1
MM
5476{
5477 tree fns;
18fee3ee 5478 bool has_two_argument_delete_p = false;
dbc957f1 5479
50bc768d 5480 gcc_assert (CLASS_TYPE_P (type));
dbc957f1
MM
5481
5482 /* If there's a non-trivial destructor, we need a cookie. In order
5483 to iterate through the array calling the destructor for each
5484 element, we'll have to know how many elements there are. */
5485 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
5486 return true;
5487
5488 /* If the usual deallocation function is a two-argument whose second
5489 argument is of type `size_t', then we have to pass the size of
5490 the array to the deallocation function, so we will need to store
5491 a cookie. */
c8094d83 5492 fns = lookup_fnfields (TYPE_BINFO (type),
dbc957f1
MM
5493 ansi_opname (VEC_DELETE_EXPR),
5494 /*protect=*/0);
5495 /* If there are no `operator []' members, or the lookup is
5496 ambiguous, then we don't need a cookie. */
5497 if (!fns || fns == error_mark_node)
5498 return false;
5499 /* Loop through all of the functions. */
50ad9642 5500 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
dbc957f1
MM
5501 {
5502 tree fn;
5503 tree second_parm;
5504
5505 /* Select the current function. */
5506 fn = OVL_CURRENT (fns);
5507 /* See if this function is a one-argument delete function. If
5508 it is, then it will be the usual deallocation function. */
5509 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
5510 if (second_parm == void_list_node)
5511 return false;
4b8cb94c
SM
5512 /* Do not consider this function if its second argument is an
5513 ellipsis. */
5514 if (!second_parm)
5515 continue;
dbc957f1
MM
5516 /* Otherwise, if we have a two-argument function and the second
5517 argument is `size_t', it will be the usual deallocation
5518 function -- unless there is one-argument function, too. */
5519 if (TREE_CHAIN (second_parm) == void_list_node
c79154c4 5520 && same_type_p (TREE_VALUE (second_parm), size_type_node))
dbc957f1
MM
5521 has_two_argument_delete_p = true;
5522 }
5523
5524 return has_two_argument_delete_p;
5525}
5526
3b49d762
GDR
5527/* Finish computing the `literal type' property of class type T.
5528
5529 At this point, we have already processed base classes and
5530 non-static data members. We need to check whether the copy
5531 constructor is trivial, the destructor is trivial, and there
5532 is a trivial default constructor or at least one constexpr
5533 constructor other than the copy constructor. */
5534
5535static void
5536finalize_literal_type_property (tree t)
5537{
0515f4d2
JM
5538 tree fn;
5539
604b2bfc 5540 if (cxx_dialect < cxx11
b198484e 5541 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
3b49d762
GDR
5542 CLASSTYPE_LITERAL_P (t) = false;
5543 else if (CLASSTYPE_LITERAL_P (t) && !TYPE_HAS_TRIVIAL_DFLT (t)
b198484e 5544 && CLASSTYPE_NON_AGGREGATE (t)
3b49d762
GDR
5545 && !TYPE_HAS_CONSTEXPR_CTOR (t))
5546 CLASSTYPE_LITERAL_P (t) = false;
0515f4d2
JM
5547
5548 if (!CLASSTYPE_LITERAL_P (t))
5549 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
5550 if (DECL_DECLARED_CONSTEXPR_P (fn)
5551 && TREE_CODE (fn) != TEMPLATE_DECL
5552 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
5553 && !DECL_CONSTRUCTOR_P (fn))
5554 {
5555 DECL_DECLARED_CONSTEXPR_P (fn) = false;
b432106b 5556 if (!DECL_GENERATED_P (fn))
f732fa7b
JM
5557 {
5558 error ("enclosing class of constexpr non-static member "
5559 "function %q+#D is not a literal type", fn);
5560 explain_non_literal_class (t);
5561 }
0515f4d2 5562 }
3b49d762
GDR
5563}
5564
f732fa7b
JM
5565/* T is a non-literal type used in a context which requires a constant
5566 expression. Explain why it isn't literal. */
5567
5568void
5569explain_non_literal_class (tree t)
5570{
6e2830c3 5571 static hash_set<tree> *diagnosed;
f732fa7b
JM
5572
5573 if (!CLASS_TYPE_P (t))
5574 return;
5575 t = TYPE_MAIN_VARIANT (t);
5576
5577 if (diagnosed == NULL)
6e2830c3
TS
5578 diagnosed = new hash_set<tree>;
5579 if (diagnosed->add (t))
f732fa7b
JM
5580 /* Already explained. */
5581 return;
5582
5583 inform (0, "%q+T is not literal because:", t);
5584 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
5585 inform (0, " %q+T has a non-trivial destructor", t);
5586 else if (CLASSTYPE_NON_AGGREGATE (t)
5587 && !TYPE_HAS_TRIVIAL_DFLT (t)
5588 && !TYPE_HAS_CONSTEXPR_CTOR (t))
fd3faf2b
JM
5589 {
5590 inform (0, " %q+T is not an aggregate, does not have a trivial "
5591 "default constructor, and has no constexpr constructor that "
5592 "is not a copy or move constructor", t);
a710f1f8 5593 if (type_has_non_user_provided_default_constructor (t))
efff2fb4
PC
5594 {
5595 /* Note that we can't simply call locate_ctor because when the
5596 constructor is deleted it just returns NULL_TREE. */
5597 tree fns;
5598 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5599 {
5600 tree fn = OVL_CURRENT (fns);
5601 tree parms = TYPE_ARG_TYPES (TREE_TYPE (fn));
5602
5603 parms = skip_artificial_parms_for (fn, parms);
5604
5605 if (sufficient_parms_p (parms))
5606 {
5607 if (DECL_DELETED_FN (fn))
5608 maybe_explain_implicit_delete (fn);
5609 else
5610 explain_invalid_constexpr_fn (fn);
5611 break;
5612 }
5613 }
5614 }
fd3faf2b 5615 }
f732fa7b
JM
5616 else
5617 {
5618 tree binfo, base_binfo, field; int i;
5619 for (binfo = TYPE_BINFO (t), i = 0;
5620 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
5621 {
5622 tree basetype = TREE_TYPE (base_binfo);
5623 if (!CLASSTYPE_LITERAL_P (basetype))
5624 {
5625 inform (0, " base class %qT of %q+T is non-literal",
5626 basetype, t);
5627 explain_non_literal_class (basetype);
5628 return;
5629 }
5630 }
5631 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
5632 {
5633 tree ftype;
5634 if (TREE_CODE (field) != FIELD_DECL)
5635 continue;
5636 ftype = TREE_TYPE (field);
5637 if (!literal_type_p (ftype))
5638 {
15827d12
PC
5639 inform (DECL_SOURCE_LOCATION (field),
5640 " non-static data member %qD has non-literal type",
5641 field);
f732fa7b
JM
5642 if (CLASS_TYPE_P (ftype))
5643 explain_non_literal_class (ftype);
5644 }
cec362c9 5645 if (CP_TYPE_VOLATILE_P (ftype))
15827d12
PC
5646 inform (DECL_SOURCE_LOCATION (field),
5647 " non-static data member %qD has volatile type", field);
f732fa7b
JM
5648 }
5649 }
5650}
5651
607cf131
MM
5652/* Check the validity of the bases and members declared in T. Add any
5653 implicitly-generated functions (like copy-constructors and
5654 assignment operators). Compute various flag bits (like
c32097d8 5655 CLASSTYPE_NON_LAYOUT_POD_T) for T. This routine works purely at the C++
607cf131
MM
5656 level: i.e., independently of the ABI in use. */
5657
5658static void
58731fd1 5659check_bases_and_members (tree t)
607cf131 5660{
607cf131
MM
5661 /* Nonzero if the implicitly generated copy constructor should take
5662 a non-const reference argument. */
5663 int cant_have_const_ctor;
78dcd41a 5664 /* Nonzero if the implicitly generated assignment operator
607cf131
MM
5665 should take a non-const reference argument. */
5666 int no_const_asn_ref;
5667 tree access_decls;
b87d79e6
JM
5668 bool saved_complex_asn_ref;
5669 bool saved_nontrivial_dtor;
20f2653e 5670 tree fn;
607cf131
MM
5671
5672 /* By default, we use const reference arguments and generate default
5673 constructors. */
607cf131
MM
5674 cant_have_const_ctor = 0;
5675 no_const_asn_ref = 0;
5676
00a17e31 5677 /* Check all the base-classes. */
e5e459bf 5678 check_bases (t, &cant_have_const_ctor,
10746f37 5679 &no_const_asn_ref);
607cf131 5680
52d95c21
JM
5681 /* Deduce noexcept on destructors. This needs to happen after we've set
5682 triviality flags appropriately for our bases. */
604b2bfc 5683 if (cxx_dialect >= cxx11)
52d95c21
JM
5684 deduce_noexcept_on_destructors (t);
5685
9f4faeae
MM
5686 /* Check all the method declarations. */
5687 check_methods (t);
5688
b87d79e6
JM
5689 /* Save the initial values of these flags which only indicate whether
5690 or not the class has user-provided functions. As we analyze the
5691 bases and members we can set these flags for other reasons. */
066ec0a4 5692 saved_complex_asn_ref = TYPE_HAS_COMPLEX_COPY_ASSIGN (t);
b87d79e6
JM
5693 saved_nontrivial_dtor = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
5694
9f4faeae
MM
5695 /* Check all the data member declarations. We cannot call
5696 check_field_decls until we have called check_bases check_methods,
5697 as check_field_decls depends on TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5698 being set appropriately. */
58731fd1 5699 check_field_decls (t, &access_decls,
607cf131 5700 &cant_have_const_ctor,
10746f37 5701 &no_const_asn_ref);
607cf131 5702
bbd15aac
MM
5703 /* A nearly-empty class has to be vptr-containing; a nearly empty
5704 class contains just a vptr. */
5705 if (!TYPE_CONTAINS_VPTR_P (t))
f9c528ea
MM
5706 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
5707
607cf131
MM
5708 /* Do some bookkeeping that will guide the generation of implicitly
5709 declared member functions. */
066ec0a4 5710 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
ac177431 5711 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
0fcedd9c 5712 /* We need to call a constructor for this class if it has a
b87d79e6 5713 user-provided constructor, or if the default constructor is going
0fcedd9c
JM
5714 to initialize the vptr. (This is not an if-and-only-if;
5715 TYPE_NEEDS_CONSTRUCTING is set elsewhere if bases or members
5716 themselves need constructing.) */
607cf131 5717 TYPE_NEEDS_CONSTRUCTING (t)
b87d79e6 5718 |= (type_has_user_provided_constructor (t) || TYPE_CONTAINS_VPTR_P (t));
0fcedd9c
JM
5719 /* [dcl.init.aggr]
5720
b87d79e6 5721 An aggregate is an array or a class with no user-provided
0fcedd9c
JM
5722 constructors ... and no virtual functions.
5723
5724 Again, other conditions for being an aggregate are checked
5725 elsewhere. */
5775a06a 5726 CLASSTYPE_NON_AGGREGATE (t)
b87d79e6 5727 |= (type_has_user_provided_constructor (t) || TYPE_POLYMORPHIC_P (t));
c32097d8
JM
5728 /* This is the C++98/03 definition of POD; it changed in C++0x, but we
5729 retain the old definition internally for ABI reasons. */
5730 CLASSTYPE_NON_LAYOUT_POD_P (t)
c8094d83 5731 |= (CLASSTYPE_NON_AGGREGATE (t)
b87d79e6 5732 || saved_nontrivial_dtor || saved_complex_asn_ref);
c32097d8 5733 CLASSTYPE_NON_STD_LAYOUT (t) |= TYPE_CONTAINS_VPTR_P (t);
066ec0a4 5734 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
ac177431 5735 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
f782c65c 5736 TYPE_HAS_COMPLEX_DFLT (t) |= TYPE_CONTAINS_VPTR_P (t);
607cf131 5737
a710f1f8
JM
5738 /* If the only explicitly declared default constructor is user-provided,
5739 set TYPE_HAS_COMPLEX_DFLT. */
5740 if (!TYPE_HAS_COMPLEX_DFLT (t)
5741 && TYPE_HAS_DEFAULT_CONSTRUCTOR (t)
5742 && !type_has_non_user_provided_default_constructor (t))
5743 TYPE_HAS_COMPLEX_DFLT (t) = true;
5744
38f09da3 5745 /* Warn if a public base of a polymorphic type has an accessible
880a467b
NS
5746 non-virtual destructor. It is only now that we know the class is
5747 polymorphic. Although a polymorphic base will have a already
5748 been diagnosed during its definition, we warn on use too. */
5749 if (TYPE_POLYMORPHIC_P (t) && warn_nonvdtor)
5750 {
38f09da3
NS
5751 tree binfo = TYPE_BINFO (t);
5752 vec<tree, va_gc> *accesses = BINFO_BASE_ACCESSES (binfo);
5753 tree base_binfo;
880a467b
NS
5754 unsigned i;
5755
38f09da3 5756 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
880a467b
NS
5757 {
5758 tree basetype = TREE_TYPE (base_binfo);
5759
38f09da3
NS
5760 if ((*accesses)[i] == access_public_node
5761 && (TYPE_POLYMORPHIC_P (basetype) || warn_ecpp)
5762 && accessible_nvdtor_p (basetype))
880a467b
NS
5763 warning (OPT_Wnon_virtual_dtor,
5764 "base class %q#T has accessible non-virtual destructor",
5765 basetype);
5766 }
5767 }
5768
0fcedd9c
JM
5769 /* If the class has no user-declared constructor, but does have
5770 non-static const or reference data members that can never be
5771 initialized, issue a warning. */
c73d5dd9 5772 if (warn_uninitialized
0fcedd9c
JM
5773 /* Classes with user-declared constructors are presumed to
5774 initialize these members. */
5775 && !TYPE_HAS_USER_CONSTRUCTOR (t)
5776 /* Aggregates can be initialized with brace-enclosed
5777 initializers. */
5778 && CLASSTYPE_NON_AGGREGATE (t))
5779 {
5780 tree field;
5781
910ad8de 5782 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
0fcedd9c
JM
5783 {
5784 tree type;
5785
f315d618
JJ
5786 if (TREE_CODE (field) != FIELD_DECL
5787 || DECL_INITIAL (field) != NULL_TREE)
0fcedd9c
JM
5788 continue;
5789
5790 type = TREE_TYPE (field);
5791 if (TREE_CODE (type) == REFERENCE_TYPE)
15827d12
PC
5792 warning_at (DECL_SOURCE_LOCATION (field),
5793 OPT_Wuninitialized, "non-static reference %q#D "
5794 "in class without a constructor", field);
0fcedd9c
JM
5795 else if (CP_TYPE_CONST_P (type)
5796 && (!CLASS_TYPE_P (type)
5797 || !TYPE_HAS_DEFAULT_CONSTRUCTOR (type)))
15827d12
PC
5798 warning_at (DECL_SOURCE_LOCATION (field),
5799 OPT_Wuninitialized, "non-static const member %q#D "
5800 "in class without a constructor", field);
0fcedd9c
JM
5801 }
5802 }
5803
03fd3f84 5804 /* Synthesize any needed methods. */
85b5d65a 5805 add_implicitly_declared_members (t, &access_decls,
607cf131 5806 cant_have_const_ctor,
10746f37 5807 no_const_asn_ref);
607cf131 5808
20f2653e
JM
5809 /* Check defaulted declarations here so we have cant_have_const_ctor
5810 and don't need to worry about clones. */
910ad8de 5811 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
85b5d65a 5812 if (!DECL_ARTIFICIAL (fn) && DECL_DEFAULTED_IN_CLASS_P (fn))
20f2653e
JM
5813 {
5814 int copy = copy_fn_p (fn);
5815 if (copy > 0)
5816 {
5817 bool imp_const_p
5818 = (DECL_CONSTRUCTOR_P (fn) ? !cant_have_const_ctor
5819 : !no_const_asn_ref);
5820 bool fn_const_p = (copy == 2);
5821
5822 if (fn_const_p && !imp_const_p)
5823 /* If the function is defaulted outside the class, we just
5824 give the synthesis error. */
5825 error ("%q+D declared to take const reference, but implicit "
5826 "declaration would take non-const", fn);
20f2653e
JM
5827 }
5828 defaulted_late_check (fn);
5829 }
5830
d5f4eddd
JM
5831 if (LAMBDA_TYPE_P (t))
5832 {
d5f4eddd
JM
5833 /* "This class type is not an aggregate." */
5834 CLASSTYPE_NON_AGGREGATE (t) = 1;
5835 }
5836
3b49d762
GDR
5837 /* Compute the 'literal type' property before we
5838 do anything with non-static member functions. */
5839 finalize_literal_type_property (t);
5840
db9b2174
MM
5841 /* Create the in-charge and not-in-charge variants of constructors
5842 and destructors. */
5843 clone_constructors_and_destructors (t);
5844
aa52c1ff
JM
5845 /* Process the using-declarations. */
5846 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
5847 handle_using_decl (TREE_VALUE (access_decls), t);
5848
607cf131
MM
5849 /* Build and sort the CLASSTYPE_METHOD_VEC. */
5850 finish_struct_methods (t);
dbc957f1
MM
5851
5852 /* Figure out whether or not we will need a cookie when dynamically
5853 allocating an array of this type. */
e2500fed 5854 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
dbc957f1 5855 = type_requires_array_cookie (t);
607cf131
MM
5856}
5857
3ef397c1 5858/* If T needs a pointer to its virtual function table, set TYPE_VFIELD
5c24fba6
MM
5859 accordingly. If a new vfield was created (because T doesn't have a
5860 primary base class), then the newly created field is returned. It
c35cce41 5861 is not added to the TYPE_FIELDS list; it is the caller's
e6858a84
NS
5862 responsibility to do that. Accumulate declared virtual functions
5863 on VIRTUALS_P. */
3ef397c1 5864
5c24fba6 5865static tree
94edc4ab 5866create_vtable_ptr (tree t, tree* virtuals_p)
3ef397c1
MM
5867{
5868 tree fn;
5869
e6858a84 5870 /* Collect the virtual functions declared in T. */
910ad8de 5871 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
aaf8a23e
JH
5872 if (TREE_CODE (fn) == FUNCTION_DECL
5873 && DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
e6858a84
NS
5874 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
5875 {
5876 tree new_virtual = make_node (TREE_LIST);
c8094d83 5877
e6858a84
NS
5878 BV_FN (new_virtual) = fn;
5879 BV_DELTA (new_virtual) = integer_zero_node;
d1f05f93 5880 BV_VCALL_INDEX (new_virtual) = NULL_TREE;
3ef397c1 5881
e6858a84
NS
5882 TREE_CHAIN (new_virtual) = *virtuals_p;
5883 *virtuals_p = new_virtual;
5884 }
c8094d83 5885
da3d4dfa
MM
5886 /* If we couldn't find an appropriate base class, create a new field
5887 here. Even if there weren't any new virtual functions, we might need a
bbd15aac
MM
5888 new virtual function table if we're supposed to include vptrs in
5889 all classes that need them. */
e6858a84 5890 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
3ef397c1
MM
5891 {
5892 /* We build this decl with vtbl_ptr_type_node, which is a
5893 `vtable_entry_type*'. It might seem more precise to use
a692ad2e 5894 `vtable_entry_type (*)[N]' where N is the number of virtual
3ef397c1
MM
5895 functions. However, that would require the vtable pointer in
5896 base classes to have a different type than the vtable pointer
5897 in derived classes. We could make that happen, but that
5898 still wouldn't solve all the problems. In particular, the
5899 type-based alias analysis code would decide that assignments
5900 to the base class vtable pointer can't alias assignments to
5901 the derived class vtable pointer, since they have different
4639c5c6 5902 types. Thus, in a derived class destructor, where the base
3ef397c1 5903 class constructor was inlined, we could generate bad code for
c8094d83 5904 setting up the vtable pointer.
3ef397c1 5905
0cbd7506 5906 Therefore, we use one type for all vtable pointers. We still
3ef397c1
MM
5907 use a type-correct type; it's just doesn't indicate the array
5908 bounds. That's better than using `void*' or some such; it's
5909 cleaner, and it let's the alias analysis code know that these
5910 stores cannot alias stores to void*! */
0abe00c5
NS
5911 tree field;
5912
c2255bc4
AH
5913 field = build_decl (input_location,
5914 FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
0abe00c5
NS
5915 DECL_VIRTUAL_P (field) = 1;
5916 DECL_ARTIFICIAL (field) = 1;
5917 DECL_FIELD_CONTEXT (field) = t;
5918 DECL_FCONTEXT (field) = t;
7c08df6c
JM
5919 if (TYPE_PACKED (t))
5920 DECL_PACKED (field) = 1;
c8094d83 5921
0abe00c5 5922 TYPE_VFIELD (t) = field;
c8094d83 5923
0abe00c5 5924 /* This class is non-empty. */
58731fd1 5925 CLASSTYPE_EMPTY_P (t) = 0;
3ef397c1 5926
0abe00c5 5927 return field;
3ef397c1 5928 }
5c24fba6
MM
5929
5930 return NULL_TREE;
3ef397c1
MM
5931}
5932
9d4c0187
MM
5933/* Add OFFSET to all base types of BINFO which is a base in the
5934 hierarchy dominated by T.
80fd5f48 5935
911a71a7 5936 OFFSET, which is a type offset, is number of bytes. */
80fd5f48
MM
5937
5938static void
dbbf88d1 5939propagate_binfo_offsets (tree binfo, tree offset)
80fd5f48 5940{
911a71a7
MM
5941 int i;
5942 tree primary_binfo;
fa743e8c 5943 tree base_binfo;
80fd5f48 5944
911a71a7
MM
5945 /* Update BINFO's offset. */
5946 BINFO_OFFSET (binfo)
c8094d83 5947 = convert (sizetype,
911a71a7
MM
5948 size_binop (PLUS_EXPR,
5949 convert (ssizetype, BINFO_OFFSET (binfo)),
5950 offset));
80fd5f48 5951
911a71a7
MM
5952 /* Find the primary base class. */
5953 primary_binfo = get_primary_binfo (binfo);
5954
fc6633e0 5955 if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
090ad434 5956 propagate_binfo_offsets (primary_binfo, offset);
c8094d83 5957
911a71a7
MM
5958 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
5959 downwards. */
fa743e8c 5960 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
80fd5f48 5961 {
090ad434
NS
5962 /* Don't do the primary base twice. */
5963 if (base_binfo == primary_binfo)
5964 continue;
911a71a7 5965
090ad434 5966 if (BINFO_VIRTUAL_P (base_binfo))
911a71a7
MM
5967 continue;
5968
dbbf88d1 5969 propagate_binfo_offsets (base_binfo, offset);
911a71a7 5970 }
9d4c0187
MM
5971}
5972
17bbb839 5973/* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
c20118a8
MM
5974 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
5975 empty subobjects of T. */
80fd5f48 5976
d2c5305b 5977static void
17bbb839 5978layout_virtual_bases (record_layout_info rli, splay_tree offsets)
80fd5f48 5979{
dbbf88d1 5980 tree vbase;
17bbb839 5981 tree t = rli->t;
17bbb839 5982 tree *next_field;
9785e4b1 5983
604a3205 5984 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
9785e4b1
MM
5985 return;
5986
17bbb839
MM
5987 /* Find the last field. The artificial fields created for virtual
5988 bases will go after the last extant field to date. */
5989 next_field = &TYPE_FIELDS (t);
5990 while (*next_field)
910ad8de 5991 next_field = &DECL_CHAIN (*next_field);
80fd5f48 5992
9d4c0187 5993 /* Go through the virtual bases, allocating space for each virtual
3461fba7
NS
5994 base that is not already a primary base class. These are
5995 allocated in inheritance graph order. */
dbbf88d1 5996 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
c35cce41 5997 {
809e3e7f 5998 if (!BINFO_VIRTUAL_P (vbase))
1f84ec23 5999 continue;
eca7f13c 6000
9965d119 6001 if (!BINFO_PRIMARY_P (vbase))
c35cce41
MM
6002 {
6003 /* This virtual base is not a primary base of any class in the
6004 hierarchy, so we have to add space for it. */
58731fd1 6005 next_field = build_base_field (rli, vbase,
17bbb839 6006 offsets, next_field);
c35cce41
MM
6007 }
6008 }
80fd5f48
MM
6009}
6010
ba9a991f
MM
6011/* Returns the offset of the byte just past the end of the base class
6012 BINFO. */
6013
6014static tree
6015end_of_base (tree binfo)
6016{
6017 tree size;
6018
1ad8aeeb
DG
6019 if (!CLASSTYPE_AS_BASE (BINFO_TYPE (binfo)))
6020 size = TYPE_SIZE_UNIT (char_type_node);
6021 else if (is_empty_class (BINFO_TYPE (binfo)))
ba9a991f
MM
6022 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
6023 allocate some space for it. It cannot have virtual bases, so
6024 TYPE_SIZE_UNIT is fine. */
6025 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
6026 else
6027 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
6028
6029 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
6030}
6031
9785e4b1
MM
6032/* Returns the offset of the byte just past the end of the base class
6033 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
6034 only non-virtual bases are included. */
80fd5f48 6035
17bbb839 6036static tree
94edc4ab 6037end_of_class (tree t, int include_virtuals_p)
80fd5f48 6038{
17bbb839 6039 tree result = size_zero_node;
9771b263 6040 vec<tree, va_gc> *vbases;
ba9a991f 6041 tree binfo;
9ba5ff0f 6042 tree base_binfo;
ba9a991f 6043 tree offset;
9785e4b1 6044 int i;
80fd5f48 6045
fa743e8c
NS
6046 for (binfo = TYPE_BINFO (t), i = 0;
6047 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
9785e4b1 6048 {
9785e4b1 6049 if (!include_virtuals_p
fc6633e0
NS
6050 && BINFO_VIRTUAL_P (base_binfo)
6051 && (!BINFO_PRIMARY_P (base_binfo)
6052 || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
9785e4b1 6053 continue;
80fd5f48 6054
fa743e8c 6055 offset = end_of_base (base_binfo);
807e902e 6056 if (tree_int_cst_lt (result, offset))
17bbb839 6057 result = offset;
9785e4b1 6058 }
80fd5f48 6059
90d84934 6060 if (include_virtuals_p)
9ba5ff0f 6061 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
9771b263 6062 vec_safe_iterate (vbases, i, &base_binfo); i++)
ba9a991f 6063 {
9ba5ff0f 6064 offset = end_of_base (base_binfo);
807e902e 6065 if (tree_int_cst_lt (result, offset))
ba9a991f
MM
6066 result = offset;
6067 }
6068
9785e4b1 6069 return result;
80fd5f48
MM
6070}
6071
17bbb839 6072/* Warn about bases of T that are inaccessible because they are
78b45a24
MM
6073 ambiguous. For example:
6074
6075 struct S {};
6076 struct T : public S {};
6077 struct U : public S, public T {};
6078
6079 Here, `(S*) new U' is not allowed because there are two `S'
6080 subobjects of U. */
6081
6082static void
94edc4ab 6083warn_about_ambiguous_bases (tree t)
78b45a24
MM
6084{
6085 int i;
9771b263 6086 vec<tree, va_gc> *vbases;
17bbb839 6087 tree basetype;
58c42dc2 6088 tree binfo;
fa743e8c 6089 tree base_binfo;
78b45a24 6090
18e4be85
NS
6091 /* If there are no repeated bases, nothing can be ambiguous. */
6092 if (!CLASSTYPE_REPEATED_BASE_P (t))
6093 return;
c8094d83 6094
17bbb839 6095 /* Check direct bases. */
fa743e8c
NS
6096 for (binfo = TYPE_BINFO (t), i = 0;
6097 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
78b45a24 6098 {
fa743e8c 6099 basetype = BINFO_TYPE (base_binfo);
78b45a24 6100
22854930 6101 if (!uniquely_derived_from_p (basetype, t))
d4ee4d25 6102 warning (0, "direct base %qT inaccessible in %qT due to ambiguity",
17bbb839 6103 basetype, t);
78b45a24 6104 }
17bbb839
MM
6105
6106 /* Check for ambiguous virtual bases. */
6107 if (extra_warnings)
9ba5ff0f 6108 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
9771b263 6109 vec_safe_iterate (vbases, i, &binfo); i++)
17bbb839 6110 {
58c42dc2 6111 basetype = BINFO_TYPE (binfo);
c8094d83 6112
22854930
PC
6113 if (!uniquely_derived_from_p (basetype, t))
6114 warning (OPT_Wextra, "virtual base %qT inaccessible in %qT due "
6115 "to ambiguity", basetype, t);
17bbb839 6116 }
78b45a24
MM
6117}
6118
c20118a8
MM
6119/* Compare two INTEGER_CSTs K1 and K2. */
6120
6121static int
94edc4ab 6122splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
c20118a8
MM
6123{
6124 return tree_int_cst_compare ((tree) k1, (tree) k2);
6125}
6126
17bbb839
MM
6127/* Increase the size indicated in RLI to account for empty classes
6128 that are "off the end" of the class. */
6129
6130static void
6131include_empty_classes (record_layout_info rli)
6132{
6133 tree eoc;
e3ccdd50 6134 tree rli_size;
17bbb839
MM
6135
6136 /* It might be the case that we grew the class to allocate a
6137 zero-sized base class. That won't be reflected in RLI, yet,
6138 because we are willing to overlay multiple bases at the same
6139 offset. However, now we need to make sure that RLI is big enough
6140 to reflect the entire class. */
c8094d83 6141 eoc = end_of_class (rli->t,
17bbb839 6142 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
e3ccdd50
MM
6143 rli_size = rli_size_unit_so_far (rli);
6144 if (TREE_CODE (rli_size) == INTEGER_CST
807e902e 6145 && tree_int_cst_lt (rli_size, eoc))
17bbb839 6146 {
90d84934
JM
6147 /* The size should have been rounded to a whole byte. */
6148 gcc_assert (tree_int_cst_equal
6149 (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
c8094d83
MS
6150 rli->bitpos
6151 = size_binop (PLUS_EXPR,
e3ccdd50
MM
6152 rli->bitpos,
6153 size_binop (MULT_EXPR,
6154 convert (bitsizetype,
6155 size_binop (MINUS_EXPR,
6156 eoc, rli_size)),
6157 bitsize_int (BITS_PER_UNIT)));
6158 normalize_rli (rli);
17bbb839
MM
6159 }
6160}
6161
2ef16140
MM
6162/* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
6163 BINFO_OFFSETs for all of the base-classes. Position the vtable
00a17e31 6164 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
607cf131 6165
2ef16140 6166static void
e93ee644 6167layout_class_type (tree t, tree *virtuals_p)
2ef16140 6168{
5c24fba6
MM
6169 tree non_static_data_members;
6170 tree field;
6171 tree vptr;
6172 record_layout_info rli;
c20118a8
MM
6173 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
6174 types that appear at that offset. */
6175 splay_tree empty_base_offsets;
c65cb8d1 6176 /* True if the last field laid out was a bit-field. */
eca7f13c 6177 bool last_field_was_bitfield = false;
17bbb839
MM
6178 /* The location at which the next field should be inserted. */
6179 tree *next_field;
6180 /* T, as a base class. */
6181 tree base_t;
5c24fba6
MM
6182
6183 /* Keep track of the first non-static data member. */
6184 non_static_data_members = TYPE_FIELDS (t);
6185
770ae6cc
RK
6186 /* Start laying out the record. */
6187 rli = start_record_layout (t);
534170eb 6188
fc6633e0
NS
6189 /* Mark all the primary bases in the hierarchy. */
6190 determine_primary_bases (t);
8026246f 6191
5c24fba6 6192 /* Create a pointer to our virtual function table. */
58731fd1 6193 vptr = create_vtable_ptr (t, virtuals_p);
5c24fba6 6194
3461fba7 6195 /* The vptr is always the first thing in the class. */
1f84ec23 6196 if (vptr)
5c24fba6 6197 {
910ad8de 6198 DECL_CHAIN (vptr) = TYPE_FIELDS (t);
17bbb839 6199 TYPE_FIELDS (t) = vptr;
910ad8de 6200 next_field = &DECL_CHAIN (vptr);
770ae6cc 6201 place_field (rli, vptr);
5c24fba6 6202 }
17bbb839
MM
6203 else
6204 next_field = &TYPE_FIELDS (t);
5c24fba6 6205
72a50ab0 6206 /* Build FIELD_DECLs for all of the non-virtual base-types. */
c8094d83 6207 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
c20118a8 6208 NULL, NULL);
58731fd1 6209 build_base_fields (rli, empty_base_offsets, next_field);
c8094d83 6210
5c24fba6 6211 /* Layout the non-static data members. */
910ad8de 6212 for (field = non_static_data_members; field; field = DECL_CHAIN (field))
5c24fba6 6213 {
01955e96
MM
6214 tree type;
6215 tree padding;
5c24fba6
MM
6216
6217 /* We still pass things that aren't non-static data members to
3b426391 6218 the back end, in case it wants to do something with them. */
5c24fba6
MM
6219 if (TREE_CODE (field) != FIELD_DECL)
6220 {
770ae6cc 6221 place_field (rli, field);
0154eaa8 6222 /* If the static data member has incomplete type, keep track
c8094d83 6223 of it so that it can be completed later. (The handling
0154eaa8
MM
6224 of pending statics in finish_record_layout is
6225 insufficient; consider:
6226
6227 struct S1;
6228 struct S2 { static S1 s1; };
c8094d83 6229
0cbd7506 6230 At this point, finish_record_layout will be called, but
0154eaa8 6231 S1 is still incomplete.) */
5a6ccc94 6232 if (VAR_P (field))
532b37d9
MM
6233 {
6234 maybe_register_incomplete_var (field);
6235 /* The visibility of static data members is determined
6236 at their point of declaration, not their point of
6237 definition. */
6238 determine_visibility (field);
6239 }
5c24fba6
MM
6240 continue;
6241 }
6242
01955e96 6243 type = TREE_TYPE (field);
4e3bd7d5
VR
6244 if (type == error_mark_node)
6245 continue;
c8094d83 6246
1e099144 6247 padding = NULL_TREE;
01955e96
MM
6248
6249 /* If this field is a bit-field whose width is greater than its
3461fba7
NS
6250 type, then there are some special rules for allocating
6251 it. */
01955e96 6252 if (DECL_C_BIT_FIELD (field)
807e902e 6253 && tree_int_cst_lt (TYPE_SIZE (type), DECL_SIZE (field)))
01955e96 6254 {
09639a83 6255 unsigned int itk;
01955e96 6256 tree integer_type;
555456b1 6257 bool was_unnamed_p = false;
01955e96
MM
6258 /* We must allocate the bits as if suitably aligned for the
6259 longest integer type that fits in this many bits. type
6260 of the field. Then, we are supposed to use the left over
6261 bits as additional padding. */
6262 for (itk = itk_char; itk != itk_none; ++itk)
64c31785 6263 if (integer_types[itk] != NULL_TREE
807e902e
KZ
6264 && (tree_int_cst_lt (size_int (MAX_FIXED_MODE_SIZE),
6265 TYPE_SIZE (integer_types[itk]))
6266 || tree_int_cst_lt (DECL_SIZE (field),
6267 TYPE_SIZE (integer_types[itk]))))
01955e96
MM
6268 break;
6269
6270 /* ITK now indicates a type that is too large for the
6271 field. We have to back up by one to find the largest
6272 type that fits. */
64c31785
KT
6273 do
6274 {
6275 --itk;
6276 integer_type = integer_types[itk];
6277 } while (itk > 0 && integer_type == NULL_TREE);
2d3e278d 6278
90d84934
JM
6279 /* Figure out how much additional padding is required. */
6280 if (tree_int_cst_lt (TYPE_SIZE (integer_type), DECL_SIZE (field)))
2d3e278d 6281 {
90d84934 6282 if (TREE_CODE (t) == UNION_TYPE)
1e099144
MM
6283 /* In a union, the padding field must have the full width
6284 of the bit-field; all fields start at offset zero. */
6285 padding = DECL_SIZE (field);
6286 else
90d84934
JM
6287 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
6288 TYPE_SIZE (integer_type));
2d3e278d 6289 }
1d0275e2 6290
63e5f567
MM
6291 /* An unnamed bitfield does not normally affect the
6292 alignment of the containing class on a target where
6293 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
6294 make any exceptions for unnamed bitfields when the
6295 bitfields are longer than their types. Therefore, we
6296 temporarily give the field a name. */
6297 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
6298 {
6299 was_unnamed_p = true;
6300 DECL_NAME (field) = make_anon_name ();
6301 }
1d0275e2 6302
01955e96
MM
6303 DECL_SIZE (field) = TYPE_SIZE (integer_type);
6304 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
11cf4d18 6305 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
555456b1
MM
6306 layout_nonempty_base_or_field (rli, field, NULL_TREE,
6307 empty_base_offsets);
6308 if (was_unnamed_p)
6309 DECL_NAME (field) = NULL_TREE;
6310 /* Now that layout has been performed, set the size of the
6311 field to the size of its declared type; the rest of the
6312 field is effectively invisible. */
6313 DECL_SIZE (field) = TYPE_SIZE (type);
29edb15c 6314 /* We must also reset the DECL_MODE of the field. */
90d84934 6315 DECL_MODE (field) = TYPE_MODE (type);
01955e96 6316 }
555456b1
MM
6317 else
6318 layout_nonempty_base_or_field (rli, field, NULL_TREE,
6319 empty_base_offsets);
01955e96 6320
2003cd37 6321 /* Remember the location of any empty classes in FIELD. */
90d84934
JM
6322 record_subobject_offsets (TREE_TYPE (field),
6323 byte_position(field),
6324 empty_base_offsets,
6325 /*is_data_member=*/true);
2003cd37 6326
eca7f13c
MM
6327 /* If a bit-field does not immediately follow another bit-field,
6328 and yet it starts in the middle of a byte, we have failed to
6329 comply with the ABI. */
6330 if (warn_abi
c8094d83 6331 && DECL_C_BIT_FIELD (field)
660845bf
ZL
6332 /* The TREE_NO_WARNING flag gets set by Objective-C when
6333 laying out an Objective-C class. The ObjC ABI differs
6334 from the C++ ABI, and so we do not want a warning
6335 here. */
6336 && !TREE_NO_WARNING (field)
eca7f13c
MM
6337 && !last_field_was_bitfield
6338 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
6339 DECL_FIELD_BIT_OFFSET (field),
6340 bitsize_unit_node)))
15827d12
PC
6341 warning_at (DECL_SOURCE_LOCATION (field), OPT_Wabi,
6342 "offset of %qD is not ABI-compliant and may "
6343 "change in a future version of GCC", field);
eca7f13c 6344
38a4afee
MM
6345 /* The middle end uses the type of expressions to determine the
6346 possible range of expression values. In order to optimize
6347 "x.i > 7" to "false" for a 2-bit bitfield "i", the middle end
3db45ab5 6348 must be made aware of the width of "i", via its type.
38a4afee 6349
3db45ab5 6350 Because C++ does not have integer types of arbitrary width,
38a4afee
MM
6351 we must (for the purposes of the front end) convert from the
6352 type assigned here to the declared type of the bitfield
6353 whenever a bitfield expression is used as an rvalue.
6354 Similarly, when assigning a value to a bitfield, the value
6355 must be converted to the type given the bitfield here. */
6356 if (DECL_C_BIT_FIELD (field))
6357 {
38a4afee 6358 unsigned HOST_WIDE_INT width;
24030e4c 6359 tree ftype = TREE_TYPE (field);
ae7e9ddd 6360 width = tree_to_uhwi (DECL_SIZE (field));
38a4afee 6361 if (width != TYPE_PRECISION (ftype))
24030e4c
JJ
6362 {
6363 TREE_TYPE (field)
6364 = c_build_bitfield_integer_type (width,
6365 TYPE_UNSIGNED (ftype));
6366 TREE_TYPE (field)
6367 = cp_build_qualified_type (TREE_TYPE (field),
a3360e77 6368 cp_type_quals (ftype));
24030e4c 6369 }
38a4afee
MM
6370 }
6371
01955e96
MM
6372 /* If we needed additional padding after this field, add it
6373 now. */
6374 if (padding)
6375 {
6376 tree padding_field;
6377
c2255bc4
AH
6378 padding_field = build_decl (input_location,
6379 FIELD_DECL,
01955e96 6380 NULL_TREE,
c8094d83 6381 char_type_node);
01955e96
MM
6382 DECL_BIT_FIELD (padding_field) = 1;
6383 DECL_SIZE (padding_field) = padding;
1e099144 6384 DECL_CONTEXT (padding_field) = t;
ea258926 6385 DECL_ARTIFICIAL (padding_field) = 1;
78e0d62b 6386 DECL_IGNORED_P (padding_field) = 1;
c20118a8 6387 layout_nonempty_base_or_field (rli, padding_field,
c8094d83 6388 NULL_TREE,
17bbb839 6389 empty_base_offsets);
01955e96 6390 }
eca7f13c
MM
6391
6392 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
5c24fba6
MM
6393 }
6394
90d84934 6395 if (!integer_zerop (rli->bitpos))
e3ccdd50
MM
6396 {
6397 /* Make sure that we are on a byte boundary so that the size of
6398 the class without virtual bases will always be a round number
6399 of bytes. */
db3927fb 6400 rli->bitpos = round_up_loc (input_location, rli->bitpos, BITS_PER_UNIT);
e3ccdd50
MM
6401 normalize_rli (rli);
6402 }
17bbb839 6403
3ef397c1
MM
6404 /* Delete all zero-width bit-fields from the list of fields. Now
6405 that the type is laid out they are no longer important. */
6406 remove_zero_width_bit_fields (t);
6407
17bbb839 6408 /* Create the version of T used for virtual bases. We do not use
9e1e64ec 6409 make_class_type for this version; this is an artificial type. For
17bbb839 6410 a POD type, we just reuse T. */
c32097d8 6411 if (CLASSTYPE_NON_LAYOUT_POD_P (t) || CLASSTYPE_EMPTY_P (t))
06ceef4e 6412 {
17bbb839 6413 base_t = make_node (TREE_CODE (t));
c8094d83 6414
90d84934
JM
6415 /* Set the size and alignment for the new type. */
6416 tree eoc;
6417
6418 /* If the ABI version is not at least two, and the last
6419 field was a bit-field, RLI may not be on a byte
6420 boundary. In particular, rli_size_unit_so_far might
6421 indicate the last complete byte, while rli_size_so_far
6422 indicates the total number of bits used. Therefore,
6423 rli_size_so_far, rather than rli_size_unit_so_far, is
6424 used to compute TYPE_SIZE_UNIT. */
6425 eoc = end_of_class (t, /*include_virtuals_p=*/0);
6426 TYPE_SIZE_UNIT (base_t)
6427 = size_binop (MAX_EXPR,
6428 convert (sizetype,
6429 size_binop (CEIL_DIV_EXPR,
6430 rli_size_so_far (rli),
6431 bitsize_int (BITS_PER_UNIT))),
6432 eoc);
6433 TYPE_SIZE (base_t)
6434 = size_binop (MAX_EXPR,
6435 rli_size_so_far (rli),
6436 size_binop (MULT_EXPR,
6437 convert (bitsizetype, eoc),
6438 bitsize_int (BITS_PER_UNIT)));
17bbb839
MM
6439 TYPE_ALIGN (base_t) = rli->record_align;
6440 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
6441
6442 /* Copy the fields from T. */
6443 next_field = &TYPE_FIELDS (base_t);
910ad8de 6444 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
17bbb839
MM
6445 if (TREE_CODE (field) == FIELD_DECL)
6446 {
c2255bc4
AH
6447 *next_field = build_decl (input_location,
6448 FIELD_DECL,
c8094d83 6449 DECL_NAME (field),
17bbb839
MM
6450 TREE_TYPE (field));
6451 DECL_CONTEXT (*next_field) = base_t;
6452 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
6453 DECL_FIELD_BIT_OFFSET (*next_field)
6454 = DECL_FIELD_BIT_OFFSET (field);
4f0a2b81
MM
6455 DECL_SIZE (*next_field) = DECL_SIZE (field);
6456 DECL_MODE (*next_field) = DECL_MODE (field);
910ad8de 6457 next_field = &DECL_CHAIN (*next_field);
17bbb839
MM
6458 }
6459
6460 /* Record the base version of the type. */
6461 CLASSTYPE_AS_BASE (t) = base_t;
5a5cccaa 6462 TYPE_CONTEXT (base_t) = t;
83b14b88 6463 }
1f84ec23 6464 else
17bbb839 6465 CLASSTYPE_AS_BASE (t) = t;
0b41abe6 6466
5ec1192e
MM
6467 /* Every empty class contains an empty class. */
6468 if (CLASSTYPE_EMPTY_P (t))
6469 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
6470
8d08fdba
MS
6471 /* Set the TYPE_DECL for this type to contain the right
6472 value for DECL_OFFSET, so that we can use it as part
6473 of a COMPONENT_REF for multiple inheritance. */
d2e5ee5c 6474 layout_decl (TYPE_MAIN_DECL (t), 0);
8d08fdba 6475
7177d104
MS
6476 /* Now fix up any virtual base class types that we left lying
6477 around. We must get these done before we try to lay out the
5c24fba6
MM
6478 virtual function table. As a side-effect, this will remove the
6479 base subobject fields. */
17bbb839
MM
6480 layout_virtual_bases (rli, empty_base_offsets);
6481
c8094d83 6482 /* Make sure that empty classes are reflected in RLI at this
17bbb839
MM
6483 point. */
6484 include_empty_classes(rli);
6485
6486 /* Make sure not to create any structures with zero size. */
58731fd1 6487 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
c8094d83 6488 place_field (rli,
c2255bc4
AH
6489 build_decl (input_location,
6490 FIELD_DECL, NULL_TREE, char_type_node));
17bbb839 6491
a402c1b1
JM
6492 /* If this is a non-POD, declaring it packed makes a difference to how it
6493 can be used as a field; don't let finalize_record_size undo it. */
6494 if (TYPE_PACKED (t) && !layout_pod_type_p (t))
6495 rli->packed_maybe_necessary = true;
6496
3b426391 6497 /* Let the back end lay out the type. */
17bbb839 6498 finish_record_layout (rli, /*free_p=*/true);
9785e4b1 6499
26d40c3d
JM
6500 if (TYPE_SIZE_UNIT (t)
6501 && TREE_CODE (TYPE_SIZE_UNIT (t)) == INTEGER_CST
6502 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (t))
6503 && !valid_constant_size_p (TYPE_SIZE_UNIT (t)))
6504 error ("type %qT is too large", t);
6505
17bbb839
MM
6506 /* Warn about bases that can't be talked about due to ambiguity. */
6507 warn_about_ambiguous_bases (t);
78b45a24 6508
00bfffa4 6509 /* Now that we're done with layout, give the base fields the real types. */
910ad8de 6510 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
00bfffa4
JM
6511 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
6512 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
6513
9785e4b1 6514 /* Clean up. */
c20118a8 6515 splay_tree_delete (empty_base_offsets);
c5a35c3c
MM
6516
6517 if (CLASSTYPE_EMPTY_P (t)
3db45ab5 6518 && tree_int_cst_lt (sizeof_biggest_empty_class,
c0572427
MM
6519 TYPE_SIZE_UNIT (t)))
6520 sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t);
2ef16140 6521}
c35cce41 6522
af287697
MM
6523/* Determine the "key method" for the class type indicated by TYPE,
6524 and set CLASSTYPE_KEY_METHOD accordingly. */
9aad8f83 6525
af287697
MM
6526void
6527determine_key_method (tree type)
9aad8f83
MA
6528{
6529 tree method;
6530
6531 if (TYPE_FOR_JAVA (type)
6532 || processing_template_decl
6533 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
6534 || CLASSTYPE_INTERFACE_KNOWN (type))
af287697 6535 return;
9aad8f83 6536
af287697
MM
6537 /* The key method is the first non-pure virtual function that is not
6538 inline at the point of class definition. On some targets the
6539 key function may not be inline; those targets should not call
6540 this function until the end of the translation unit. */
9aad8f83 6541 for (method = TYPE_METHODS (type); method != NULL_TREE;
910ad8de 6542 method = DECL_CHAIN (method))
aaf8a23e
JH
6543 if (TREE_CODE (method) == FUNCTION_DECL
6544 && DECL_VINDEX (method) != NULL_TREE
9aad8f83
MA
6545 && ! DECL_DECLARED_INLINE_P (method)
6546 && ! DECL_PURE_VIRTUAL_P (method))
af287697
MM
6547 {
6548 CLASSTYPE_KEY_METHOD (type) = method;
6549 break;
6550 }
9aad8f83 6551
af287697 6552 return;
9aad8f83
MA
6553}
6554
385b73ab
DN
6555
6556/* Allocate and return an instance of struct sorted_fields_type with
6557 N fields. */
6558
6559static struct sorted_fields_type *
6560sorted_fields_type_new (int n)
6561{
6562 struct sorted_fields_type *sft;
766090c2 6563 sft = (sorted_fields_type *) ggc_internal_alloc (sizeof (sorted_fields_type)
385b73ab
DN
6564 + n * sizeof (tree));
6565 sft->len = n;
6566
6567 return sft;
6568}
6569
6570
548502d3
MM
6571/* Perform processing required when the definition of T (a class type)
6572 is complete. */
2ef16140
MM
6573
6574void
94edc4ab 6575finish_struct_1 (tree t)
2ef16140
MM
6576{
6577 tree x;
00a17e31 6578 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
e6858a84 6579 tree virtuals = NULL_TREE;
2ef16140 6580
d0f062fb 6581 if (COMPLETE_TYPE_P (t))
2ef16140 6582 {
9e1e64ec 6583 gcc_assert (MAYBE_CLASS_TYPE_P (t));
1f070f2b 6584 error ("redefinition of %q#T", t);
2ef16140
MM
6585 popclass ();
6586 return;
6587 }
6588
2ef16140
MM
6589 /* If this type was previously laid out as a forward reference,
6590 make sure we lay it out again. */
2ef16140 6591 TYPE_SIZE (t) = NULL_TREE;
911a71a7 6592 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
2ef16140 6593
5ec1192e
MM
6594 /* Make assumptions about the class; we'll reset the flags if
6595 necessary. */
58731fd1
MM
6596 CLASSTYPE_EMPTY_P (t) = 1;
6597 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
5ec1192e 6598 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
3b49d762 6599 CLASSTYPE_LITERAL_P (t) = true;
58731fd1 6600
2ef16140 6601 /* Do end-of-class semantic processing: checking the validity of the
03702748 6602 bases and members and add implicitly generated methods. */
58731fd1 6603 check_bases_and_members (t);
2ef16140 6604
f4f206f4 6605 /* Find the key method. */
a63996f1 6606 if (TYPE_CONTAINS_VPTR_P (t))
9aad8f83 6607 {
af287697
MM
6608 /* The Itanium C++ ABI permits the key method to be chosen when
6609 the class is defined -- even though the key method so
6610 selected may later turn out to be an inline function. On
6611 some systems (such as ARM Symbian OS) the key method cannot
6612 be determined until the end of the translation unit. On such
6613 systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
6614 will cause the class to be added to KEYED_CLASSES. Then, in
6615 finish_file we will determine the key method. */
6616 if (targetm.cxx.key_method_may_be_inline ())
6617 determine_key_method (t);
9aad8f83
MA
6618
6619 /* If a polymorphic class has no key method, we may emit the vtable
5796bf34
JM
6620 in every translation unit where the class definition appears. If
6621 we're devirtualizing, we can look into the vtable even if we
6622 aren't emitting it. */
a41844e5 6623 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
9aad8f83
MA
6624 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
6625 }
6626
2ef16140 6627 /* Layout the class itself. */
e93ee644 6628 layout_class_type (t, &virtuals);
a0c68737
NS
6629 if (CLASSTYPE_AS_BASE (t) != t)
6630 /* We use the base type for trivial assignments, and hence it
6631 needs a mode. */
6632 compute_record_mode (CLASSTYPE_AS_BASE (t));
8ebeee52 6633
e93ee644 6634 virtuals = modify_all_vtables (t, nreverse (virtuals));
db5ae43f 6635
5e19c053 6636 /* If necessary, create the primary vtable for this class. */
e6858a84 6637 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
8d08fdba 6638 {
8d08fdba 6639 /* We must enter these virtuals into the table. */
3ef397c1 6640 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
da3d4dfa 6641 build_primary_vtable (NULL_TREE, t);
dbbf88d1 6642 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
0533d788
MM
6643 /* Here we know enough to change the type of our virtual
6644 function table, but we will wait until later this function. */
28531dd0 6645 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
d3061adb
JM
6646
6647 /* If we're warning about ABI tags, check the types of the new
6648 virtual functions. */
6649 if (warn_abi_tag)
6650 for (tree v = virtuals; v; v = TREE_CHAIN (v))
6651 check_abi_tags (t, TREE_VALUE (v));
8d08fdba
MS
6652 }
6653
bbd15aac 6654 if (TYPE_CONTAINS_VPTR_P (t))
8d08fdba 6655 {
e93ee644
MM
6656 int vindex;
6657 tree fn;
6658
604a3205 6659 if (BINFO_VTABLE (TYPE_BINFO (t)))
50bc768d 6660 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
1eb4bea9 6661 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
50bc768d 6662 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
1eb4bea9 6663
e6858a84 6664 /* Add entries for virtual functions introduced by this class. */
604a3205
NS
6665 BINFO_VIRTUALS (TYPE_BINFO (t))
6666 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
e93ee644
MM
6667
6668 /* Set DECL_VINDEX for all functions declared in this class. */
c8094d83
MS
6669 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
6670 fn;
6671 fn = TREE_CHAIN (fn),
e93ee644
MM
6672 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
6673 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
4977bab6
ZW
6674 {
6675 tree fndecl = BV_FN (fn);
6676
6677 if (DECL_THUNK_P (fndecl))
6678 /* A thunk. We should never be calling this entry directly
6679 from this vtable -- we'd use the entry for the non
6680 thunk base function. */
6681 DECL_VINDEX (fndecl) = NULL_TREE;
6682 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
7d60be94 6683 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
4977bab6 6684 }
8d08fdba
MS
6685 }
6686
d2c5305b 6687 finish_struct_bits (t);
0a35513e 6688 set_method_tm_attributes (t);
8d08fdba 6689
f30432d7
MS
6690 /* Complete the rtl for any static member objects of the type we're
6691 working on. */
910ad8de 6692 for (x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
5a6ccc94 6693 if (VAR_P (x) && TREE_STATIC (x)
650fcd07 6694 && TREE_TYPE (x) != error_mark_node
c7f4981a 6695 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
19e7881c 6696 DECL_MODE (x) = TYPE_MODE (t);
8d08fdba 6697
f90cdf34 6698 /* Done with FIELDS...now decide whether to sort these for
58010b57 6699 faster lookups later.
f90cdf34 6700
6c73ad72 6701 We use a small number because most searches fail (succeeding
f90cdf34
MT
6702 ultimately as the search bores through the inheritance
6703 hierarchy), and we want this failure to occur quickly. */
6704
cba0366c 6705 insert_into_classtype_sorted_fields (TYPE_FIELDS (t), t, 8);
f90cdf34 6706
b9e75696
JM
6707 /* Complain if one of the field types requires lower visibility. */
6708 constrain_class_visibility (t);
6709
8d7a5379
MM
6710 /* Make the rtl for any new vtables we have created, and unmark
6711 the base types we marked. */
6712 finish_vtbls (t);
c8094d83 6713
23656158
MM
6714 /* Build the VTT for T. */
6715 build_vtt (t);
8d7a5379 6716
f03e8526
MM
6717 /* This warning does not make sense for Java classes, since they
6718 cannot have destructors. */
880a467b 6719 if (!TYPE_FOR_JAVA (t) && warn_nonvdtor
abce9208
PC
6720 && TYPE_POLYMORPHIC_P (t) && accessible_nvdtor_p (t)
6721 && !CLASSTYPE_FINAL (t))
880a467b
NS
6722 warning (OPT_Wnon_virtual_dtor,
6723 "%q#T has virtual functions and accessible"
6724 " non-virtual destructor", t);
8d08fdba 6725
0154eaa8 6726 complete_vars (t);
8d08fdba 6727
9e9ff709
MS
6728 if (warn_overloaded_virtual)
6729 warn_hidden (t);
8d08fdba 6730
43d9ad1d
DS
6731 /* Class layout, assignment of virtual table slots, etc., is now
6732 complete. Give the back end a chance to tweak the visibility of
6733 the class or perform any other required target modifications. */
6734 targetm.cxx.adjust_class_at_definition (t);
6735
ae673f14 6736 maybe_suppress_debug_info (t);
8d08fdba 6737
2077db1b
CT
6738 if (flag_vtable_verify)
6739 vtv_save_class_info (t);
6740
b7442fb5 6741 dump_class_hierarchy (t);
c8094d83 6742
d2e5ee5c 6743 /* Finish debugging output for this type. */
881c6935 6744 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
bfcbe068 6745
e7b6bcf3 6746 if (TYPE_TRANSPARENT_AGGR (t))
bfcbe068 6747 {
e7b6bcf3
JJ
6748 tree field = first_field (t);
6749 if (field == NULL_TREE || error_operand_p (field))
6750 {
42b40eff 6751 error ("type transparent %q#T does not have any fields", t);
e7b6bcf3
JJ
6752 TYPE_TRANSPARENT_AGGR (t) = 0;
6753 }
6754 else if (DECL_ARTIFICIAL (field))
6755 {
6756 if (DECL_FIELD_IS_BASE (field))
6757 error ("type transparent class %qT has base classes", t);
6758 else
6759 {
6760 gcc_checking_assert (DECL_VIRTUAL_P (field));
6761 error ("type transparent class %qT has virtual functions", t);
6762 }
6763 TYPE_TRANSPARENT_AGGR (t) = 0;
6764 }
42b40eff
PC
6765 else if (TYPE_MODE (t) != DECL_MODE (field))
6766 {
6767 error ("type transparent %q#T cannot be made transparent because "
6768 "the type of the first field has a different ABI from the "
6769 "class overall", t);
6770 TYPE_TRANSPARENT_AGGR (t) = 0;
6771 }
bfcbe068 6772 }
8d08fdba 6773}
f30432d7 6774
cba0366c
FC
6775/* Insert FIELDS into T for the sorted case if the FIELDS count is
6776 equal to THRESHOLD or greater than THRESHOLD. */
6777
6778static void
6779insert_into_classtype_sorted_fields (tree fields, tree t, int threshold)
6780{
6781 int n_fields = count_fields (fields);
6782 if (n_fields >= threshold)
6783 {
6784 struct sorted_fields_type *field_vec = sorted_fields_type_new (n_fields);
6785 add_fields_to_record_type (fields, field_vec, 0);
6786 qsort (field_vec->elts, n_fields, sizeof (tree), field_decl_cmp);
6787 CLASSTYPE_SORTED_FIELDS (t) = field_vec;
6788 }
6789}
6790
6791/* Insert lately defined enum ENUMTYPE into T for the sorted case. */
6792
6793void
6794insert_late_enum_def_into_classtype_sorted_fields (tree enumtype, tree t)
6795{
6796 struct sorted_fields_type *sorted_fields = CLASSTYPE_SORTED_FIELDS (t);
6797 if (sorted_fields)
6798 {
6799 int i;
6800 int n_fields
6801 = list_length (TYPE_VALUES (enumtype)) + sorted_fields->len;
6802 struct sorted_fields_type *field_vec = sorted_fields_type_new (n_fields);
6803
6804 for (i = 0; i < sorted_fields->len; ++i)
6805 field_vec->elts[i] = sorted_fields->elts[i];
6806
6807 add_enum_fields_to_record_type (enumtype, field_vec,
6808 sorted_fields->len);
6809 qsort (field_vec->elts, n_fields, sizeof (tree), field_decl_cmp);
6810 CLASSTYPE_SORTED_FIELDS (t) = field_vec;
6811 }
6812}
6813
61a127b3
MM
6814/* When T was built up, the member declarations were added in reverse
6815 order. Rearrange them to declaration order. */
6816
6817void
94edc4ab 6818unreverse_member_declarations (tree t)
61a127b3
MM
6819{
6820 tree next;
6821 tree prev;
6822 tree x;
6823
7088fca9
KL
6824 /* The following lists are all in reverse order. Put them in
6825 declaration order now. */
61a127b3 6826 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
7088fca9 6827 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
61a127b3
MM
6828
6829 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
6830 reverse order, so we can't just use nreverse. */
6831 prev = NULL_TREE;
c8094d83
MS
6832 for (x = TYPE_FIELDS (t);
6833 x && TREE_CODE (x) != TYPE_DECL;
61a127b3
MM
6834 x = next)
6835 {
910ad8de
NF
6836 next = DECL_CHAIN (x);
6837 DECL_CHAIN (x) = prev;
61a127b3
MM
6838 prev = x;
6839 }
6840 if (prev)
6841 {
910ad8de 6842 DECL_CHAIN (TYPE_FIELDS (t)) = x;
61a127b3
MM
6843 if (prev)
6844 TYPE_FIELDS (t) = prev;
6845 }
6846}
6847
f30432d7 6848tree
94edc4ab 6849finish_struct (tree t, tree attributes)
f30432d7 6850{
82a98427 6851 location_t saved_loc = input_location;
1f0d71c5 6852
61a127b3
MM
6853 /* Now that we've got all the field declarations, reverse everything
6854 as necessary. */
6855 unreverse_member_declarations (t);
f30432d7 6856
91d231cb 6857 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
e0ff153d 6858 fixup_attribute_variants (t);
6467930b 6859
1f0d71c5
NS
6860 /* Nadger the current location so that diagnostics point to the start of
6861 the struct, not the end. */
f31686a3 6862 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
1f0d71c5 6863
5566b478 6864 if (processing_template_decl)
f30432d7 6865 {
7fb213d8
GB
6866 tree x;
6867
b0e0b31f 6868 finish_struct_methods (t);
867580ce 6869 TYPE_SIZE (t) = bitsize_zero_node;
ae54ec16 6870 TYPE_SIZE_UNIT (t) = size_zero_node;
7fb213d8
GB
6871
6872 /* We need to emit an error message if this type was used as a parameter
6873 and it is an abstract type, even if it is a template. We construct
6874 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
6875 account and we call complete_vars with this type, which will check
6876 the PARM_DECLS. Note that while the type is being defined,
6877 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
6878 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
585b44d3 6879 CLASSTYPE_PURE_VIRTUALS (t) = NULL;
910ad8de 6880 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
7fb213d8 6881 if (DECL_PURE_VIRTUAL_P (x))
9771b263 6882 vec_safe_push (CLASSTYPE_PURE_VIRTUALS (t), x);
7fb213d8 6883 complete_vars (t);
e58d4228
JM
6884 /* We need to add the target functions to the CLASSTYPE_METHOD_VEC if
6885 an enclosing scope is a template class, so that this function be
6886 found by lookup_fnfields_1 when the using declaration is not
6887 instantiated yet. */
6888 for (x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
6889 if (TREE_CODE (x) == USING_DECL)
6890 {
6891 tree fn = strip_using_decl (x);
6892 if (is_overloaded_fn (fn))
6893 for (; fn; fn = OVL_NEXT (fn))
6894 add_method (t, OVL_CURRENT (fn), x);
6895 }
040ca4b3
JM
6896
6897 /* Remember current #pragma pack value. */
6898 TYPE_PRECISION (t) = maximum_field_alignment;
947296ca
JM
6899
6900 /* Fix up any variants we've already built. */
6901 for (x = TYPE_NEXT_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
6902 {
6903 TYPE_SIZE (x) = TYPE_SIZE (t);
6904 TYPE_SIZE_UNIT (x) = TYPE_SIZE_UNIT (t);
6905 TYPE_FIELDS (x) = TYPE_FIELDS (t);
6906 TYPE_METHODS (x) = TYPE_METHODS (t);
6907 }
6f1b4c42 6908 }
f30432d7 6909 else
9f33663b 6910 finish_struct_1 (t);
5566b478 6911
0090caca
JM
6912 if (is_std_init_list (t))
6913 {
6914 /* People keep complaining that the compiler crashes on an invalid
6915 definition of initializer_list, so I guess we should explicitly
6916 reject it. What the compiler internals care about is that it's a
6917 template and has a pointer field followed by an integer field. */
6918 bool ok = false;
6919 if (processing_template_decl)
6920 {
6921 tree f = next_initializable_field (TYPE_FIELDS (t));
6922 if (f && TREE_CODE (TREE_TYPE (f)) == POINTER_TYPE)
6923 {
6924 f = next_initializable_field (DECL_CHAIN (f));
14e51ef2 6925 if (f && same_type_p (TREE_TYPE (f), size_type_node))
0090caca
JM
6926 ok = true;
6927 }
6928 }
6929 if (!ok)
40fecdd6
JM
6930 fatal_error (input_location,
6931 "definition of std::initializer_list does not match "
0090caca
JM
6932 "#include <initializer_list>");
6933 }
6934
82a98427 6935 input_location = saved_loc;
1f0d71c5 6936
5566b478 6937 TYPE_BEING_DEFINED (t) = 0;
8f032717 6938
5566b478 6939 if (current_class_type)
b74a0560 6940 popclass ();
5566b478 6941 else
357351e5 6942 error ("trying to finish struct, but kicked out due to previous parse errors");
5566b478 6943
637f68e8
JM
6944 if (processing_template_decl && at_function_scope_p ()
6945 /* Lambdas are defined by the LAMBDA_EXPR. */
6946 && !LAMBDA_TYPE_P (t))
5f261ba9 6947 add_stmt (build_min (TAG_DEFN, t));
ae673f14 6948
5566b478 6949 return t;
f30432d7 6950}
8d08fdba 6951\f
abcc192b 6952/* Hash table to avoid endless recursion when handling references. */
8d67ee55 6953static hash_table<nofree_ptr_hash<tree_node> > *fixed_type_or_null_ref_ht;
abcc192b 6954
51ddb82e 6955/* Return the dynamic type of INSTANCE, if known.
8d08fdba
MS
6956 Used to determine whether the virtual function table is needed
6957 or not.
6958
6959 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
97d953bb
MM
6960 of our knowledge of its type. *NONNULL should be initialized
6961 before this function is called. */
e92cc029 6962
d8e178a0 6963static tree
555551c2 6964fixed_type_or_null (tree instance, int *nonnull, int *cdtorp)
8d08fdba 6965{
555551c2
MM
6966#define RECUR(T) fixed_type_or_null((T), nonnull, cdtorp)
6967
8d08fdba
MS
6968 switch (TREE_CODE (instance))
6969 {
6970 case INDIRECT_REF:
608afcc5 6971 if (POINTER_TYPE_P (TREE_TYPE (instance)))
a0de9d20
JM
6972 return NULL_TREE;
6973 else
555551c2 6974 return RECUR (TREE_OPERAND (instance, 0));
a0de9d20 6975
8d08fdba
MS
6976 case CALL_EXPR:
6977 /* This is a call to a constructor, hence it's never zero. */
6978 if (TREE_HAS_CONSTRUCTOR (instance))
6979 {
6980 if (nonnull)
6981 *nonnull = 1;
51ddb82e 6982 return TREE_TYPE (instance);
8d08fdba 6983 }
51ddb82e 6984 return NULL_TREE;
8d08fdba
MS
6985
6986 case SAVE_EXPR:
6987 /* This is a call to a constructor, hence it's never zero. */
6988 if (TREE_HAS_CONSTRUCTOR (instance))
6989 {
6990 if (nonnull)
6991 *nonnull = 1;
51ddb82e 6992 return TREE_TYPE (instance);
8d08fdba 6993 }
555551c2 6994 return RECUR (TREE_OPERAND (instance, 0));
8d08fdba 6995
5be014d5 6996 case POINTER_PLUS_EXPR:
8d08fdba
MS
6997 case PLUS_EXPR:
6998 case MINUS_EXPR:
394fd776 6999 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
555551c2 7000 return RECUR (TREE_OPERAND (instance, 0));
8d08fdba
MS
7001 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
7002 /* Propagate nonnull. */
555551c2
MM
7003 return RECUR (TREE_OPERAND (instance, 0));
7004
51ddb82e 7005 return NULL_TREE;
8d08fdba 7006
63a906f0 7007 CASE_CONVERT:
555551c2 7008 return RECUR (TREE_OPERAND (instance, 0));
8d08fdba
MS
7009
7010 case ADDR_EXPR:
88f19756 7011 instance = TREE_OPERAND (instance, 0);
8d08fdba 7012 if (nonnull)
88f19756
RH
7013 {
7014 /* Just because we see an ADDR_EXPR doesn't mean we're dealing
7015 with a real object -- given &p->f, p can still be null. */
7016 tree t = get_base_address (instance);
7017 /* ??? Probably should check DECL_WEAK here. */
7018 if (t && DECL_P (t))
7019 *nonnull = 1;
7020 }
555551c2 7021 return RECUR (instance);
8d08fdba
MS
7022
7023 case COMPONENT_REF:
642124c6
RH
7024 /* If this component is really a base class reference, then the field
7025 itself isn't definitive. */
7026 if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
555551c2
MM
7027 return RECUR (TREE_OPERAND (instance, 0));
7028 return RECUR (TREE_OPERAND (instance, 1));
8d08fdba 7029
8d08fdba
MS
7030 case VAR_DECL:
7031 case FIELD_DECL:
7032 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
9e1e64ec 7033 && MAYBE_CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (instance))))
8d08fdba
MS
7034 {
7035 if (nonnull)
7036 *nonnull = 1;
51ddb82e 7037 return TREE_TYPE (TREE_TYPE (instance));
8d08fdba 7038 }
e92cc029 7039 /* fall through... */
8d08fdba
MS
7040 case TARGET_EXPR:
7041 case PARM_DECL:
f63ab951 7042 case RESULT_DECL:
9e1e64ec 7043 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (instance)))
8d08fdba
MS
7044 {
7045 if (nonnull)
7046 *nonnull = 1;
51ddb82e 7047 return TREE_TYPE (instance);
8d08fdba 7048 }
394fd776 7049 else if (instance == current_class_ptr)
0cbd7506
MS
7050 {
7051 if (nonnull)
7052 *nonnull = 1;
7053
f10eaa2d
JM
7054 /* if we're in a ctor or dtor, we know our type. If
7055 current_class_ptr is set but we aren't in a function, we're in
7056 an NSDMI (and therefore a constructor). */
7057 if (current_scope () != current_function_decl
7058 || (DECL_LANG_SPECIFIC (current_function_decl)
7059 && (DECL_CONSTRUCTOR_P (current_function_decl)
7060 || DECL_DESTRUCTOR_P (current_function_decl))))
0cbd7506
MS
7061 {
7062 if (cdtorp)
7063 *cdtorp = 1;
7064 return TREE_TYPE (TREE_TYPE (instance));
7065 }
7066 }
394fd776 7067 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
0cbd7506 7068 {
555551c2 7069 /* We only need one hash table because it is always left empty. */
c203e8a7
TS
7070 if (!fixed_type_or_null_ref_ht)
7071 fixed_type_or_null_ref_ht
8d67ee55 7072 = new hash_table<nofree_ptr_hash<tree_node> > (37);
555551c2 7073
0cbd7506
MS
7074 /* Reference variables should be references to objects. */
7075 if (nonnull)
8d08fdba 7076 *nonnull = 1;
c8094d83 7077
555551c2 7078 /* Enter the INSTANCE in a table to prevent recursion; a
772f8889
MM
7079 variable's initializer may refer to the variable
7080 itself. */
5a6ccc94 7081 if (VAR_P (instance)
772f8889 7082 && DECL_INITIAL (instance)
bae14a37 7083 && !type_dependent_expression_p_push (DECL_INITIAL (instance))
c203e8a7 7084 && !fixed_type_or_null_ref_ht->find (instance))
772f8889
MM
7085 {
7086 tree type;
703c8606 7087 tree_node **slot;
555551c2 7088
c203e8a7 7089 slot = fixed_type_or_null_ref_ht->find_slot (instance, INSERT);
555551c2
MM
7090 *slot = instance;
7091 type = RECUR (DECL_INITIAL (instance));
c203e8a7 7092 fixed_type_or_null_ref_ht->remove_elt (instance);
555551c2 7093
772f8889
MM
7094 return type;
7095 }
8d08fdba 7096 }
51ddb82e 7097 return NULL_TREE;
8d08fdba
MS
7098
7099 default:
51ddb82e 7100 return NULL_TREE;
8d08fdba 7101 }
555551c2 7102#undef RECUR
8d08fdba 7103}
51ddb82e 7104
838dfd8a 7105/* Return nonzero if the dynamic type of INSTANCE is known, and
338d90b8
NS
7106 equivalent to the static type. We also handle the case where
7107 INSTANCE is really a pointer. Return negative if this is a
7108 ctor/dtor. There the dynamic type is known, but this might not be
7109 the most derived base of the original object, and hence virtual
c65cb8d1 7110 bases may not be laid out according to this type.
51ddb82e
JM
7111
7112 Used to determine whether the virtual function table is needed
7113 or not.
7114
7115 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
97d953bb
MM
7116 of our knowledge of its type. *NONNULL should be initialized
7117 before this function is called. */
51ddb82e
JM
7118
7119int
94edc4ab 7120resolves_to_fixed_type_p (tree instance, int* nonnull)
51ddb82e
JM
7121{
7122 tree t = TREE_TYPE (instance);
394fd776 7123 int cdtorp = 0;
4d3baecc
JM
7124 tree fixed;
7125
65f0c5b3 7126 /* processing_template_decl can be false in a template if we're in
234bef96
PC
7127 instantiate_non_dependent_expr, but we still want to suppress
7128 this check. */
e0e1b357 7129 if (in_template_function ())
4d3baecc
JM
7130 {
7131 /* In a template we only care about the type of the result. */
7132 if (nonnull)
7133 *nonnull = true;
7134 return true;
7135 }
7136
7137 fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
51ddb82e
JM
7138 if (fixed == NULL_TREE)
7139 return 0;
7140 if (POINTER_TYPE_P (t))
7141 t = TREE_TYPE (t);
394fd776
NS
7142 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
7143 return 0;
7144 return cdtorp ? -1 : 1;
51ddb82e
JM
7145}
7146
8d08fdba
MS
7147\f
7148void
94edc4ab 7149init_class_processing (void)
8d08fdba
MS
7150{
7151 current_class_depth = 0;
61a127b3 7152 current_class_stack_size = 10;
c8094d83 7153 current_class_stack
0ac1b889 7154 = XNEWVEC (struct class_stack_node, current_class_stack_size);
9771b263 7155 vec_alloc (local_classes, 8);
c5a35c3c 7156 sizeof_biggest_empty_class = size_zero_node;
8d08fdba 7157
0e5921e8
ZW
7158 ridpointers[(int) RID_PUBLIC] = access_public_node;
7159 ridpointers[(int) RID_PRIVATE] = access_private_node;
7160 ridpointers[(int) RID_PROTECTED] = access_protected_node;
8d08fdba
MS
7161}
7162
39fb05d0
MM
7163/* Restore the cached PREVIOUS_CLASS_LEVEL. */
7164
7165static void
7166restore_class_cache (void)
7167{
39fb05d0 7168 tree type;
39fb05d0
MM
7169
7170 /* We are re-entering the same class we just left, so we don't
7171 have to search the whole inheritance matrix to find all the
7172 decls to bind again. Instead, we install the cached
7173 class_shadowed list and walk through it binding names. */
7174 push_binding_level (previous_class_level);
7175 class_binding_level = previous_class_level;
39fb05d0 7176 /* Restore IDENTIFIER_TYPE_VALUE. */
c8094d83
MS
7177 for (type = class_binding_level->type_shadowed;
7178 type;
39fb05d0
MM
7179 type = TREE_CHAIN (type))
7180 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
7181}
7182
a723baf1
MM
7183/* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
7184 appropriate for TYPE.
8d08fdba 7185
8d08fdba
MS
7186 So that we may avoid calls to lookup_name, we cache the _TYPE
7187 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
7188
7189 For multiple inheritance, we perform a two-pass depth-first search
39fb05d0 7190 of the type lattice. */
8d08fdba
MS
7191
7192void
29370796 7193pushclass (tree type)
8d08fdba 7194{
c888c93b
MM
7195 class_stack_node_t csn;
7196
0771d9d7
JM
7197 type = TYPE_MAIN_VARIANT (type);
7198
61a127b3 7199 /* Make sure there is enough room for the new entry on the stack. */
c8094d83 7200 if (current_class_depth + 1 >= current_class_stack_size)
8d08fdba 7201 {
61a127b3
MM
7202 current_class_stack_size *= 2;
7203 current_class_stack
7767580e 7204 = XRESIZEVEC (struct class_stack_node, current_class_stack,
3db45ab5 7205 current_class_stack_size);
8d08fdba
MS
7206 }
7207
61a127b3 7208 /* Insert a new entry on the class stack. */
c888c93b
MM
7209 csn = current_class_stack + current_class_depth;
7210 csn->name = current_class_name;
7211 csn->type = current_class_type;
7212 csn->access = current_access_specifier;
7213 csn->names_used = 0;
7214 csn->hidden = 0;
61a127b3
MM
7215 current_class_depth++;
7216
7217 /* Now set up the new type. */
8d08fdba
MS
7218 current_class_name = TYPE_NAME (type);
7219 if (TREE_CODE (current_class_name) == TYPE_DECL)
7220 current_class_name = DECL_NAME (current_class_name);
7221 current_class_type = type;
7222
61a127b3
MM
7223 /* By default, things in classes are private, while things in
7224 structures or unions are public. */
c8094d83
MS
7225 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
7226 ? access_private_node
61a127b3
MM
7227 : access_public_node);
7228
89b578be
MM
7229 if (previous_class_level
7230 && type != previous_class_level->this_entity
8d08fdba
MS
7231 && current_class_depth == 1)
7232 {
7233 /* Forcibly remove any old class remnants. */
8f032717 7234 invalidate_class_lookup_cache ();
8d08fdba
MS
7235 }
7236
c8094d83 7237 if (!previous_class_level
89b578be
MM
7238 || type != previous_class_level->this_entity
7239 || current_class_depth > 1)
90ea9897 7240 pushlevel_class ();
29370796 7241 else
39fb05d0 7242 restore_class_cache ();
8f032717
MM
7243}
7244
39fb05d0
MM
7245/* When we exit a toplevel class scope, we save its binding level so
7246 that we can restore it quickly. Here, we've entered some other
7247 class, so we must invalidate our cache. */
8d08fdba 7248
8f032717 7249void
94edc4ab 7250invalidate_class_lookup_cache (void)
8f032717 7251{
89b578be 7252 previous_class_level = NULL;
8d08fdba 7253}
c8094d83 7254
8d08fdba 7255/* Get out of the current class scope. If we were in a class scope
b74a0560 7256 previously, that is the one popped to. */
e92cc029 7257
8d08fdba 7258void
94edc4ab 7259popclass (void)
8d08fdba 7260{
0771d9d7 7261 poplevel_class ();
8d08fdba
MS
7262
7263 current_class_depth--;
61a127b3
MM
7264 current_class_name = current_class_stack[current_class_depth].name;
7265 current_class_type = current_class_stack[current_class_depth].type;
7266 current_access_specifier = current_class_stack[current_class_depth].access;
8f032717
MM
7267 if (current_class_stack[current_class_depth].names_used)
7268 splay_tree_delete (current_class_stack[current_class_depth].names_used);
8d08fdba
MS
7269}
7270
c888c93b
MM
7271/* Mark the top of the class stack as hidden. */
7272
7273void
7274push_class_stack (void)
7275{
7276 if (current_class_depth)
7277 ++current_class_stack[current_class_depth - 1].hidden;
7278}
7279
7280/* Mark the top of the class stack as un-hidden. */
7281
7282void
7283pop_class_stack (void)
7284{
7285 if (current_class_depth)
7286 --current_class_stack[current_class_depth - 1].hidden;
7287}
7288
fa6098f8 7289/* Returns 1 if the class type currently being defined is either T or
971e17ff
AS
7290 a nested type of T. Returns the type from the current_class_stack,
7291 which might be equivalent to but not equal to T in case of
7292 constrained partial specializations. */
b9082e8a 7293
971e17ff 7294tree
94edc4ab 7295currently_open_class (tree t)
b9082e8a
JM
7296{
7297 int i;
fa6098f8 7298
1cb801bc 7299 if (!CLASS_TYPE_P (t))
971e17ff 7300 return NULL_TREE;
1cb801bc 7301
3e5e84be
JM
7302 t = TYPE_MAIN_VARIANT (t);
7303
fa6098f8
MM
7304 /* We start looking from 1 because entry 0 is from global scope,
7305 and has no type. */
7306 for (i = current_class_depth; i > 0; --i)
c888c93b 7307 {
fa6098f8
MM
7308 tree c;
7309 if (i == current_class_depth)
7310 c = current_class_type;
7311 else
7312 {
7313 if (current_class_stack[i].hidden)
7314 break;
7315 c = current_class_stack[i].type;
7316 }
7317 if (!c)
7318 continue;
7319 if (same_type_p (c, t))
971e17ff 7320 return c;
c888c93b 7321 }
971e17ff 7322 return NULL_TREE;
b9082e8a
JM
7323}
7324
70adf8a9
JM
7325/* If either current_class_type or one of its enclosing classes are derived
7326 from T, return the appropriate type. Used to determine how we found
7327 something via unqualified lookup. */
7328
7329tree
94edc4ab 7330currently_open_derived_class (tree t)
70adf8a9
JM
7331{
7332 int i;
7333
9bcb9aae 7334 /* The bases of a dependent type are unknown. */
1fb3244a
MM
7335 if (dependent_type_p (t))
7336 return NULL_TREE;
7337
c44e68a5
KL
7338 if (!current_class_type)
7339 return NULL_TREE;
7340
70adf8a9
JM
7341 if (DERIVED_FROM_P (t, current_class_type))
7342 return current_class_type;
7343
7344 for (i = current_class_depth - 1; i > 0; --i)
c888c93b
MM
7345 {
7346 if (current_class_stack[i].hidden)
7347 break;
7348 if (DERIVED_FROM_P (t, current_class_stack[i].type))
7349 return current_class_stack[i].type;
7350 }
70adf8a9
JM
7351
7352 return NULL_TREE;
7353}
7354
2d7d7f0f
JM
7355/* Return the outermost enclosing class type that is still open, or
7356 NULL_TREE. */
7357
7358tree
7359outermost_open_class (void)
7360{
7361 if (!current_class_type)
7362 return NULL_TREE;
7363 tree r = NULL_TREE;
cea83a3a
JM
7364 if (TYPE_BEING_DEFINED (current_class_type))
7365 r = current_class_type;
7366 for (int i = current_class_depth - 1; i > 0; --i)
2d7d7f0f
JM
7367 {
7368 if (current_class_stack[i].hidden)
7369 break;
7370 tree t = current_class_stack[i].type;
7371 if (!TYPE_BEING_DEFINED (t))
7372 break;
7373 r = t;
7374 }
7375 return r;
7376}
7377
a6846853
JM
7378/* Returns the innermost class type which is not a lambda closure type. */
7379
7380tree
7381current_nonlambda_class_type (void)
7382{
7383 int i;
7384
7385 /* We start looking from 1 because entry 0 is from global scope,
7386 and has no type. */
7387 for (i = current_class_depth; i > 0; --i)
7388 {
7389 tree c;
7390 if (i == current_class_depth)
7391 c = current_class_type;
7392 else
7393 {
7394 if (current_class_stack[i].hidden)
7395 break;
7396 c = current_class_stack[i].type;
7397 }
7398 if (!c)
7399 continue;
7400 if (!LAMBDA_TYPE_P (c))
7401 return c;
7402 }
7403 return NULL_TREE;
7404}
7405
8d08fdba 7406/* When entering a class scope, all enclosing class scopes' names with
14d22dd6
MM
7407 static meaning (static variables, static functions, types and
7408 enumerators) have to be visible. This recursive function calls
7409 pushclass for all enclosing class contexts until global or a local
7410 scope is reached. TYPE is the enclosed class. */
8d08fdba
MS
7411
7412void
14d22dd6 7413push_nested_class (tree type)
8d08fdba 7414{
b262d64c 7415 /* A namespace might be passed in error cases, like A::B:C. */
c8094d83 7416 if (type == NULL_TREE
56d0c6e3 7417 || !CLASS_TYPE_P (type))
a28e3c7f 7418 return;
c8094d83 7419
56d0c6e3 7420 push_nested_class (DECL_CONTEXT (TYPE_MAIN_DECL (type)));
8d08fdba 7421
29370796 7422 pushclass (type);
8d08fdba
MS
7423}
7424
a723baf1 7425/* Undoes a push_nested_class call. */
8d08fdba
MS
7426
7427void
94edc4ab 7428pop_nested_class (void)
8d08fdba 7429{
d2e5ee5c 7430 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
8d08fdba 7431
b74a0560 7432 popclass ();
6b400b21 7433 if (context && CLASS_TYPE_P (context))
b74a0560 7434 pop_nested_class ();
8d08fdba
MS
7435}
7436
46ccf50a
JM
7437/* Returns the number of extern "LANG" blocks we are nested within. */
7438
7439int
94edc4ab 7440current_lang_depth (void)
46ccf50a 7441{
9771b263 7442 return vec_safe_length (current_lang_base);
46ccf50a
JM
7443}
7444
8d08fdba
MS
7445/* Set global variables CURRENT_LANG_NAME to appropriate value
7446 so that behavior of name-mangling machinery is correct. */
7447
7448void
94edc4ab 7449push_lang_context (tree name)
8d08fdba 7450{
9771b263 7451 vec_safe_push (current_lang_base, current_lang_name);
8d08fdba 7452
e229f2cd 7453 if (name == lang_name_cplusplus)
8d08fdba 7454 {
8d08fdba
MS
7455 current_lang_name = name;
7456 }
e229f2cd
PB
7457 else if (name == lang_name_java)
7458 {
e229f2cd
PB
7459 current_lang_name = name;
7460 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
7461 (See record_builtin_java_type in decl.c.) However, that causes
7462 incorrect debug entries if these types are actually used.
00a17e31 7463 So we re-enable debug output after extern "Java". */
e3cd9945
APB
7464 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
7465 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
7466 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
7467 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
7468 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
7469 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
7470 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
7471 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
e229f2cd 7472 }
8d08fdba
MS
7473 else if (name == lang_name_c)
7474 {
8d08fdba
MS
7475 current_lang_name = name;
7476 }
7477 else
9e637a26 7478 error ("language string %<\"%E\"%> not recognized", name);
8d08fdba 7479}
c8094d83 7480
8d08fdba 7481/* Get out of the current language scope. */
e92cc029 7482
8d08fdba 7483void
94edc4ab 7484pop_lang_context (void)
8d08fdba 7485{
9771b263 7486 current_lang_name = current_lang_base->pop ();
8d08fdba 7487}
8d08fdba
MS
7488\f
7489/* Type instantiation routines. */
7490
104bf76a
MM
7491/* Given an OVERLOAD and a TARGET_TYPE, return the function that
7492 matches the TARGET_TYPE. If there is no satisfactory match, return
eff3a276
MM
7493 error_mark_node, and issue an error & warning messages under
7494 control of FLAGS. Permit pointers to member function if FLAGS
7495 permits. If TEMPLATE_ONLY, the name of the overloaded function was
7496 a template-id, and EXPLICIT_TARGS are the explicitly provided
248e1b22
MM
7497 template arguments.
7498
7499 If OVERLOAD is for one or more member functions, then ACCESS_PATH
7500 is the base path used to reference those member functions. If
5e7b9f60
JM
7501 the address is resolved to a member function, access checks will be
7502 performed and errors issued if appropriate. */
104bf76a 7503
2c73f9f5 7504static tree
c8094d83 7505resolve_address_of_overloaded_function (tree target_type,
94edc4ab 7506 tree overload,
988db853 7507 tsubst_flags_t complain,
92af500d 7508 bool template_only,
eff3a276
MM
7509 tree explicit_targs,
7510 tree access_path)
2c73f9f5 7511{
104bf76a 7512 /* Here's what the standard says:
c8094d83 7513
104bf76a
MM
7514 [over.over]
7515
7516 If the name is a function template, template argument deduction
7517 is done, and if the argument deduction succeeds, the deduced
7518 arguments are used to generate a single template function, which
7519 is added to the set of overloaded functions considered.
7520
7521 Non-member functions and static member functions match targets of
7522 type "pointer-to-function" or "reference-to-function." Nonstatic
7523 member functions match targets of type "pointer-to-member
7524 function;" the function type of the pointer to member is used to
7525 select the member function from the set of overloaded member
7526 functions. If a nonstatic member function is selected, the
7527 reference to the overloaded function name is required to have the
7528 form of a pointer to member as described in 5.3.1.
7529
7530 If more than one function is selected, any template functions in
7531 the set are eliminated if the set also contains a non-template
7532 function, and any given template function is eliminated if the
7533 set contains a second template function that is more specialized
7534 than the first according to the partial ordering rules 14.5.5.2.
7535 After such eliminations, if any, there shall remain exactly one
7536 selected function. */
7537
7538 int is_ptrmem = 0;
104bf76a
MM
7539 /* We store the matches in a TREE_LIST rooted here. The functions
7540 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
7541 interoperability with most_specialized_instantiation. */
7542 tree matches = NULL_TREE;
50714e79 7543 tree fn;
7bead48f 7544 tree target_fn_type;
104bf76a 7545
d8f8dca1
MM
7546 /* By the time we get here, we should be seeing only real
7547 pointer-to-member types, not the internal POINTER_TYPE to
7548 METHOD_TYPE representation. */
50e10fa8 7549 gcc_assert (!TYPE_PTR_P (target_type)
50bc768d 7550 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
104bf76a 7551
50bc768d 7552 gcc_assert (is_overloaded_fn (overload));
c8094d83 7553
104bf76a 7554 /* Check that the TARGET_TYPE is reasonable. */
6721db5d
JM
7555 if (TYPE_PTRFN_P (target_type)
7556 || TYPE_REFFN_P (target_type))
381ddaa6 7557 /* This is OK. */;
104bf76a
MM
7558 else if (TYPE_PTRMEMFUNC_P (target_type))
7559 /* This is OK, too. */
7560 is_ptrmem = 1;
7561 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
db80e34e
JJ
7562 /* This is OK, too. This comes from a conversion to reference
7563 type. */
7564 target_type = build_reference_type (target_type);
c8094d83 7565 else
104bf76a 7566 {
988db853 7567 if (complain & tf_error)
c4f73174 7568 error ("cannot resolve overloaded function %qD based on"
0cbd7506
MS
7569 " conversion to type %qT",
7570 DECL_NAME (OVL_FUNCTION (overload)), target_type);
104bf76a
MM
7571 return error_mark_node;
7572 }
c8094d83 7573
7bead48f
JM
7574 /* Non-member functions and static member functions match targets of type
7575 "pointer-to-function" or "reference-to-function." Nonstatic member
7576 functions match targets of type "pointer-to-member-function;" the
7577 function type of the pointer to member is used to select the member
7578 function from the set of overloaded member functions.
7579
7580 So figure out the FUNCTION_TYPE that we want to match against. */
7581 target_fn_type = static_fn_type (target_type);
7582
104bf76a
MM
7583 /* If we can find a non-template function that matches, we can just
7584 use it. There's no point in generating template instantiations
7585 if we're just going to throw them out anyhow. But, of course, we
7586 can only do this when we don't *need* a template function. */
7587 if (!template_only)
7588 {
7589 tree fns;
7590
a723baf1 7591 for (fns = overload; fns; fns = OVL_NEXT (fns))
104bf76a 7592 {
a723baf1 7593 tree fn = OVL_CURRENT (fns);
2c73f9f5 7594
104bf76a
MM
7595 if (TREE_CODE (fn) == TEMPLATE_DECL)
7596 /* We're not looking for templates just yet. */
7597 continue;
7598
7599 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7600 != is_ptrmem)
7601 /* We're looking for a non-static member, and this isn't
7602 one, or vice versa. */
7603 continue;
34ff2673 7604
d63d5d0c
ILT
7605 /* Ignore functions which haven't been explicitly
7606 declared. */
34ff2673
RS
7607 if (DECL_ANTICIPATED (fn))
7608 continue;
7609
104bf76a 7610 /* See if there's a match. */
7bead48f 7611 if (same_type_p (target_fn_type, static_fn_type (fn)))
e1b3e07d 7612 matches = tree_cons (fn, NULL_TREE, matches);
104bf76a
MM
7613 }
7614 }
7615
7616 /* Now, if we've already got a match (or matches), there's no need
7617 to proceed to the template functions. But, if we don't have a
7618 match we need to look at them, too. */
c8094d83 7619 if (!matches)
2c73f9f5 7620 {
104bf76a 7621 tree target_arg_types;
8d3631f8 7622 tree target_ret_type;
104bf76a 7623 tree fns;
c166b898
ILT
7624 tree *args;
7625 unsigned int nargs, ia;
7626 tree arg;
104bf76a 7627
4393e105 7628 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
8d3631f8 7629 target_ret_type = TREE_TYPE (target_fn_type);
e5214479 7630
c166b898
ILT
7631 nargs = list_length (target_arg_types);
7632 args = XALLOCAVEC (tree, nargs);
7633 for (arg = target_arg_types, ia = 0;
7634 arg != NULL_TREE && arg != void_list_node;
7635 arg = TREE_CHAIN (arg), ++ia)
7636 args[ia] = TREE_VALUE (arg);
7637 nargs = ia;
7638
a723baf1 7639 for (fns = overload; fns; fns = OVL_NEXT (fns))
104bf76a 7640 {
a723baf1 7641 tree fn = OVL_CURRENT (fns);
104bf76a 7642 tree instantiation;
104bf76a
MM
7643 tree targs;
7644
7645 if (TREE_CODE (fn) != TEMPLATE_DECL)
7646 /* We're only looking for templates. */
7647 continue;
7648
7649 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7650 != is_ptrmem)
4393e105 7651 /* We're not looking for a non-static member, and this is
104bf76a
MM
7652 one, or vice versa. */
7653 continue;
7654
79d8a272
JM
7655 tree ret = target_ret_type;
7656
7657 /* If the template has a deduced return type, don't expose it to
7658 template argument deduction. */
7659 if (undeduced_auto_decl (fn))
7660 ret = NULL_TREE;
7661
104bf76a 7662 /* Try to do argument deduction. */
f31c0a32 7663 targs = make_tree_vec (DECL_NTPARMS (fn));
cd057e3a 7664 instantiation = fn_type_unification (fn, explicit_targs, targs, args,
79d8a272 7665 nargs, ret,
cd057e3a 7666 DEDUCE_EXACT, LOOKUP_NORMAL,
2b24855e 7667 false, false);
104bf76a
MM
7668 if (instantiation == error_mark_node)
7669 /* Instantiation failed. */
7670 continue;
7671
971e17ff
AS
7672 /* Constraints must be satisfied. This is done before
7673 return type deduction since that instantiates the
7674 function. */
7675 if (flag_concepts && !constraints_satisfied_p (instantiation))
7676 continue;
7677
79d8a272
JM
7678 /* And now force instantiation to do return type deduction. */
7679 if (undeduced_auto_decl (instantiation))
7680 {
7681 ++function_depth;
7682 instantiate_decl (instantiation, /*defer*/false, /*class*/false);
7683 --function_depth;
7684
7685 require_deduced_type (instantiation);
7686 }
7687
104bf76a 7688 /* See if there's a match. */
7bead48f 7689 if (same_type_p (target_fn_type, static_fn_type (instantiation)))
e1b3e07d 7690 matches = tree_cons (instantiation, fn, matches);
104bf76a
MM
7691 }
7692
7693 /* Now, remove all but the most specialized of the matches. */
7694 if (matches)
7695 {
e5214479 7696 tree match = most_specialized_instantiation (matches);
104bf76a
MM
7697
7698 if (match != error_mark_node)
3db45ab5
MS
7699 matches = tree_cons (TREE_PURPOSE (match),
7700 NULL_TREE,
7ca383e6 7701 NULL_TREE);
104bf76a
MM
7702 }
7703 }
7704
7705 /* Now we should have exactly one function in MATCHES. */
7706 if (matches == NULL_TREE)
7707 {
7708 /* There were *no* matches. */
988db853 7709 if (complain & tf_error)
104bf76a 7710 {
0cbd7506 7711 error ("no matches converting function %qD to type %q#T",
95e20768 7712 DECL_NAME (OVL_CURRENT (overload)),
0cbd7506 7713 target_type);
6b9b6b15 7714
c224bdc1 7715 print_candidates (overload);
104bf76a
MM
7716 }
7717 return error_mark_node;
2c73f9f5 7718 }
104bf76a
MM
7719 else if (TREE_CHAIN (matches))
7720 {
e04c614e
JM
7721 /* There were too many matches. First check if they're all
7722 the same function. */
3649b9b7 7723 tree match = NULL_TREE;
104bf76a 7724
e04c614e 7725 fn = TREE_PURPOSE (matches);
3649b9b7 7726
beb42d20
ST
7727 /* For multi-versioned functions, more than one match is just fine and
7728 decls_match will return false as they are different. */
7729 for (match = TREE_CHAIN (matches); match; match = TREE_CHAIN (match))
7730 if (!decls_match (fn, TREE_PURPOSE (match))
7731 && !targetm.target_option.function_versions
7732 (fn, TREE_PURPOSE (match)))
7733 break;
e04c614e
JM
7734
7735 if (match)
104bf76a 7736 {
988db853 7737 if (complain & tf_error)
e04c614e
JM
7738 {
7739 error ("converting overloaded function %qD to type %q#T is ambiguous",
7740 DECL_NAME (OVL_FUNCTION (overload)),
7741 target_type);
104bf76a 7742
e04c614e
JM
7743 /* Since print_candidates expects the functions in the
7744 TREE_VALUE slot, we flip them here. */
7745 for (match = matches; match; match = TREE_CHAIN (match))
7746 TREE_VALUE (match) = TREE_PURPOSE (match);
104bf76a 7747
e04c614e
JM
7748 print_candidates (matches);
7749 }
104bf76a 7750
e04c614e 7751 return error_mark_node;
104bf76a 7752 }
104bf76a
MM
7753 }
7754
50714e79
MM
7755 /* Good, exactly one match. Now, convert it to the correct type. */
7756 fn = TREE_PURPOSE (matches);
7757
b1ce3eb2 7758 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
988db853 7759 && !(complain & tf_ptrmem_ok) && !flag_ms_extensions)
19420d00 7760 {
b1ce3eb2 7761 static int explained;
c8094d83 7762
988db853 7763 if (!(complain & tf_error))
0cbd7506 7764 return error_mark_node;
19420d00 7765
cbe5f3b3 7766 permerror (input_location, "assuming pointer to member %qD", fn);
b1ce3eb2 7767 if (!explained)
0cbd7506 7768 {
1f5b3869 7769 inform (input_location, "(a pointer to member can only be formed with %<&%E%>)", fn);
0cbd7506
MS
7770 explained = 1;
7771 }
19420d00 7772 }
84583208 7773
3649b9b7
ST
7774 /* If a pointer to a function that is multi-versioned is requested, the
7775 pointer to the dispatcher function is returned instead. This works
7776 well because indirectly calling the function will dispatch the right
7777 function version at run-time. */
7778 if (DECL_FUNCTION_VERSIONED (fn))
7779 {
beb42d20
ST
7780 fn = get_function_version_dispatcher (fn);
7781 if (fn == NULL)
7782 return error_mark_node;
3649b9b7 7783 /* Mark all the versions corresponding to the dispatcher as used. */
988db853 7784 if (!(complain & tf_conv))
3649b9b7
ST
7785 mark_versions_used (fn);
7786 }
7787
84583208
MM
7788 /* If we're doing overload resolution purely for the purpose of
7789 determining conversion sequences, we should not consider the
7790 function used. If this conversion sequence is selected, the
7791 function will be marked as used at this point. */
988db853 7792 if (!(complain & tf_conv))
eff3a276 7793 {
4ad610c9 7794 /* Make =delete work with SFINAE. */
988db853 7795 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
4ad610c9 7796 return error_mark_node;
988db853 7797 if (!mark_used (fn, complain) && !(complain & tf_error))
9f635aba 7798 return error_mark_node;
248e1b22
MM
7799 }
7800
7801 /* We could not check access to member functions when this
7802 expression was originally created since we did not know at that
7803 time to which function the expression referred. */
5e7b9f60 7804 if (DECL_FUNCTION_MEMBER_P (fn))
248e1b22
MM
7805 {
7806 gcc_assert (access_path);
988db853 7807 perform_or_defer_access_check (access_path, fn, fn, complain);
eff3a276 7808 }
a6ecf8b6 7809
50714e79 7810 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
988db853 7811 return cp_build_addr_expr (fn, complain);
50714e79
MM
7812 else
7813 {
5ade1ed2 7814 /* The target must be a REFERENCE_TYPE. Above, cp_build_unary_op
50714e79
MM
7815 will mark the function as addressed, but here we must do it
7816 explicitly. */
dffd7eb6 7817 cxx_mark_addressable (fn);
50714e79
MM
7818
7819 return fn;
7820 }
2c73f9f5
ML
7821}
7822
ec255269
MS
7823/* This function will instantiate the type of the expression given in
7824 RHS to match the type of LHSTYPE. If errors exist, then return
988db853 7825 error_mark_node. COMPLAIN is a bit mask. If TF_ERROR is set, then
5e76004e
NS
7826 we complain on errors. If we are not complaining, never modify rhs,
7827 as overload resolution wants to try many possible instantiations, in
7828 the hope that at least one will work.
c8094d83 7829
e6e174e5
JM
7830 For non-recursive calls, LHSTYPE should be a function, pointer to
7831 function, or a pointer to member function. */
e92cc029 7832
8d08fdba 7833tree
988db853 7834instantiate_type (tree lhstype, tree rhs, tsubst_flags_t complain)
8d08fdba 7835{
988db853 7836 tsubst_flags_t complain_in = complain;
eff3a276 7837 tree access_path = NULL_TREE;
c8094d83 7838
988db853 7839 complain &= ~tf_ptrmem_ok;
c8094d83 7840
fbfc8363 7841 if (lhstype == unknown_type_node)
8d08fdba 7842 {
988db853 7843 if (complain & tf_error)
8251199e 7844 error ("not enough type information");
8d08fdba
MS
7845 return error_mark_node;
7846 }
7847
7848 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
abff8e06 7849 {
6721db5d
JM
7850 tree fntype = non_reference (lhstype);
7851 if (same_type_p (fntype, TREE_TYPE (rhs)))
abff8e06 7852 return rhs;
c8094d83 7853 if (flag_ms_extensions
6721db5d 7854 && TYPE_PTRMEMFUNC_P (fntype)
a723baf1
MM
7855 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
7856 /* Microsoft allows `A::f' to be resolved to a
7857 pointer-to-member. */
7858 ;
7859 else
7860 {
988db853 7861 if (complain & tf_error)
c3c1f2b7 7862 error ("cannot convert %qE from type %qT to type %qT",
6721db5d 7863 rhs, TREE_TYPE (rhs), fntype);
a723baf1
MM
7864 return error_mark_node;
7865 }
abff8e06 7866 }
8d08fdba 7867
c5ce25ce 7868 if (BASELINK_P (rhs))
eff3a276
MM
7869 {
7870 access_path = BASELINK_ACCESS_BINFO (rhs);
7871 rhs = BASELINK_FUNCTIONS (rhs);
7872 }
50ad9642 7873
5ae9ba3e
MM
7874 /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
7875 deduce any type information. */
7876 if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
7877 {
988db853 7878 if (complain & tf_error)
5ae9ba3e
MM
7879 error ("not enough type information");
7880 return error_mark_node;
7881 }
7882
eff3a276
MM
7883 /* There only a few kinds of expressions that may have a type
7884 dependent on overload resolution. */
7885 gcc_assert (TREE_CODE (rhs) == ADDR_EXPR
7886 || TREE_CODE (rhs) == COMPONENT_REF
3f3fd87d 7887 || is_overloaded_fn (rhs)
95e20768 7888 || (flag_ms_extensions && TREE_CODE (rhs) == FUNCTION_DECL));
c73964b2 7889
8d08fdba
MS
7890 /* This should really only be used when attempting to distinguish
7891 what sort of a pointer to function we have. For now, any
7892 arithmetic operation which is not supported on pointers
7893 is rejected as an error. */
7894
7895 switch (TREE_CODE (rhs))
7896 {
8d08fdba 7897 case COMPONENT_REF:
92af500d 7898 {
5ae9ba3e 7899 tree member = TREE_OPERAND (rhs, 1);
92af500d 7900
988db853 7901 member = instantiate_type (lhstype, member, complain);
5ae9ba3e 7902 if (member != error_mark_node
92af500d 7903 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
04c06002 7904 /* Do not lose object's side effects. */
5ae9ba3e
MM
7905 return build2 (COMPOUND_EXPR, TREE_TYPE (member),
7906 TREE_OPERAND (rhs, 0), member);
7907 return member;
92af500d 7908 }
8d08fdba 7909
2a238a97 7910 case OFFSET_REF:
05e0b2f4
JM
7911 rhs = TREE_OPERAND (rhs, 1);
7912 if (BASELINK_P (rhs))
988db853 7913 return instantiate_type (lhstype, rhs, complain_in);
05e0b2f4 7914
2a238a97
MM
7915 /* This can happen if we are forming a pointer-to-member for a
7916 member template. */
50bc768d 7917 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
05e0b2f4 7918
2a238a97 7919 /* Fall through. */
874503bc 7920
386b8a85 7921 case TEMPLATE_ID_EXPR:
2bdb0643
JM
7922 {
7923 tree fns = TREE_OPERAND (rhs, 0);
7924 tree args = TREE_OPERAND (rhs, 1);
7925
19420d00 7926 return
988db853 7927 resolve_address_of_overloaded_function (lhstype, fns, complain_in,
92af500d 7928 /*template_only=*/true,
eff3a276 7929 args, access_path);
2bdb0643 7930 }
386b8a85 7931
2c73f9f5 7932 case OVERLOAD:
a723baf1 7933 case FUNCTION_DECL:
c8094d83 7934 return
988db853 7935 resolve_address_of_overloaded_function (lhstype, rhs, complain_in,
92af500d 7936 /*template_only=*/false,
eff3a276
MM
7937 /*explicit_targs=*/NULL_TREE,
7938 access_path);
2c73f9f5 7939
ca36f057 7940 case ADDR_EXPR:
19420d00
NS
7941 {
7942 if (PTRMEM_OK_P (rhs))
988db853 7943 complain |= tf_ptrmem_ok;
c8094d83 7944
988db853 7945 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), complain);
19420d00 7946 }
ca36f057
MM
7947
7948 case ERROR_MARK:
7949 return error_mark_node;
7950
7951 default:
8dc2b103 7952 gcc_unreachable ();
ca36f057 7953 }
8dc2b103 7954 return error_mark_node;
ca36f057
MM
7955}
7956\f
7957/* Return the name of the virtual function pointer field
7958 (as an IDENTIFIER_NODE) for the given TYPE. Note that
7959 this may have to look back through base types to find the
7960 ultimate field name. (For single inheritance, these could
7961 all be the same name. Who knows for multiple inheritance). */
7962
7963static tree
94edc4ab 7964get_vfield_name (tree type)
ca36f057 7965{
37a247a0 7966 tree binfo, base_binfo;
ca36f057
MM
7967 char *buf;
7968
37a247a0 7969 for (binfo = TYPE_BINFO (type);
fa743e8c 7970 BINFO_N_BASE_BINFOS (binfo);
37a247a0
NS
7971 binfo = base_binfo)
7972 {
7973 base_binfo = BINFO_BASE_BINFO (binfo, 0);
ca36f057 7974
37a247a0
NS
7975 if (BINFO_VIRTUAL_P (base_binfo)
7976 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
7977 break;
7978 }
c8094d83 7979
ca36f057 7980 type = BINFO_TYPE (binfo);
67f5655f 7981 buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
3db45ab5 7982 + TYPE_NAME_LENGTH (type) + 2);
ea122333
JM
7983 sprintf (buf, VFIELD_NAME_FORMAT,
7984 IDENTIFIER_POINTER (constructor_name (type)));
ca36f057
MM
7985 return get_identifier (buf);
7986}
7987
7988void
94edc4ab 7989print_class_statistics (void)
ca36f057 7990{
7aa6d18a
SB
7991 if (! GATHER_STATISTICS)
7992 return;
7993
ca36f057
MM
7994 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
7995 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
ca36f057
MM
7996 if (n_vtables)
7997 {
7998 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
7999 n_vtables, n_vtable_searches);
8000 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
8001 n_vtable_entries, n_vtable_elems);
8002 }
ca36f057
MM
8003}
8004
8005/* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
8006 according to [class]:
0cbd7506 8007 The class-name is also inserted
ca36f057
MM
8008 into the scope of the class itself. For purposes of access checking,
8009 the inserted class name is treated as if it were a public member name. */
8010
8011void
94edc4ab 8012build_self_reference (void)
ca36f057
MM
8013{
8014 tree name = constructor_name (current_class_type);
8015 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
8016 tree saved_cas;
8017
8018 DECL_NONLOCAL (value) = 1;
8019 DECL_CONTEXT (value) = current_class_type;
8020 DECL_ARTIFICIAL (value) = 1;
a3d87771 8021 SET_DECL_SELF_REFERENCE_P (value);
6f1abb06 8022 set_underlying_type (value);
ca36f057
MM
8023
8024 if (processing_template_decl)
8025 value = push_template_decl (value);
8026
8027 saved_cas = current_access_specifier;
8028 current_access_specifier = access_public_node;
8029 finish_member_declaration (value);
8030 current_access_specifier = saved_cas;
8031}
8032
8033/* Returns 1 if TYPE contains only padding bytes. */
8034
8035int
94edc4ab 8036is_empty_class (tree type)
ca36f057 8037{
ca36f057
MM
8038 if (type == error_mark_node)
8039 return 0;
8040
2588c9e9 8041 if (! CLASS_TYPE_P (type))
ca36f057
MM
8042 return 0;
8043
90d84934 8044 return CLASSTYPE_EMPTY_P (type);
ca36f057
MM
8045}
8046
2588c9e9 8047/* Returns true if TYPE contains no actual data, just various
0930cc0e 8048 possible combinations of empty classes and possibly a vptr. */
2588c9e9
JM
8049
8050bool
8051is_really_empty_class (tree type)
8052{
2588c9e9
JM
8053 if (CLASS_TYPE_P (type))
8054 {
8055 tree field;
8056 tree binfo;
8057 tree base_binfo;
8058 int i;
8059
0930cc0e
JM
8060 /* CLASSTYPE_EMPTY_P isn't set properly until the class is actually laid
8061 out, but we'd like to be able to check this before then. */
8062 if (COMPLETE_TYPE_P (type) && is_empty_class (type))
8063 return true;
8064
2588c9e9
JM
8065 for (binfo = TYPE_BINFO (type), i = 0;
8066 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
8067 if (!is_really_empty_class (BINFO_TYPE (base_binfo)))
8068 return false;
910ad8de 8069 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
2588c9e9
JM
8070 if (TREE_CODE (field) == FIELD_DECL
8071 && !DECL_ARTIFICIAL (field)
8072 && !is_really_empty_class (TREE_TYPE (field)))
8073 return false;
8074 return true;
8075 }
8076 else if (TREE_CODE (type) == ARRAY_TYPE)
8077 return is_really_empty_class (TREE_TYPE (type));
8078 return false;
8079}
8080
ca36f057
MM
8081/* Note that NAME was looked up while the current class was being
8082 defined and that the result of that lookup was DECL. */
8083
8084void
94edc4ab 8085maybe_note_name_used_in_class (tree name, tree decl)
ca36f057
MM
8086{
8087 splay_tree names_used;
8088
8089 /* If we're not defining a class, there's nothing to do. */
39fb05d0 8090 if (!(innermost_scope_kind() == sk_class
d5f4eddd
JM
8091 && TYPE_BEING_DEFINED (current_class_type)
8092 && !LAMBDA_TYPE_P (current_class_type)))
ca36f057 8093 return;
c8094d83 8094
ca36f057
MM
8095 /* If there's already a binding for this NAME, then we don't have
8096 anything to worry about. */
c8094d83 8097 if (lookup_member (current_class_type, name,
db422ace 8098 /*protect=*/0, /*want_type=*/false, tf_warning_or_error))
ca36f057
MM
8099 return;
8100
8101 if (!current_class_stack[current_class_depth - 1].names_used)
8102 current_class_stack[current_class_depth - 1].names_used
8103 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
8104 names_used = current_class_stack[current_class_depth - 1].names_used;
8105
8106 splay_tree_insert (names_used,
c8094d83 8107 (splay_tree_key) name,
ca36f057
MM
8108 (splay_tree_value) decl);
8109}
8110
8111/* Note that NAME was declared (as DECL) in the current class. Check
0e339752 8112 to see that the declaration is valid. */
ca36f057
MM
8113
8114void
94edc4ab 8115note_name_declared_in_class (tree name, tree decl)
ca36f057
MM
8116{
8117 splay_tree names_used;
8118 splay_tree_node n;
8119
8120 /* Look to see if we ever used this name. */
c8094d83 8121 names_used
ca36f057
MM
8122 = current_class_stack[current_class_depth - 1].names_used;
8123 if (!names_used)
8124 return;
8ce1235b
KT
8125 /* The C language allows members to be declared with a type of the same
8126 name, and the C++ standard says this diagnostic is not required. So
8127 allow it in extern "C" blocks unless predantic is specified.
8128 Allow it in all cases if -ms-extensions is specified. */
8129 if ((!pedantic && current_lang_name == lang_name_c)
8130 || flag_ms_extensions)
8131 return;
ca36f057
MM
8132 n = splay_tree_lookup (names_used, (splay_tree_key) name);
8133 if (n)
8134 {
8135 /* [basic.scope.class]
c8094d83 8136
ca36f057
MM
8137 A name N used in a class S shall refer to the same declaration
8138 in its context and when re-evaluated in the completed scope of
8139 S. */
cbe5f3b3 8140 permerror (input_location, "declaration of %q#D", decl);
15827d12
PC
8141 permerror (location_of ((tree) n->value),
8142 "changes meaning of %qD from %q#D",
8143 DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
ca36f057
MM
8144 }
8145}
8146
3461fba7
NS
8147/* Returns the VAR_DECL for the complete vtable associated with BINFO.
8148 Secondary vtables are merged with primary vtables; this function
8149 will return the VAR_DECL for the primary vtable. */
ca36f057 8150
c35cce41 8151tree
94edc4ab 8152get_vtbl_decl_for_binfo (tree binfo)
c35cce41
MM
8153{
8154 tree decl;
8155
8156 decl = BINFO_VTABLE (binfo);
5be014d5 8157 if (decl && TREE_CODE (decl) == POINTER_PLUS_EXPR)
c35cce41 8158 {
50bc768d 8159 gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
c35cce41
MM
8160 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
8161 }
8162 if (decl)
5a6ccc94 8163 gcc_assert (VAR_P (decl));
c35cce41
MM
8164 return decl;
8165}
8166
911a71a7 8167
dbbf88d1
NS
8168/* Returns the binfo for the primary base of BINFO. If the resulting
8169 BINFO is a virtual base, and it is inherited elsewhere in the
8170 hierarchy, then the returned binfo might not be the primary base of
8171 BINFO in the complete object. Check BINFO_PRIMARY_P or
8172 BINFO_LOST_PRIMARY_P to be sure. */
911a71a7 8173
b5791fdc 8174static tree
94edc4ab 8175get_primary_binfo (tree binfo)
911a71a7
MM
8176{
8177 tree primary_base;
c8094d83 8178
911a71a7
MM
8179 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
8180 if (!primary_base)
8181 return NULL_TREE;
8182
b5791fdc 8183 return copied_binfo (primary_base, binfo);
911a71a7
MM
8184}
8185
838dfd8a 8186/* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
b7442fb5
NS
8187
8188static int
94edc4ab 8189maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
b7442fb5
NS
8190{
8191 if (!indented_p)
8192 fprintf (stream, "%*s", indent, "");
8193 return 1;
8194}
8195
dbbf88d1
NS
8196/* Dump the offsets of all the bases rooted at BINFO to STREAM.
8197 INDENT should be zero when called from the top level; it is
8198 incremented recursively. IGO indicates the next expected BINFO in
9bcb9aae 8199 inheritance graph ordering. */
c35cce41 8200
dbbf88d1
NS
8201static tree
8202dump_class_hierarchy_r (FILE *stream,
0cbd7506
MS
8203 int flags,
8204 tree binfo,
8205 tree igo,
8206 int indent)
ca36f057 8207{
b7442fb5 8208 int indented = 0;
fa743e8c
NS
8209 tree base_binfo;
8210 int i;
c8094d83 8211
b7442fb5 8212 indented = maybe_indent_hierarchy (stream, indent, 0);
6c5bf58a 8213 fprintf (stream, "%s (0x" HOST_WIDE_INT_PRINT_HEX ") ",
fc6633e0 8214 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
6c5bf58a 8215 (HOST_WIDE_INT) (uintptr_t) binfo);
dbbf88d1
NS
8216 if (binfo != igo)
8217 {
8218 fprintf (stream, "alternative-path\n");
8219 return igo;
8220 }
8221 igo = TREE_CHAIN (binfo);
c8094d83 8222
9965d119 8223 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
9439e9a1 8224 tree_to_shwi (BINFO_OFFSET (binfo)));
9965d119
NS
8225 if (is_empty_class (BINFO_TYPE (binfo)))
8226 fprintf (stream, " empty");
8227 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
8228 fprintf (stream, " nearly-empty");
809e3e7f 8229 if (BINFO_VIRTUAL_P (binfo))
dbbf88d1 8230 fprintf (stream, " virtual");
9965d119 8231 fprintf (stream, "\n");
ca36f057 8232
b7442fb5 8233 indented = 0;
fc6633e0 8234 if (BINFO_PRIMARY_P (binfo))
b7442fb5
NS
8235 {
8236 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6c5bf58a 8237 fprintf (stream, " primary-for %s (0x" HOST_WIDE_INT_PRINT_HEX ")",
fc6633e0 8238 type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
b7442fb5 8239 TFF_PLAIN_IDENTIFIER),
6c5bf58a 8240 (HOST_WIDE_INT) (uintptr_t) BINFO_INHERITANCE_CHAIN (binfo));
b7442fb5
NS
8241 }
8242 if (BINFO_LOST_PRIMARY_P (binfo))
8243 {
8244 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8245 fprintf (stream, " lost-primary");
8246 }
8247 if (indented)
8248 fprintf (stream, "\n");
8249
8250 if (!(flags & TDF_SLIM))
8251 {
8252 int indented = 0;
c8094d83 8253
b7442fb5
NS
8254 if (BINFO_SUBVTT_INDEX (binfo))
8255 {
8256 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8257 fprintf (stream, " subvttidx=%s",
8258 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
8259 TFF_PLAIN_IDENTIFIER));
8260 }
8261 if (BINFO_VPTR_INDEX (binfo))
8262 {
8263 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8264 fprintf (stream, " vptridx=%s",
8265 expr_as_string (BINFO_VPTR_INDEX (binfo),
8266 TFF_PLAIN_IDENTIFIER));
8267 }
8268 if (BINFO_VPTR_FIELD (binfo))
8269 {
8270 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8271 fprintf (stream, " vbaseoffset=%s",
8272 expr_as_string (BINFO_VPTR_FIELD (binfo),
8273 TFF_PLAIN_IDENTIFIER));
8274 }
8275 if (BINFO_VTABLE (binfo))
8276 {
8277 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8278 fprintf (stream, " vptr=%s",
8279 expr_as_string (BINFO_VTABLE (binfo),
8280 TFF_PLAIN_IDENTIFIER));
8281 }
c8094d83 8282
b7442fb5
NS
8283 if (indented)
8284 fprintf (stream, "\n");
8285 }
dbbf88d1 8286
fa743e8c
NS
8287 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
8288 igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
c8094d83 8289
dbbf88d1 8290 return igo;
c35cce41
MM
8291}
8292
8293/* Dump the BINFO hierarchy for T. */
8294
b7442fb5 8295static void
bb885938 8296dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
c35cce41 8297{
b7442fb5
NS
8298 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
8299 fprintf (stream, " size=%lu align=%lu\n",
9439e9a1 8300 (unsigned long)(tree_to_shwi (TYPE_SIZE (t)) / BITS_PER_UNIT),
b7442fb5 8301 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
dbbf88d1 8302 fprintf (stream, " base size=%lu base align=%lu\n",
9439e9a1 8303 (unsigned long)(tree_to_shwi (TYPE_SIZE (CLASSTYPE_AS_BASE (t)))
dbbf88d1
NS
8304 / BITS_PER_UNIT),
8305 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
8306 / BITS_PER_UNIT));
8307 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
b7442fb5 8308 fprintf (stream, "\n");
bb885938
NS
8309}
8310
da1d7781 8311/* Debug interface to hierarchy dumping. */
bb885938 8312
ac1f3b7e 8313void
bb885938
NS
8314debug_class (tree t)
8315{
8316 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
8317}
8318
8319static void
8320dump_class_hierarchy (tree t)
8321{
8322 int flags;
f8a36c78 8323 FILE *stream = get_dump_info (TDI_class, &flags);
bb885938
NS
8324
8325 if (stream)
8326 {
8327 dump_class_hierarchy_1 (stream, flags, t);
bb885938 8328 }
b7442fb5
NS
8329}
8330
8331static void
94edc4ab 8332dump_array (FILE * stream, tree decl)
b7442fb5 8333{
4038c495
GB
8334 tree value;
8335 unsigned HOST_WIDE_INT ix;
b7442fb5
NS
8336 HOST_WIDE_INT elt;
8337 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
8338
9439e9a1 8339 elt = (tree_to_shwi (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))))
b7442fb5
NS
8340 / BITS_PER_UNIT);
8341 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
8342 fprintf (stream, " %s entries",
8343 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
8344 TFF_PLAIN_IDENTIFIER));
8345 fprintf (stream, "\n");
8346
4038c495
GB
8347 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
8348 ix, value)
4fdc14ca 8349 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
4038c495 8350 expr_as_string (value, TFF_PLAIN_IDENTIFIER));
b7442fb5
NS
8351}
8352
8353static void
94edc4ab 8354dump_vtable (tree t, tree binfo, tree vtable)
b7442fb5
NS
8355{
8356 int flags;
f8a36c78 8357 FILE *stream = get_dump_info (TDI_class, &flags);
b7442fb5
NS
8358
8359 if (!stream)
8360 return;
8361
8362 if (!(flags & TDF_SLIM))
9965d119 8363 {
b7442fb5 8364 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
c8094d83 8365
b7442fb5
NS
8366 fprintf (stream, "%s for %s",
8367 ctor_vtbl_p ? "Construction vtable" : "Vtable",
fc6633e0 8368 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
b7442fb5
NS
8369 if (ctor_vtbl_p)
8370 {
809e3e7f 8371 if (!BINFO_VIRTUAL_P (binfo))
6c5bf58a
KT
8372 fprintf (stream, " (0x" HOST_WIDE_INT_PRINT_HEX " instance)",
8373 (HOST_WIDE_INT) (uintptr_t) binfo);
b7442fb5
NS
8374 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
8375 }
8376 fprintf (stream, "\n");
8377 dump_array (stream, vtable);
8378 fprintf (stream, "\n");
9965d119 8379 }
b7442fb5
NS
8380}
8381
8382static void
94edc4ab 8383dump_vtt (tree t, tree vtt)
b7442fb5
NS
8384{
8385 int flags;
f8a36c78 8386 FILE *stream = get_dump_info (TDI_class, &flags);
b7442fb5
NS
8387
8388 if (!stream)
8389 return;
8390
8391 if (!(flags & TDF_SLIM))
8392 {
8393 fprintf (stream, "VTT for %s\n",
8394 type_as_string (t, TFF_PLAIN_IDENTIFIER));
8395 dump_array (stream, vtt);
8396 fprintf (stream, "\n");
8397 }
ca36f057
MM
8398}
8399
bb885938
NS
8400/* Dump a function or thunk and its thunkees. */
8401
8402static void
8403dump_thunk (FILE *stream, int indent, tree thunk)
8404{
8405 static const char spaces[] = " ";
8406 tree name = DECL_NAME (thunk);
8407 tree thunks;
c8094d83 8408
bb885938
NS
8409 fprintf (stream, "%.*s%p %s %s", indent, spaces,
8410 (void *)thunk,
8411 !DECL_THUNK_P (thunk) ? "function"
8412 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
8413 name ? IDENTIFIER_POINTER (name) : "<unset>");
e00853fd 8414 if (DECL_THUNK_P (thunk))
bb885938
NS
8415 {
8416 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
8417 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
8418
8419 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
8420 if (!virtual_adjust)
8421 /*NOP*/;
8422 else if (DECL_THIS_THUNK_P (thunk))
8423 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
9439e9a1 8424 tree_to_shwi (virtual_adjust));
bb885938
NS
8425 else
8426 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
9439e9a1 8427 tree_to_shwi (BINFO_VPTR_FIELD (virtual_adjust)),
bb885938 8428 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
e00853fd
NS
8429 if (THUNK_ALIAS (thunk))
8430 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
bb885938
NS
8431 }
8432 fprintf (stream, "\n");
8433 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
8434 dump_thunk (stream, indent + 2, thunks);
8435}
8436
8437/* Dump the thunks for FN. */
8438
ac1f3b7e 8439void
bb885938
NS
8440debug_thunks (tree fn)
8441{
8442 dump_thunk (stderr, 0, fn);
8443}
8444
ca36f057
MM
8445/* Virtual function table initialization. */
8446
8447/* Create all the necessary vtables for T and its base classes. */
8448
8449static void
94edc4ab 8450finish_vtbls (tree t)
ca36f057 8451{
3461fba7 8452 tree vbase;
9771b263 8453 vec<constructor_elt, va_gc> *v = NULL;
9d6a019c 8454 tree vtable = BINFO_VTABLE (TYPE_BINFO (t));
ca36f057 8455
3461fba7
NS
8456 /* We lay out the primary and secondary vtables in one contiguous
8457 vtable. The primary vtable is first, followed by the non-virtual
8458 secondary vtables in inheritance graph order. */
9d6a019c
NF
8459 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t), TYPE_BINFO (t),
8460 vtable, t, &v);
c8094d83 8461
3461fba7
NS
8462 /* Then come the virtual bases, also in inheritance graph order. */
8463 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
8464 {
809e3e7f 8465 if (!BINFO_VIRTUAL_P (vbase))
3461fba7 8466 continue;
9d6a019c 8467 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), vtable, t, &v);
ff668506
JM
8468 }
8469
604a3205 8470 if (BINFO_VTABLE (TYPE_BINFO (t)))
9d6a019c 8471 initialize_vtable (TYPE_BINFO (t), v);
ca36f057
MM
8472}
8473
8474/* Initialize the vtable for BINFO with the INITS. */
8475
8476static void
9771b263 8477initialize_vtable (tree binfo, vec<constructor_elt, va_gc> *inits)
ca36f057 8478{
ca36f057
MM
8479 tree decl;
8480
9771b263 8481 layout_vtable_decl (binfo, vec_safe_length (inits));
c35cce41 8482 decl = get_vtbl_decl_for_binfo (binfo);
19c29b2f 8483 initialize_artificial_var (decl, inits);
b7442fb5 8484 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
23656158
MM
8485}
8486
9965d119
NS
8487/* Build the VTT (virtual table table) for T.
8488 A class requires a VTT if it has virtual bases.
c8094d83 8489
9965d119
NS
8490 This holds
8491 1 - primary virtual pointer for complete object T
90ecce3e
JM
8492 2 - secondary VTTs for each direct non-virtual base of T which requires a
8493 VTT
9965d119
NS
8494 3 - secondary virtual pointers for each direct or indirect base of T which
8495 has virtual bases or is reachable via a virtual path from T.
8496 4 - secondary VTTs for each direct or indirect virtual base of T.
c8094d83 8497
9965d119 8498 Secondary VTTs look like complete object VTTs without part 4. */
23656158
MM
8499
8500static void
94edc4ab 8501build_vtt (tree t)
23656158 8502{
23656158
MM
8503 tree type;
8504 tree vtt;
3ec6bad3 8505 tree index;
9771b263 8506 vec<constructor_elt, va_gc> *inits;
23656158 8507
23656158 8508 /* Build up the initializers for the VTT. */
9d6a019c 8509 inits = NULL;
3ec6bad3 8510 index = size_zero_node;
9965d119 8511 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
23656158
MM
8512
8513 /* If we didn't need a VTT, we're done. */
8514 if (!inits)
8515 return;
8516
8517 /* Figure out the type of the VTT. */
dcedcddb 8518 type = build_array_of_n_type (const_ptr_type_node,
9771b263 8519 inits->length ());
c8094d83 8520
23656158 8521 /* Now, build the VTT object itself. */
3e355d92 8522 vtt = build_vtable (t, mangle_vtt_for_type (t), type);
19c29b2f 8523 initialize_artificial_var (vtt, inits);
548502d3 8524 /* Add the VTT to the vtables list. */
910ad8de
NF
8525 DECL_CHAIN (vtt) = DECL_CHAIN (CLASSTYPE_VTABLES (t));
8526 DECL_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
b7442fb5
NS
8527
8528 dump_vtt (t, vtt);
23656158
MM
8529}
8530
13de7ec4
JM
8531/* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
8532 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
8533 and CHAIN the vtable pointer for this binfo after construction is
00a17e31 8534 complete. VALUE can also be another BINFO, in which case we recurse. */
13de7ec4
JM
8535
8536static tree
94edc4ab 8537binfo_ctor_vtable (tree binfo)
13de7ec4
JM
8538{
8539 tree vt;
8540
8541 while (1)
8542 {
8543 vt = BINFO_VTABLE (binfo);
8544 if (TREE_CODE (vt) == TREE_LIST)
8545 vt = TREE_VALUE (vt);
95b4aca6 8546 if (TREE_CODE (vt) == TREE_BINFO)
13de7ec4
JM
8547 binfo = vt;
8548 else
8549 break;
8550 }
8551
8552 return vt;
8553}
8554
a3a0fc7f 8555/* Data for secondary VTT initialization. */
a79683d5 8556struct secondary_vptr_vtt_init_data
a3a0fc7f
NS
8557{
8558 /* Is this the primary VTT? */
8559 bool top_level_p;
8560
8561 /* Current index into the VTT. */
8562 tree index;
8563
9d6a019c 8564 /* Vector of initializers built up. */
9771b263 8565 vec<constructor_elt, va_gc> *inits;
a3a0fc7f
NS
8566
8567 /* The type being constructed by this secondary VTT. */
8568 tree type_being_constructed;
a79683d5 8569};
a3a0fc7f 8570
23656158 8571/* Recursively build the VTT-initializer for BINFO (which is in the
9965d119
NS
8572 hierarchy dominated by T). INITS points to the end of the initializer
8573 list to date. INDEX is the VTT index where the next element will be
8574 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
8575 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
8576 for virtual bases of T. When it is not so, we build the constructor
8577 vtables for the BINFO-in-T variant. */
23656158 8578
9d6a019c 8579static void
9771b263
DN
8580build_vtt_inits (tree binfo, tree t, vec<constructor_elt, va_gc> **inits,
8581 tree *index)
23656158
MM
8582{
8583 int i;
8584 tree b;
8585 tree init;
a3a0fc7f 8586 secondary_vptr_vtt_init_data data;
539ed333 8587 int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
23656158
MM
8588
8589 /* We only need VTTs for subobjects with virtual bases. */
5775a06a 8590 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
9d6a019c 8591 return;
23656158
MM
8592
8593 /* We need to use a construction vtable if this is not the primary
8594 VTT. */
9965d119 8595 if (!top_level_p)
3ec6bad3
MM
8596 {
8597 build_ctor_vtbl_group (binfo, t);
8598
8599 /* Record the offset in the VTT where this sub-VTT can be found. */
8600 BINFO_SUBVTT_INDEX (binfo) = *index;
8601 }
23656158
MM
8602
8603 /* Add the address of the primary vtable for the complete object. */
13de7ec4 8604 init = binfo_ctor_vtable (binfo);
9d6a019c 8605 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
9965d119
NS
8606 if (top_level_p)
8607 {
50bc768d 8608 gcc_assert (!BINFO_VPTR_INDEX (binfo));
9965d119
NS
8609 BINFO_VPTR_INDEX (binfo) = *index;
8610 }
3ec6bad3 8611 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
c8094d83 8612
23656158 8613 /* Recursively add the secondary VTTs for non-virtual bases. */
fa743e8c
NS
8614 for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
8615 if (!BINFO_VIRTUAL_P (b))
9d6a019c 8616 build_vtt_inits (b, t, inits, index);
c8094d83 8617
23656158 8618 /* Add secondary virtual pointers for all subobjects of BINFO with
9965d119
NS
8619 either virtual bases or reachable along a virtual path, except
8620 subobjects that are non-virtual primary bases. */
a3a0fc7f
NS
8621 data.top_level_p = top_level_p;
8622 data.index = *index;
9d6a019c 8623 data.inits = *inits;
a3a0fc7f 8624 data.type_being_constructed = BINFO_TYPE (binfo);
c8094d83 8625
5d5a519f 8626 dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
9965d119 8627
a3a0fc7f 8628 *index = data.index;
23656158 8629
9d6a019c
NF
8630 /* data.inits might have grown as we added secondary virtual pointers.
8631 Make sure our caller knows about the new vector. */
8632 *inits = data.inits;
23656158 8633
9965d119 8634 if (top_level_p)
a3a0fc7f
NS
8635 /* Add the secondary VTTs for virtual bases in inheritance graph
8636 order. */
9ccf6541
MM
8637 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
8638 {
809e3e7f 8639 if (!BINFO_VIRTUAL_P (b))
9ccf6541 8640 continue;
c8094d83 8641
9d6a019c 8642 build_vtt_inits (b, t, inits, index);
9ccf6541 8643 }
a3a0fc7f
NS
8644 else
8645 /* Remove the ctor vtables we created. */
5d5a519f 8646 dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
23656158
MM
8647}
8648
8df83eae 8649/* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
a3a0fc7f 8650 in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure. */
23656158
MM
8651
8652static tree
a3a0fc7f 8653dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
23656158 8654{
a3a0fc7f 8655 secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
23656158 8656
23656158
MM
8657 /* We don't care about bases that don't have vtables. */
8658 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
5d5a519f 8659 return dfs_skip_bases;
23656158 8660
a3a0fc7f
NS
8661 /* We're only interested in proper subobjects of the type being
8662 constructed. */
539ed333 8663 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
23656158
MM
8664 return NULL_TREE;
8665
a3a0fc7f
NS
8666 /* We're only interested in bases with virtual bases or reachable
8667 via a virtual path from the type being constructed. */
5d5a519f
NS
8668 if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
8669 || binfo_via_virtual (binfo, data->type_being_constructed)))
8670 return dfs_skip_bases;
c8094d83 8671
5d5a519f
NS
8672 /* We're not interested in non-virtual primary bases. */
8673 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
db3d8cde 8674 return NULL_TREE;
c8094d83 8675
3ec6bad3 8676 /* Record the index where this secondary vptr can be found. */
a3a0fc7f 8677 if (data->top_level_p)
9965d119 8678 {
50bc768d 8679 gcc_assert (!BINFO_VPTR_INDEX (binfo));
a3a0fc7f 8680 BINFO_VPTR_INDEX (binfo) = data->index;
3ec6bad3 8681
a3a0fc7f
NS
8682 if (BINFO_VIRTUAL_P (binfo))
8683 {
0cbd7506
MS
8684 /* It's a primary virtual base, and this is not a
8685 construction vtable. Find the base this is primary of in
8686 the inheritance graph, and use that base's vtable
8687 now. */
a3a0fc7f
NS
8688 while (BINFO_PRIMARY_P (binfo))
8689 binfo = BINFO_INHERITANCE_CHAIN (binfo);
8690 }
9965d119 8691 }
c8094d83 8692
a3a0fc7f 8693 /* Add the initializer for the secondary vptr itself. */
9d6a019c 8694 CONSTRUCTOR_APPEND_ELT (data->inits, NULL_TREE, binfo_ctor_vtable (binfo));
23656158 8695
a3a0fc7f
NS
8696 /* Advance the vtt index. */
8697 data->index = size_binop (PLUS_EXPR, data->index,
8698 TYPE_SIZE_UNIT (ptr_type_node));
9965d119 8699
a3a0fc7f 8700 return NULL_TREE;
9965d119
NS
8701}
8702
a3a0fc7f
NS
8703/* Called from build_vtt_inits via dfs_walk. After building
8704 constructor vtables and generating the sub-vtt from them, we need
8705 to restore the BINFO_VTABLES that were scribbled on. DATA is the
8706 binfo of the base whose sub vtt was generated. */
23656158
MM
8707
8708static tree
94edc4ab 8709dfs_fixup_binfo_vtbls (tree binfo, void* data)
23656158 8710{
a3a0fc7f 8711 tree vtable = BINFO_VTABLE (binfo);
23656158 8712
5d5a519f
NS
8713 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
8714 /* If this class has no vtable, none of its bases do. */
8715 return dfs_skip_bases;
c8094d83 8716
5d5a519f
NS
8717 if (!vtable)
8718 /* This might be a primary base, so have no vtable in this
8719 hierarchy. */
8720 return NULL_TREE;
c8094d83 8721
23656158
MM
8722 /* If we scribbled the construction vtable vptr into BINFO, clear it
8723 out now. */
5d5a519f 8724 if (TREE_CODE (vtable) == TREE_LIST
a3a0fc7f
NS
8725 && (TREE_PURPOSE (vtable) == (tree) data))
8726 BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
23656158
MM
8727
8728 return NULL_TREE;
8729}
8730
8731/* Build the construction vtable group for BINFO which is in the
8732 hierarchy dominated by T. */
8733
8734static void
94edc4ab 8735build_ctor_vtbl_group (tree binfo, tree t)
23656158 8736{
23656158
MM
8737 tree type;
8738 tree vtbl;
23656158 8739 tree id;
9ccf6541 8740 tree vbase;
9771b263 8741 vec<constructor_elt, va_gc> *v;
23656158 8742
7bdcf888 8743 /* See if we've already created this construction vtable group. */
1f84ec23 8744 id = mangle_ctor_vtbl_for_type (t, binfo);
23656158
MM
8745 if (IDENTIFIER_GLOBAL_VALUE (id))
8746 return;
8747
539ed333 8748 gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
23656158
MM
8749 /* Build a version of VTBL (with the wrong type) for use in
8750 constructing the addresses of secondary vtables in the
8751 construction vtable group. */
459c43ad 8752 vtbl = build_vtable (t, id, ptr_type_node);
505970fc 8753 DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
2ee8a2d5
JM
8754 /* Don't export construction vtables from shared libraries. Even on
8755 targets that don't support hidden visibility, this tells
8756 can_refer_decl_in_current_unit_p not to assume that it's safe to
8757 access from a different compilation unit (bz 54314). */
8758 DECL_VISIBILITY (vtbl) = VISIBILITY_HIDDEN;
8759 DECL_VISIBILITY_SPECIFIED (vtbl) = true;
9d6a019c
NF
8760
8761 v = NULL;
23656158 8762 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
9d6a019c 8763 binfo, vtbl, t, &v);
9965d119
NS
8764
8765 /* Add the vtables for each of our virtual bases using the vbase in T
8766 binfo. */
c8094d83
MS
8767 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
8768 vbase;
9ccf6541
MM
8769 vbase = TREE_CHAIN (vbase))
8770 {
8771 tree b;
8772
809e3e7f 8773 if (!BINFO_VIRTUAL_P (vbase))
9ccf6541 8774 continue;
dbbf88d1 8775 b = copied_binfo (vbase, binfo);
c8094d83 8776
9d6a019c 8777 accumulate_vtbl_inits (b, vbase, binfo, vtbl, t, &v);
9ccf6541 8778 }
23656158
MM
8779
8780 /* Figure out the type of the construction vtable. */
9771b263 8781 type = build_array_of_n_type (vtable_entry_type, v->length ());
8208d7dc 8782 layout_type (type);
23656158 8783 TREE_TYPE (vtbl) = type;
8208d7dc
DJ
8784 DECL_SIZE (vtbl) = DECL_SIZE_UNIT (vtbl) = NULL_TREE;
8785 layout_decl (vtbl, 0);
23656158
MM
8786
8787 /* Initialize the construction vtable. */
548502d3 8788 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
9d6a019c 8789 initialize_artificial_var (vtbl, v);
b7442fb5 8790 dump_vtable (t, binfo, vtbl);
23656158
MM
8791}
8792
9965d119
NS
8793/* Add the vtbl initializers for BINFO (and its bases other than
8794 non-virtual primaries) to the list of INITS. BINFO is in the
8795 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
8796 the constructor the vtbl inits should be accumulated for. (If this
8797 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
8798 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
8799 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
8800 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
8801 but are not necessarily the same in terms of layout. */
ca36f057
MM
8802
8803static void
94edc4ab 8804accumulate_vtbl_inits (tree binfo,
0cbd7506
MS
8805 tree orig_binfo,
8806 tree rtti_binfo,
9d6a019c 8807 tree vtbl,
0cbd7506 8808 tree t,
9771b263 8809 vec<constructor_elt, va_gc> **inits)
ca36f057 8810{
23656158 8811 int i;
fa743e8c 8812 tree base_binfo;
539ed333 8813 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
23656158 8814
539ed333 8815 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
23656158 8816
00a17e31 8817 /* If it doesn't have a vptr, we don't do anything. */
623fe76a
NS
8818 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
8819 return;
c8094d83 8820
23656158
MM
8821 /* If we're building a construction vtable, we're not interested in
8822 subobjects that don't require construction vtables. */
c8094d83 8823 if (ctor_vtbl_p
5775a06a 8824 && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
9965d119 8825 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
23656158
MM
8826 return;
8827
8828 /* Build the initializers for the BINFO-in-T vtable. */
9d6a019c 8829 dfs_accumulate_vtbl_inits (binfo, orig_binfo, rtti_binfo, vtbl, t, inits);
c8094d83 8830
c35cce41
MM
8831 /* Walk the BINFO and its bases. We walk in preorder so that as we
8832 initialize each vtable we can figure out at what offset the
23656158
MM
8833 secondary vtable lies from the primary vtable. We can't use
8834 dfs_walk here because we need to iterate through bases of BINFO
8835 and RTTI_BINFO simultaneously. */
fa743e8c 8836 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
23656158 8837 {
23656158 8838 /* Skip virtual bases. */
809e3e7f 8839 if (BINFO_VIRTUAL_P (base_binfo))
23656158
MM
8840 continue;
8841 accumulate_vtbl_inits (base_binfo,
604a3205 8842 BINFO_BASE_BINFO (orig_binfo, i),
9d6a019c 8843 rtti_binfo, vtbl, t,
23656158
MM
8844 inits);
8845 }
ca36f057
MM
8846}
8847
9d6a019c
NF
8848/* Called from accumulate_vtbl_inits. Adds the initializers for the
8849 BINFO vtable to L. */
ca36f057 8850
9d6a019c 8851static void
94edc4ab 8852dfs_accumulate_vtbl_inits (tree binfo,
0cbd7506
MS
8853 tree orig_binfo,
8854 tree rtti_binfo,
9d6a019c 8855 tree orig_vtbl,
0cbd7506 8856 tree t,
9771b263 8857 vec<constructor_elt, va_gc> **l)
ca36f057 8858{
9965d119 8859 tree vtbl = NULL_TREE;
539ed333 8860 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
9d6a019c 8861 int n_inits;
9965d119 8862
13de7ec4 8863 if (ctor_vtbl_p
809e3e7f 8864 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
9965d119 8865 {
13de7ec4
JM
8866 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
8867 primary virtual base. If it is not the same primary in
8868 the hierarchy of T, we'll need to generate a ctor vtable
8869 for it, to place at its location in T. If it is the same
8870 primary, we still need a VTT entry for the vtable, but it
8871 should point to the ctor vtable for the base it is a
8872 primary for within the sub-hierarchy of RTTI_BINFO.
c8094d83 8873
13de7ec4 8874 There are three possible cases:
c8094d83 8875
13de7ec4
JM
8876 1) We are in the same place.
8877 2) We are a primary base within a lost primary virtual base of
8878 RTTI_BINFO.
049d2def 8879 3) We are primary to something not a base of RTTI_BINFO. */
c8094d83 8880
fc6633e0 8881 tree b;
13de7ec4 8882 tree last = NULL_TREE;
85a9a0a2 8883
13de7ec4
JM
8884 /* First, look through the bases we are primary to for RTTI_BINFO
8885 or a virtual base. */
fc6633e0
NS
8886 b = binfo;
8887 while (BINFO_PRIMARY_P (b))
7bdcf888 8888 {
fc6633e0 8889 b = BINFO_INHERITANCE_CHAIN (b);
13de7ec4 8890 last = b;
809e3e7f 8891 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
fc6633e0 8892 goto found;
7bdcf888 8893 }
13de7ec4
JM
8894 /* If we run out of primary links, keep looking down our
8895 inheritance chain; we might be an indirect primary. */
fc6633e0
NS
8896 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
8897 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
8898 break;
8899 found:
c8094d83 8900
13de7ec4
JM
8901 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
8902 base B and it is a base of RTTI_BINFO, this is case 2. In
8903 either case, we share our vtable with LAST, i.e. the
8904 derived-most base within B of which we are a primary. */
8905 if (b == rtti_binfo
58c42dc2 8906 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
049d2def
JM
8907 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
8908 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
8909 binfo_ctor_vtable after everything's been set up. */
8910 vtbl = last;
13de7ec4 8911
049d2def 8912 /* Otherwise, this is case 3 and we get our own. */
9965d119 8913 }
dbbf88d1 8914 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
9d6a019c
NF
8915 return;
8916
9771b263 8917 n_inits = vec_safe_length (*l);
7bdcf888 8918
9965d119 8919 if (!vtbl)
ca36f057 8920 {
c35cce41
MM
8921 tree index;
8922 int non_fn_entries;
8923
9d6a019c
NF
8924 /* Add the initializer for this vtable. */
8925 build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
8926 &non_fn_entries, l);
c35cce41 8927
23656158 8928 /* Figure out the position to which the VPTR should point. */
9d6a019c 8929 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, orig_vtbl);
23656158
MM
8930 index = size_binop (MULT_EXPR,
8931 TYPE_SIZE_UNIT (vtable_entry_type),
5d49b6a7
RG
8932 size_int (non_fn_entries + n_inits));
8933 vtbl = fold_build_pointer_plus (vtbl, index);
9965d119 8934 }
23656158 8935
7bdcf888 8936 if (ctor_vtbl_p)
9965d119
NS
8937 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
8938 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
8939 straighten this out. */
8940 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
809e3e7f 8941 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
9d6a019c 8942 /* Throw away any unneeded intializers. */
9771b263 8943 (*l)->truncate (n_inits);
7bdcf888
NS
8944 else
8945 /* For an ordinary vtable, set BINFO_VTABLE. */
8946 BINFO_VTABLE (binfo) = vtbl;
ca36f057
MM
8947}
8948
1b746b0f
AP
8949static GTY(()) tree abort_fndecl_addr;
8950
90ecce3e 8951/* Construct the initializer for BINFO's virtual function table. BINFO
aabb4cd6 8952 is part of the hierarchy dominated by T. If we're building a
23656158 8953 construction vtable, the ORIG_BINFO is the binfo we should use to
9965d119
NS
8954 find the actual function pointers to put in the vtable - but they
8955 can be overridden on the path to most-derived in the graph that
8956 ORIG_BINFO belongs. Otherwise,
911a71a7 8957 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
23656158
MM
8958 BINFO that should be indicated by the RTTI information in the
8959 vtable; it will be a base class of T, rather than T itself, if we
8960 are building a construction vtable.
aabb4cd6
MM
8961
8962 The value returned is a TREE_LIST suitable for wrapping in a
8963 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
8964 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
c8094d83 8965 number of non-function entries in the vtable.
911a71a7
MM
8966
8967 It might seem that this function should never be called with a
9965d119 8968 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
911a71a7 8969 base is always subsumed by a derived class vtable. However, when
9965d119 8970 we are building construction vtables, we do build vtables for
911a71a7
MM
8971 primary bases; we need these while the primary base is being
8972 constructed. */
ca36f057 8973
9d6a019c 8974static void
94edc4ab 8975build_vtbl_initializer (tree binfo,
0cbd7506
MS
8976 tree orig_binfo,
8977 tree t,
8978 tree rtti_binfo,
9d6a019c 8979 int* non_fn_entries_p,
9771b263 8980 vec<constructor_elt, va_gc> **inits)
ca36f057 8981{
02dea3ff 8982 tree v;
911a71a7 8983 vtbl_init_data vid;
9d6a019c 8984 unsigned ix, jx;
58c42dc2 8985 tree vbinfo;
9771b263 8986 vec<tree, va_gc> *vbases;
9d6a019c 8987 constructor_elt *e;
c8094d83 8988
911a71a7 8989 /* Initialize VID. */
961192e1 8990 memset (&vid, 0, sizeof (vid));
911a71a7
MM
8991 vid.binfo = binfo;
8992 vid.derived = t;
73ea87d7 8993 vid.rtti_binfo = rtti_binfo;
539ed333
NS
8994 vid.primary_vtbl_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
8995 vid.ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
548502d3 8996 vid.generate_vcall_entries = true;
c35cce41 8997 /* The first vbase or vcall offset is at index -3 in the vtable. */
ce552f75 8998 vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
c35cce41 8999
9bab6c90 9000 /* Add entries to the vtable for RTTI. */
73ea87d7 9001 build_rtti_vtbl_entries (binfo, &vid);
9bab6c90 9002
b485e15b
MM
9003 /* Create an array for keeping track of the functions we've
9004 processed. When we see multiple functions with the same
9005 signature, we share the vcall offsets. */
9771b263 9006 vec_alloc (vid.fns, 32);
c35cce41 9007 /* Add the vcall and vbase offset entries. */
911a71a7 9008 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
c8094d83 9009
79cda2d1 9010 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
c35cce41 9011 build_vbase_offset_vtbl_entries. */
9ba5ff0f 9012 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
9771b263 9013 vec_safe_iterate (vbases, ix, &vbinfo); ix++)
58c42dc2 9014 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
ca36f057 9015
a6f5e048
RH
9016 /* If the target requires padding between data entries, add that now. */
9017 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
9018 {
9771b263 9019 int n_entries = vec_safe_length (vid.inits);
9d6a019c 9020
9771b263 9021 vec_safe_grow (vid.inits, TARGET_VTABLE_DATA_ENTRY_DISTANCE * n_entries);
a6f5e048 9022
9d6a019c
NF
9023 /* Move data entries into their new positions and add padding
9024 after the new positions. Iterate backwards so we don't
9025 overwrite entries that we would need to process later. */
9026 for (ix = n_entries - 1;
9771b263 9027 vid.inits->iterate (ix, &e);
9d6a019c 9028 ix--)
a6f5e048 9029 {
9d6a019c 9030 int j;
25d8a217
NF
9031 int new_position = (TARGET_VTABLE_DATA_ENTRY_DISTANCE * ix
9032 + (TARGET_VTABLE_DATA_ENTRY_DISTANCE - 1));
9d6a019c 9033
9771b263 9034 (*vid.inits)[new_position] = *e;
a6f5e048 9035
9d6a019c
NF
9036 for (j = 1; j < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++j)
9037 {
9771b263 9038 constructor_elt *f = &(*vid.inits)[new_position - j];
9d6a019c
NF
9039 f->index = NULL_TREE;
9040 f->value = build1 (NOP_EXPR, vtable_entry_type,
9041 null_pointer_node);
9042 }
a6f5e048
RH
9043 }
9044 }
9045
c35cce41 9046 if (non_fn_entries_p)
9771b263 9047 *non_fn_entries_p = vec_safe_length (vid.inits);
9d6a019c
NF
9048
9049 /* The initializers for virtual functions were built up in reverse
9050 order. Straighten them out and add them to the running list in one
9051 step. */
9771b263
DN
9052 jx = vec_safe_length (*inits);
9053 vec_safe_grow (*inits, jx + vid.inits->length ());
9d6a019c 9054
9771b263
DN
9055 for (ix = vid.inits->length () - 1;
9056 vid.inits->iterate (ix, &e);
9d6a019c 9057 ix--, jx++)
9771b263 9058 (**inits)[jx] = *e;
ca36f057
MM
9059
9060 /* Go through all the ordinary virtual functions, building up
9061 initializers. */
23656158 9062 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
ca36f057
MM
9063 {
9064 tree delta;
9065 tree vcall_index;
4977bab6 9066 tree fn, fn_original;
f11ee281 9067 tree init = NULL_TREE;
c8094d83 9068
ca36f057 9069 fn = BV_FN (v);
07fa4878
NS
9070 fn_original = fn;
9071 if (DECL_THUNK_P (fn))
4977bab6 9072 {
07fa4878
NS
9073 if (!DECL_NAME (fn))
9074 finish_thunk (fn);
e00853fd 9075 if (THUNK_ALIAS (fn))
bb885938
NS
9076 {
9077 fn = THUNK_ALIAS (fn);
9078 BV_FN (v) = fn;
9079 }
07fa4878 9080 fn_original = THUNK_TARGET (fn);
4977bab6 9081 }
c8094d83 9082
d0cd8b44
JM
9083 /* If the only definition of this function signature along our
9084 primary base chain is from a lost primary, this vtable slot will
9085 never be used, so just zero it out. This is important to avoid
9086 requiring extra thunks which cannot be generated with the function.
9087
f11ee281
JM
9088 We first check this in update_vtable_entry_for_fn, so we handle
9089 restored primary bases properly; we also need to do it here so we
39a13be5 9090 zero out unused slots in ctor vtables, rather than filling them
f11ee281
JM
9091 with erroneous values (though harmless, apart from relocation
9092 costs). */
02dea3ff
JM
9093 if (BV_LOST_PRIMARY (v))
9094 init = size_zero_node;
d0cd8b44 9095
f11ee281
JM
9096 if (! init)
9097 {
9098 /* Pull the offset for `this', and the function to call, out of
9099 the list. */
9100 delta = BV_DELTA (v);
548502d3 9101 vcall_index = BV_VCALL_INDEX (v);
f11ee281 9102
50bc768d
NS
9103 gcc_assert (TREE_CODE (delta) == INTEGER_CST);
9104 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
f11ee281
JM
9105
9106 /* You can't call an abstract virtual function; it's abstract.
9107 So, we replace these functions with __pure_virtual. */
4977bab6 9108 if (DECL_PURE_VIRTUAL_P (fn_original))
4977bab6 9109 {
1b746b0f 9110 fn = abort_fndecl;
21b6aca3
JJ
9111 if (!TARGET_VTABLE_USES_DESCRIPTORS)
9112 {
9113 if (abort_fndecl_addr == NULL)
9114 abort_fndecl_addr
9115 = fold_convert (vfunc_ptr_type_node,
9116 build_fold_addr_expr (fn));
9117 init = abort_fndecl_addr;
9118 }
1b746b0f 9119 }
4ce7d589
JM
9120 /* Likewise for deleted virtuals. */
9121 else if (DECL_DELETED_FN (fn_original))
9122 {
9123 fn = get_identifier ("__cxa_deleted_virtual");
9124 if (!get_global_value_if_present (fn, &fn))
9125 fn = push_library_fn (fn, (build_function_type_list
9126 (void_type_node, NULL_TREE)),
8595a07d 9127 NULL_TREE, ECF_NORETURN);
4ce7d589
JM
9128 if (!TARGET_VTABLE_USES_DESCRIPTORS)
9129 init = fold_convert (vfunc_ptr_type_node,
9130 build_fold_addr_expr (fn));
9131 }
1b746b0f
AP
9132 else
9133 {
9134 if (!integer_zerop (delta) || vcall_index)
9135 {
9136 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
9137 if (!DECL_NAME (fn))
9138 finish_thunk (fn);
9139 }
9140 /* Take the address of the function, considering it to be of an
9141 appropriate generic type. */
21b6aca3
JJ
9142 if (!TARGET_VTABLE_USES_DESCRIPTORS)
9143 init = fold_convert (vfunc_ptr_type_node,
9144 build_fold_addr_expr (fn));
d74db8ff
JM
9145 /* Don't refer to a virtual destructor from a constructor
9146 vtable or a vtable for an abstract class, since destroying
9147 an object under construction is undefined behavior and we
9148 don't want it to be considered a candidate for speculative
9149 devirtualization. But do create the thunk for ABI
9150 compliance. */
9151 if (DECL_DESTRUCTOR_P (fn_original)
9152 && (CLASSTYPE_PURE_VIRTUALS (DECL_CONTEXT (fn_original))
9153 || orig_binfo != binfo))
9154 init = size_zero_node;
4977bab6 9155 }
f11ee281 9156 }
d0cd8b44 9157
ca36f057 9158 /* And add it to the chain of initializers. */
67231816
RH
9159 if (TARGET_VTABLE_USES_DESCRIPTORS)
9160 {
9161 int i;
9162 if (init == size_zero_node)
9163 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
9d6a019c 9164 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
67231816
RH
9165 else
9166 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
9167 {
f293ce4b 9168 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
21b6aca3 9169 fn, build_int_cst (NULL_TREE, i));
67231816
RH
9170 TREE_CONSTANT (fdesc) = 1;
9171
9d6a019c 9172 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, fdesc);
67231816
RH
9173 }
9174 }
9175 else
9d6a019c 9176 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
ca36f057 9177 }
ca36f057
MM
9178}
9179
d0cd8b44 9180/* Adds to vid->inits the initializers for the vbase and vcall
c35cce41 9181 offsets in BINFO, which is in the hierarchy dominated by T. */
ca36f057 9182
c35cce41 9183static void
94edc4ab 9184build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
ca36f057 9185{
c35cce41 9186 tree b;
8d08fdba 9187
c35cce41 9188 /* If this is a derived class, we must first create entries
9bab6c90 9189 corresponding to the primary base class. */
911a71a7 9190 b = get_primary_binfo (binfo);
c35cce41 9191 if (b)
911a71a7 9192 build_vcall_and_vbase_vtbl_entries (b, vid);
c35cce41
MM
9193
9194 /* Add the vbase entries for this base. */
911a71a7 9195 build_vbase_offset_vtbl_entries (binfo, vid);
c35cce41 9196 /* Add the vcall entries for this base. */
911a71a7 9197 build_vcall_offset_vtbl_entries (binfo, vid);
ca36f057 9198}
8d08fdba 9199
ca36f057
MM
9200/* Returns the initializers for the vbase offset entries in the vtable
9201 for BINFO (which is part of the class hierarchy dominated by T), in
c35cce41
MM
9202 reverse order. VBASE_OFFSET_INDEX gives the vtable index
9203 where the next vbase offset will go. */
8d08fdba 9204
c35cce41 9205static void
94edc4ab 9206build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
ca36f057 9207{
c35cce41
MM
9208 tree vbase;
9209 tree t;
90b1ca2f 9210 tree non_primary_binfo;
8d08fdba 9211
ca36f057
MM
9212 /* If there are no virtual baseclasses, then there is nothing to
9213 do. */
5775a06a 9214 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
c35cce41 9215 return;
ca36f057 9216
911a71a7 9217 t = vid->derived;
c8094d83 9218
90b1ca2f
NS
9219 /* We might be a primary base class. Go up the inheritance hierarchy
9220 until we find the most derived class of which we are a primary base:
9221 it is the offset of that which we need to use. */
9222 non_primary_binfo = binfo;
9223 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
9224 {
9225 tree b;
9226
9227 /* If we have reached a virtual base, then it must be a primary
9228 base (possibly multi-level) of vid->binfo, or we wouldn't
9229 have called build_vcall_and_vbase_vtbl_entries for it. But it
9230 might be a lost primary, so just skip down to vid->binfo. */
809e3e7f 9231 if (BINFO_VIRTUAL_P (non_primary_binfo))
90b1ca2f
NS
9232 {
9233 non_primary_binfo = vid->binfo;
9234 break;
9235 }
9236
9237 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
9238 if (get_primary_binfo (b) != non_primary_binfo)
9239 break;
9240 non_primary_binfo = b;
9241 }
ca36f057 9242
c35cce41
MM
9243 /* Go through the virtual bases, adding the offsets. */
9244 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
9245 vbase;
9246 vbase = TREE_CHAIN (vbase))
9247 {
9248 tree b;
9249 tree delta;
c8094d83 9250
809e3e7f 9251 if (!BINFO_VIRTUAL_P (vbase))
c35cce41 9252 continue;
ca36f057 9253
c35cce41
MM
9254 /* Find the instance of this virtual base in the complete
9255 object. */
dbbf88d1 9256 b = copied_binfo (vbase, binfo);
c35cce41
MM
9257
9258 /* If we've already got an offset for this virtual base, we
9259 don't need another one. */
9260 if (BINFO_VTABLE_PATH_MARKED (b))
9261 continue;
dbbf88d1 9262 BINFO_VTABLE_PATH_MARKED (b) = 1;
c35cce41
MM
9263
9264 /* Figure out where we can find this vbase offset. */
c8094d83 9265 delta = size_binop (MULT_EXPR,
911a71a7 9266 vid->index,
c35cce41
MM
9267 convert (ssizetype,
9268 TYPE_SIZE_UNIT (vtable_entry_type)));
911a71a7 9269 if (vid->primary_vtbl_p)
c35cce41
MM
9270 BINFO_VPTR_FIELD (b) = delta;
9271
9272 if (binfo != TYPE_BINFO (t))
50bc768d
NS
9273 /* The vbase offset had better be the same. */
9274 gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
c35cce41
MM
9275
9276 /* The next vbase will come at a more negative offset. */
a6f5e048
RH
9277 vid->index = size_binop (MINUS_EXPR, vid->index,
9278 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
c35cce41
MM
9279
9280 /* The initializer is the delta from BINFO to this virtual base.
4e7512c9
MM
9281 The vbase offsets go in reverse inheritance-graph order, and
9282 we are walking in inheritance graph order so these end up in
9283 the right order. */
db3927fb
AH
9284 delta = size_diffop_loc (input_location,
9285 BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
c8094d83 9286
9d6a019c
NF
9287 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE,
9288 fold_build1_loc (input_location, NOP_EXPR,
9289 vtable_entry_type, delta));
c35cce41 9290 }
8d08fdba 9291}
ca36f057 9292
b485e15b 9293/* Adds the initializers for the vcall offset entries in the vtable
d0cd8b44
JM
9294 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
9295 to VID->INITS. */
b485e15b
MM
9296
9297static void
94edc4ab 9298build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
b485e15b 9299{
548502d3
MM
9300 /* We only need these entries if this base is a virtual base. We
9301 compute the indices -- but do not add to the vtable -- when
9302 building the main vtable for a class. */
b9302915
MM
9303 if (binfo == TYPE_BINFO (vid->derived)
9304 || (BINFO_VIRTUAL_P (binfo)
9305 /* If BINFO is RTTI_BINFO, then (since BINFO does not
9306 correspond to VID->DERIVED), we are building a primary
9307 construction virtual table. Since this is a primary
9308 virtual table, we do not need the vcall offsets for
9309 BINFO. */
9310 && binfo != vid->rtti_binfo))
548502d3
MM
9311 {
9312 /* We need a vcall offset for each of the virtual functions in this
9313 vtable. For example:
b485e15b 9314
548502d3
MM
9315 class A { virtual void f (); };
9316 class B1 : virtual public A { virtual void f (); };
9317 class B2 : virtual public A { virtual void f (); };
9318 class C: public B1, public B2 { virtual void f (); };
d0cd8b44 9319
548502d3
MM
9320 A C object has a primary base of B1, which has a primary base of A. A
9321 C also has a secondary base of B2, which no longer has a primary base
9322 of A. So the B2-in-C construction vtable needs a secondary vtable for
9323 A, which will adjust the A* to a B2* to call f. We have no way of
9324 knowing what (or even whether) this offset will be when we define B2,
9325 so we store this "vcall offset" in the A sub-vtable and look it up in
9326 a "virtual thunk" for B2::f.
b485e15b 9327
548502d3
MM
9328 We need entries for all the functions in our primary vtable and
9329 in our non-virtual bases' secondary vtables. */
9330 vid->vbase = binfo;
9331 /* If we are just computing the vcall indices -- but do not need
9332 the actual entries -- not that. */
809e3e7f 9333 if (!BINFO_VIRTUAL_P (binfo))
548502d3
MM
9334 vid->generate_vcall_entries = false;
9335 /* Now, walk through the non-virtual bases, adding vcall offsets. */
9336 add_vcall_offset_vtbl_entries_r (binfo, vid);
9337 }
b485e15b
MM
9338}
9339
9340/* Build vcall offsets, starting with those for BINFO. */
9341
9342static void
94edc4ab 9343add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
b485e15b
MM
9344{
9345 int i;
9346 tree primary_binfo;
fa743e8c 9347 tree base_binfo;
b485e15b
MM
9348
9349 /* Don't walk into virtual bases -- except, of course, for the
d0cd8b44
JM
9350 virtual base for which we are building vcall offsets. Any
9351 primary virtual base will have already had its offsets generated
9352 through the recursion in build_vcall_and_vbase_vtbl_entries. */
809e3e7f 9353 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
b485e15b 9354 return;
c8094d83 9355
b485e15b
MM
9356 /* If BINFO has a primary base, process it first. */
9357 primary_binfo = get_primary_binfo (binfo);
9358 if (primary_binfo)
9359 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
9360
9361 /* Add BINFO itself to the list. */
9362 add_vcall_offset_vtbl_entries_1 (binfo, vid);
9363
9364 /* Scan the non-primary bases of BINFO. */
fa743e8c
NS
9365 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
9366 if (base_binfo != primary_binfo)
9367 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
b485e15b
MM
9368}
9369
9965d119 9370/* Called from build_vcall_offset_vtbl_entries_r. */
e92cc029 9371
b485e15b 9372static void
94edc4ab 9373add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
8d08fdba 9374{
e6a66567 9375 /* Make entries for the rest of the virtuals. */
90d84934
JM
9376 tree orig_fn;
9377
9378 /* The ABI requires that the methods be processed in declaration
9379 order. */
9380 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
9381 orig_fn;
9382 orig_fn = DECL_CHAIN (orig_fn))
aaf8a23e 9383 if (TREE_CODE (orig_fn) == FUNCTION_DECL && DECL_VINDEX (orig_fn))
90d84934 9384 add_vcall_offset (orig_fn, binfo, vid);
e6a66567 9385}
b485e15b 9386
95675950 9387/* Add a vcall offset entry for ORIG_FN to the vtable. */
b485e15b 9388
e6a66567 9389static void
95675950 9390add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
e6a66567
MM
9391{
9392 size_t i;
9393 tree vcall_offset;
1e625046 9394 tree derived_entry;
9bab6c90 9395
e6a66567
MM
9396 /* If there is already an entry for a function with the same
9397 signature as FN, then we do not need a second vcall offset.
9398 Check the list of functions already present in the derived
9399 class vtable. */
9771b263 9400 FOR_EACH_VEC_SAFE_ELT (vid->fns, i, derived_entry)
e6a66567 9401 {
e6a66567
MM
9402 if (same_signature_p (derived_entry, orig_fn)
9403 /* We only use one vcall offset for virtual destructors,
9404 even though there are two virtual table entries. */
9405 || (DECL_DESTRUCTOR_P (derived_entry)
9406 && DECL_DESTRUCTOR_P (orig_fn)))
9407 return;
9408 }
4e7512c9 9409
e6a66567
MM
9410 /* If we are building these vcall offsets as part of building
9411 the vtable for the most derived class, remember the vcall
9412 offset. */
9413 if (vid->binfo == TYPE_BINFO (vid->derived))
0871761b 9414 {
f32682ca 9415 tree_pair_s elt = {orig_fn, vid->index};
9771b263 9416 vec_safe_push (CLASSTYPE_VCALL_INDICES (vid->derived), elt);
0871761b 9417 }
c8094d83 9418
e6a66567
MM
9419 /* The next vcall offset will be found at a more negative
9420 offset. */
9421 vid->index = size_binop (MINUS_EXPR, vid->index,
9422 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
9423
9424 /* Keep track of this function. */
9771b263 9425 vec_safe_push (vid->fns, orig_fn);
e6a66567
MM
9426
9427 if (vid->generate_vcall_entries)
9428 {
9429 tree base;
e6a66567 9430 tree fn;
548502d3 9431
e6a66567 9432 /* Find the overriding function. */
95675950 9433 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
e6a66567 9434 if (fn == error_mark_node)
e8160c9a 9435 vcall_offset = build_zero_cst (vtable_entry_type);
e6a66567
MM
9436 else
9437 {
95675950
MM
9438 base = TREE_VALUE (fn);
9439
9440 /* The vbase we're working on is a primary base of
9441 vid->binfo. But it might be a lost primary, so its
9442 BINFO_OFFSET might be wrong, so we just use the
9443 BINFO_OFFSET from vid->binfo. */
db3927fb
AH
9444 vcall_offset = size_diffop_loc (input_location,
9445 BINFO_OFFSET (base),
95675950 9446 BINFO_OFFSET (vid->binfo));
db3927fb
AH
9447 vcall_offset = fold_build1_loc (input_location,
9448 NOP_EXPR, vtable_entry_type,
7866705a 9449 vcall_offset);
548502d3 9450 }
34cd5ae7 9451 /* Add the initializer to the vtable. */
9d6a019c 9452 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, vcall_offset);
c35cce41 9453 }
570221c2 9454}
b54ccf71 9455
34cd5ae7 9456/* Return vtbl initializers for the RTTI entries corresponding to the
aabb4cd6 9457 BINFO's vtable. The RTTI entries should indicate the object given
73ea87d7 9458 by VID->rtti_binfo. */
b54ccf71 9459
9bab6c90 9460static void
94edc4ab 9461build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
b54ccf71 9462{
ca36f057 9463 tree b;
aabb4cd6 9464 tree t;
ca36f057
MM
9465 tree offset;
9466 tree decl;
9467 tree init;
b54ccf71 9468
73ea87d7 9469 t = BINFO_TYPE (vid->rtti_binfo);
b54ccf71 9470
ca36f057
MM
9471 /* To find the complete object, we will first convert to our most
9472 primary base, and then add the offset in the vtbl to that value. */
9473 b = binfo;
9965d119 9474 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
0cbd7506 9475 && !BINFO_LOST_PRIMARY_P (b))
b54ccf71 9476 {
c35cce41
MM
9477 tree primary_base;
9478
911a71a7 9479 primary_base = get_primary_binfo (b);
fc6633e0
NS
9480 gcc_assert (BINFO_PRIMARY_P (primary_base)
9481 && BINFO_INHERITANCE_CHAIN (primary_base) == b);
c35cce41 9482 b = primary_base;
b54ccf71 9483 }
db3927fb
AH
9484 offset = size_diffop_loc (input_location,
9485 BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
8f032717 9486
8fa33dfa
MM
9487 /* The second entry is the address of the typeinfo object. */
9488 if (flag_rtti)
7993382e 9489 decl = build_address (get_tinfo_decl (t));
ca36f057 9490 else
8fa33dfa 9491 decl = integer_zero_node;
c8094d83 9492
8fa33dfa
MM
9493 /* Convert the declaration to a type that can be stored in the
9494 vtable. */
7993382e 9495 init = build_nop (vfunc_ptr_type_node, decl);
9d6a019c 9496 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
8f032717 9497
78dcd41a
VR
9498 /* Add the offset-to-top entry. It comes earlier in the vtable than
9499 the typeinfo entry. Convert the offset to look like a
c4372ef4 9500 function pointer, so that we can put it in the vtable. */
7993382e 9501 init = build_nop (vfunc_ptr_type_node, offset);
9d6a019c 9502 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
8f032717 9503}
0f59171d 9504
22854930
PC
9505/* TRUE iff TYPE is uniquely derived from PARENT. Ignores
9506 accessibility. */
9507
9508bool
9509uniquely_derived_from_p (tree parent, tree type)
9510{
9511 tree base = lookup_base (type, parent, ba_unique, NULL, tf_none);
9512 return base && base != error_mark_node;
9513}
9514
9515/* TRUE iff TYPE is publicly & uniquely derived from PARENT. */
9516
9517bool
9518publicly_uniquely_derived_p (tree parent, tree type)
9519{
9520 tree base = lookup_base (type, parent, ba_ignore_scope | ba_check,
9521 NULL, tf_none);
9522 return base && base != error_mark_node;
9523}
9524
3a6a88c8
JM
9525/* CTX1 and CTX2 are declaration contexts. Return the innermost common
9526 class between them, if any. */
9527
9528tree
9529common_enclosing_class (tree ctx1, tree ctx2)
9530{
9531 if (!TYPE_P (ctx1) || !TYPE_P (ctx2))
9532 return NULL_TREE;
9533 gcc_assert (ctx1 == TYPE_MAIN_VARIANT (ctx1)
9534 && ctx2 == TYPE_MAIN_VARIANT (ctx2));
9535 if (ctx1 == ctx2)
9536 return ctx1;
9537 for (tree t = ctx1; TYPE_P (t); t = TYPE_CONTEXT (t))
9538 TYPE_MARKED_P (t) = true;
9539 tree found = NULL_TREE;
9540 for (tree t = ctx2; TYPE_P (t); t = TYPE_CONTEXT (t))
9541 if (TYPE_MARKED_P (t))
9542 {
9543 found = t;
9544 break;
9545 }
9546 for (tree t = ctx1; TYPE_P (t); t = TYPE_CONTEXT (t))
9547 TYPE_MARKED_P (t) = false;
9548 return found;
9549}
9550
1b746b0f 9551#include "gt-cp-class.h"
This page took 7.585208 seconds and 5 git commands to generate.