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