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