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