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