]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/class.c
2007-01-17 Paul Thomas <pault@gcc.gnu.org>
[thirdparty/gcc.git] / gcc / cp / class.c
CommitLineData
471086d6 1/* Functions related to building classes and their related objects.
b278476e 2 Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1965e597 3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
4 Free Software Foundation, Inc.
471086d6 5 Contributed by Michael Tiemann (tiemann@cygnus.com)
6
6f0d25a6 7This file is part of GCC.
471086d6 8
6f0d25a6 9GCC is free software; you can redistribute it and/or modify
471086d6 10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 2, or (at your option)
12any later version.
13
6f0d25a6 14GCC is distributed in the hope that it will be useful,
471086d6 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
6f0d25a6 20along with GCC; see the file COPYING. If not, write to
beaeca68 21the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22Boston, MA 02110-1301, USA. */
471086d6 23
24
96624a9e 25/* High-level class interface. */
471086d6 26
27#include "config.h"
b3ef7553 28#include "system.h"
805e22b2 29#include "coretypes.h"
30#include "tm.h"
ec7d870d 31#include "tree.h"
471086d6 32#include "cp-tree.h"
33#include "flags.h"
bea7d742 34#include "rtl.h"
3f7d79e4 35#include "output.h"
2a4e40b0 36#include "toplev.h"
28c50778 37#include "target.h"
ee1ab431 38#include "convert.h"
880afb80 39#include "cgraph.h"
77fce4cd 40#include "tree-dump.h"
471086d6 41
0f2952a1 42/* The number of nested classes being processed. If we are not in the
43 scope of any class, this is zero. */
44
471086d6 45int current_class_depth;
46
0f2952a1 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;
1eaf178d 61
62 /* If were defining TYPE, the names used in this class. */
63 splay_tree names_used;
637441cf 64
65 /* Nonzero if this class is no longer open, because of a call to
66 push_to_top_level. */
67 size_t hidden;
0f2952a1 68}* class_stack_node_t;
69
d0ceae4d 70typedef struct vtbl_init_data_s
59751e6c 71{
d0ceae4d 72 /* The base for which we're building initializers. */
73 tree binfo;
f8f03982 74 /* The type of the most-derived type. */
59751e6c 75 tree derived;
f8f03982 76 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
77 unless ctor_vtbl_p is true. */
78 tree rtti_binfo;
cc1fb265 79 /* The negative-index vtable initializers built up so far. These
80 are in order from least negative index to most negative index. */
81 tree inits;
70050b43 82 /* The last (i.e., most negative) entry in INITS. */
cc1fb265 83 tree* last_init;
59751e6c 84 /* The binfo for the virtual base for which we're building
d0ceae4d 85 vcall offset initializers. */
59751e6c 86 tree vbase;
cc1fb265 87 /* The functions in vbase for which we have already provided vcall
88 offsets. */
cc331293 89 VEC(tree,gc) *fns;
59751e6c 90 /* The vtable index of the next vcall or vbase offset. */
91 tree index;
92 /* Nonzero if we are building the initializer for the primary
93 vtable. */
d0ceae4d 94 int primary_vtbl_p;
95 /* Nonzero if we are building the initializer for a construction
96 vtable. */
97 int ctor_vtbl_p;
6fc7a923 98 /* True when adding vcall offset entries to the vtable. False when
99 merely computing the indices. */
100 bool generate_vcall_entries;
d0ceae4d 101} vtbl_init_data;
59751e6c 102
08549945 103/* The type of a function passed to walk_subobject_offsets. */
45baea8b 104typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
08549945 105
e18c26dd 106/* The stack itself. This is a dynamically resized array. The
0f2952a1 107 number of elements allocated is CURRENT_CLASS_STACK_SIZE. */
108static int current_class_stack_size;
109static class_stack_node_t current_class_stack;
110
776a1f2d 111/* The size of the largest empty class seen in this translation unit. */
112static GTY (()) tree sizeof_biggest_empty_class;
113
98eaf693 114/* An array of all local classes present in this translation unit, in
115 declaration order. */
836c0125 116VEC(tree,gc) *local_classes;
98eaf693 117
45baea8b 118static tree get_vfield_name (tree);
119static void finish_struct_anon (tree);
120static tree get_vtable_name (tree);
121static tree get_basefndecls (tree, tree);
122static int build_primary_vtable (tree, tree);
95f3173a 123static int build_secondary_vtable (tree);
45baea8b 124static void finish_vtbls (tree);
125static void modify_vtable_entry (tree, tree, tree, tree, tree *);
45baea8b 126static void finish_struct_bits (tree);
127static int alter_access (tree, tree, tree);
128static void handle_using_decl (tree, tree);
45baea8b 129static tree dfs_modify_vtables (tree, void *);
130static tree modify_all_vtables (tree, tree);
eea75c62 131static void determine_primary_bases (tree);
45baea8b 132static void finish_struct_methods (tree);
133static void maybe_warn_about_overly_private_class (tree);
45baea8b 134static int method_name_cmp (const void *, const void *);
135static int resort_method_name_cmp (const void *, const void *);
64fcba70 136static void add_implicitly_declared_members (tree, int, int);
45baea8b 137static tree fixed_type_or_null (tree, int *, int *);
da7e5851 138static tree build_simple_base_path (tree expr, tree binfo);
45baea8b 139static tree build_vtbl_ref_1 (tree, tree);
140static tree build_vtbl_initializer (tree, tree, tree, tree, int *);
141static int count_fields (tree);
860251be 142static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
45baea8b 143static void check_bitfield_decl (tree);
64fcba70 144static void check_field_decl (tree, tree, int *, int *, int *);
145static void check_field_decls (tree, tree *, int *, int *);
14786872 146static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
147static void build_base_fields (record_layout_info, splay_tree, tree *);
45baea8b 148static void check_methods (tree);
149static void remove_zero_width_bit_fields (tree);
64fcba70 150static void check_bases (tree, int *, int *);
14786872 151static void check_bases_and_members (tree);
152static tree create_vtable_ptr (tree, tree *);
23ed74d8 153static void include_empty_classes (record_layout_info);
c83788c9 154static void layout_class_type (tree, tree *);
45baea8b 155static void fixup_pending_inline (tree);
156static void fixup_inline_methods (tree);
95f3173a 157static void propagate_binfo_offsets (tree, tree);
23ed74d8 158static void layout_virtual_bases (record_layout_info, splay_tree);
45baea8b 159static void build_vbase_offset_vtbl_entries (tree, vtbl_init_data *);
160static void add_vcall_offset_vtbl_entries_r (tree, vtbl_init_data *);
161static void add_vcall_offset_vtbl_entries_1 (tree, vtbl_init_data *);
162static void build_vcall_offset_vtbl_entries (tree, vtbl_init_data *);
a1dbcdb9 163static void add_vcall_offset (tree, tree, vtbl_init_data *);
45baea8b 164static void layout_vtable_decl (tree, int);
398b91ef 165static tree dfs_find_final_overrider_pre (tree, void *);
95f3173a 166static tree dfs_find_final_overrider_post (tree, void *);
45baea8b 167static tree find_final_overrider (tree, tree, tree);
168static int make_new_vtable (tree, tree);
e75bce43 169static tree get_primary_binfo (tree);
45baea8b 170static int maybe_indent_hierarchy (FILE *, int, int);
95f3173a 171static tree dump_class_hierarchy_r (FILE *, int, tree, tree, int);
45baea8b 172static void dump_class_hierarchy (tree);
4880ab99 173static void dump_class_hierarchy_1 (FILE *, int, tree);
45baea8b 174static void dump_array (FILE *, tree);
175static void dump_vtable (tree, tree, tree);
176static void dump_vtt (tree, tree);
4880ab99 177static void dump_thunk (FILE *, int, tree);
45baea8b 178static tree build_vtable (tree, tree, tree);
179static void initialize_vtable (tree, tree);
45baea8b 180static void layout_nonempty_base_or_field (record_layout_info,
398b91ef 181 tree, tree, splay_tree);
45baea8b 182static tree end_of_class (tree, int);
95f3173a 183static bool layout_empty_base (tree, tree, splay_tree);
45baea8b 184static void accumulate_vtbl_inits (tree, tree, tree, tree, tree);
185static tree dfs_accumulate_vtbl_inits (tree, tree, tree, tree,
186 tree);
187static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
398b91ef 188static void build_vcall_and_vbase_vtbl_entries (tree, vtbl_init_data *);
45baea8b 189static void clone_constructors_and_destructors (tree);
190static tree build_clone (tree, tree);
adcb03c7 191static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
45baea8b 192static void build_ctor_vtbl_group (tree, tree);
193static void build_vtt (tree);
194static tree binfo_ctor_vtable (tree);
195static tree *build_vtt_inits (tree, tree, tree *, tree *);
196static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
45baea8b 197static tree dfs_fixup_binfo_vtbls (tree, void *);
45baea8b 198static int record_subobject_offset (tree, tree, splay_tree);
199static int check_subobject_offset (tree, tree, splay_tree);
200static int walk_subobject_offsets (tree, subobject_offset_fn,
398b91ef 201 tree, splay_tree, tree, int);
776a1f2d 202static void record_subobject_offsets (tree, tree, splay_tree, bool);
45baea8b 203static int layout_conflict_p (tree, tree, splay_tree, int);
204static int splay_tree_compare_integer_csts (splay_tree_key k1,
398b91ef 205 splay_tree_key k2);
45baea8b 206static void warn_about_ambiguous_bases (tree);
207static bool type_requires_array_cookie (tree);
d99a5b29 208static bool contains_empty_class_p (tree);
ea723b38 209static bool base_derived_from (tree, tree);
64f10f70 210static int empty_base_at_nonzero_offset_p (tree, tree, splay_tree);
29639fe2 211static tree end_of_base (tree);
6fc7a923 212static tree get_vcall_index (tree, tree);
f235209b 213
ac9386a0 214/* Variables shared between class.c and call.c. */
471086d6 215
e857e9c7 216#ifdef GATHER_STATISTICS
471086d6 217int n_vtables = 0;
218int n_vtable_entries = 0;
219int n_vtable_searches = 0;
220int n_vtable_elems = 0;
221int n_convert_harshness = 0;
222int n_compute_conversion_costs = 0;
471086d6 223int n_inner_fields_searched = 0;
e857e9c7 224#endif
471086d6 225
4a2680fc 226/* Convert to or from a base subobject. EXPR is an expression of type
227 `A' or `A*', an expression of type `B' or `B*' is returned. To
228 convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
229 the B base instance within A. To convert base A to derived B, CODE
230 is MINUS_EXPR and BINFO is the binfo for the A instance within B.
231 In this latter case, A must not be a morally virtual base of B.
232 NONNULL is true if EXPR is known to be non-NULL (this is only
233 needed when EXPR is of pointer type). CV qualifiers are preserved
234 from EXPR. */
f0b48940 235
236tree
45baea8b 237build_base_path (enum tree_code code,
653e5405 238 tree expr,
239 tree binfo,
240 int nonnull)
6beec4ad 241{
4a2680fc 242 tree v_binfo = NULL_TREE;
f608e013 243 tree d_binfo = NULL_TREE;
4a2680fc 244 tree probe;
245 tree offset;
246 tree target_type;
247 tree null_test = NULL;
248 tree ptr_target_type;
f0b48940 249 int fixed_type_p;
4a2680fc 250 int want_pointer = TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE;
da7e5851 251 bool has_empty = false;
9c582899 252 bool virtual_access;
6beec4ad 253
4a2680fc 254 if (expr == error_mark_node || binfo == error_mark_node || !binfo)
255 return error_mark_node;
f608e013 256
257 for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
258 {
259 d_binfo = probe;
da7e5851 260 if (is_empty_class (BINFO_TYPE (probe)))
261 has_empty = true;
57c28194 262 if (!v_binfo && BINFO_VIRTUAL_P (probe))
f608e013 263 v_binfo = probe;
264 }
4a2680fc 265
266 probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
267 if (want_pointer)
268 probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
da7e5851 269
5e8d5ca1 270 gcc_assert ((code == MINUS_EXPR
271 && SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), probe))
272 || (code == PLUS_EXPR
273 && SAME_BINFO_TYPE_P (BINFO_TYPE (d_binfo), probe)));
9031d10b 274
da7e5851 275 if (binfo == d_binfo)
276 /* Nothing to do. */
277 return expr;
278
4a2680fc 279 if (code == MINUS_EXPR && v_binfo)
280 {
8a443577 281 error ("cannot convert from base %qT to derived type %qT via virtual base %qT",
f608e013 282 BINFO_TYPE (binfo), BINFO_TYPE (d_binfo), BINFO_TYPE (v_binfo));
4a2680fc 283 return error_mark_node;
284 }
6beec4ad 285
db0ec145 286 if (!want_pointer)
287 /* This must happen before the call to save_expr. */
288 expr = build_unary_op (ADDR_EXPR, expr, 0);
289
da7e5851 290 offset = BINFO_OFFSET (binfo);
f0b48940 291 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
e1b0710d 292 target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (d_binfo);
da7e5851 293
9c582899 294 /* Do we need to look in the vtable for the real offset? */
295 virtual_access = (v_binfo && fixed_type_p <= 0);
296
297 /* Do we need to check for a null pointer? */
e1b0710d 298 if (want_pointer && !nonnull)
299 {
300 /* If we know the conversion will not actually change the value
301 of EXPR, then we can avoid testing the expression for NULL.
302 We have to avoid generating a COMPONENT_REF for a base class
303 field, because other parts of the compiler know that such
304 expressions are always non-NULL. */
305 if (!virtual_access && integer_zerop (offset))
306 return build_nop (build_pointer_type (target_type), expr);
307 null_test = error_mark_node;
308 }
da7e5851 309
9c582899 310 /* Protect against multiple evaluation if necessary. */
311 if (TREE_SIDE_EFFECTS (expr) && (null_test || virtual_access))
f0b48940 312 expr = save_expr (expr);
b74812d9 313
9c582899 314 /* Now that we've saved expr, build the real null test. */
da7e5851 315 if (null_test)
b393b2c9 316 {
317 tree zero = cp_convert (TREE_TYPE (expr), integer_zero_node);
b7837065 318 null_test = fold_build2 (NE_EXPR, boolean_type_node,
319 expr, zero);
b393b2c9 320 }
da7e5851 321
322 /* If this is a simple base reference, express it as a COMPONENT_REF. */
9c582899 323 if (code == PLUS_EXPR && !virtual_access
da7e5851 324 /* We don't build base fields for empty bases, and they aren't very
325 interesting to the optimizers anyway. */
326 && !has_empty)
327 {
328 expr = build_indirect_ref (expr, NULL);
329 expr = build_simple_base_path (expr, binfo);
330 if (want_pointer)
b867d8aa 331 expr = build_address (expr);
da7e5851 332 target_type = TREE_TYPE (expr);
333 goto out;
334 }
335
9c582899 336 if (virtual_access)
6beec4ad 337 {
4a2680fc 338 /* Going via virtual base V_BINFO. We need the static offset
653e5405 339 from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
340 V_BINFO. That offset is an entry in D_BINFO's vtable. */
5f1653d2 341 tree v_offset;
342
343 if (fixed_type_p < 0 && in_base_initializer)
344 {
1b5b5e1c 345 /* In a base member initializer, we cannot rely on the
346 vtable being set up. We have to indirect via the
347 vtt_parm. */
4ee9c684 348 tree t;
349
1b5b5e1c 350 t = TREE_TYPE (TYPE_VFIELD (current_class_type));
4ee9c684 351 t = build_pointer_type (t);
352 v_offset = convert (t, current_vtt_parm);
4ee9c684 353 v_offset = build_indirect_ref (v_offset, NULL);
5f1653d2 354 }
355 else
356 v_offset = build_vfield_ref (build_indirect_ref (expr, NULL),
357 TREE_TYPE (TREE_TYPE (expr)));
9031d10b 358
831d52a2 359 v_offset = build2 (PLUS_EXPR, TREE_TYPE (v_offset),
360 v_offset, BINFO_VPTR_FIELD (v_binfo));
9031d10b 361 v_offset = build1 (NOP_EXPR,
4a2680fc 362 build_pointer_type (ptrdiff_type_node),
363 v_offset);
364 v_offset = build_indirect_ref (v_offset, NULL);
4ee9c684 365 TREE_CONSTANT (v_offset) = 1;
366 TREE_INVARIANT (v_offset) = 1;
8bfe5753 367
ee1ab431 368 offset = convert_to_integer (ptrdiff_type_node,
9031d10b 369 size_diffop (offset,
ee1ab431 370 BINFO_OFFSET (v_binfo)));
471086d6 371
4a2680fc 372 if (!integer_zerop (offset))
831d52a2 373 v_offset = build2 (code, ptrdiff_type_node, v_offset, offset);
b74812d9 374
375 if (fixed_type_p < 0)
376 /* Negative fixed_type_p means this is a constructor or destructor;
377 virtual base layout is fixed in in-charge [cd]tors, but not in
378 base [cd]tors. */
831d52a2 379 offset = build3 (COND_EXPR, ptrdiff_type_node,
380 build2 (EQ_EXPR, boolean_type_node,
381 current_in_charge_parm, integer_zero_node),
382 v_offset,
070a4061 383 convert_to_integer (ptrdiff_type_node,
384 BINFO_OFFSET (binfo)));
4a2680fc 385 else
386 offset = v_offset;
471086d6 387 }
471086d6 388
4a2680fc 389 target_type = cp_build_qualified_type
390 (target_type, cp_type_quals (TREE_TYPE (TREE_TYPE (expr))));
391 ptr_target_type = build_pointer_type (target_type);
392 if (want_pointer)
393 target_type = ptr_target_type;
9031d10b 394
4a2680fc 395 expr = build1 (NOP_EXPR, ptr_target_type, expr);
902de8ed 396
4a2680fc 397 if (!integer_zerop (offset))
831d52a2 398 expr = build2 (code, ptr_target_type, expr, offset);
471086d6 399 else
4a2680fc 400 null_test = NULL;
9031d10b 401
4a2680fc 402 if (!want_pointer)
403 expr = build_indirect_ref (expr, NULL);
471086d6 404
da7e5851 405 out:
4a2680fc 406 if (null_test)
b7837065 407 expr = fold_build3 (COND_EXPR, target_type, null_test, expr,
408 fold_build1 (NOP_EXPR, target_type,
409 integer_zero_node));
b74812d9 410
4a2680fc 411 return expr;
471086d6 412}
413
da7e5851 414/* Subroutine of build_base_path; EXPR and BINFO are as in that function.
415 Perform a derived-to-base conversion by recursively building up a
416 sequence of COMPONENT_REFs to the appropriate base fields. */
417
418static tree
419build_simple_base_path (tree expr, tree binfo)
420{
421 tree type = BINFO_TYPE (binfo);
eea75c62 422 tree d_binfo = BINFO_INHERITANCE_CHAIN (binfo);
da7e5851 423 tree field;
424
da7e5851 425 if (d_binfo == NULL_TREE)
426 {
79581672 427 tree temp;
9031d10b 428
092b1d6f 429 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (expr)) == type);
9031d10b 430
79581672 431 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x'
653e5405 432 into `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only
433 an lvalue in the frontend; only _DECLs and _REFs are lvalues
434 in the backend. */
79581672 435 temp = unary_complex_lvalue (ADDR_EXPR, expr);
436 if (temp)
437 expr = build_indirect_ref (temp, NULL);
438
da7e5851 439 return expr;
440 }
441
442 /* Recurse. */
443 expr = build_simple_base_path (expr, d_binfo);
444
445 for (field = TYPE_FIELDS (BINFO_TYPE (d_binfo));
446 field; field = TREE_CHAIN (field))
447 /* Is this the base field created by build_base_field? */
448 if (TREE_CODE (field) == FIELD_DECL
6078f68f 449 && DECL_FIELD_IS_BASE (field)
450 && TREE_TYPE (field) == type)
79581672 451 {
452 /* We don't use build_class_member_access_expr here, as that
453 has unnecessary checks, and more importantly results in
454 recursive calls to dfs_walk_once. */
455 int type_quals = cp_type_quals (TREE_TYPE (expr));
456
457 expr = build3 (COMPONENT_REF,
458 cp_build_qualified_type (type, type_quals),
459 expr, field, NULL_TREE);
460 expr = fold_if_not_in_template (expr);
9031d10b 461
79581672 462 /* Mark the expression const or volatile, as appropriate.
463 Even though we've dealt with the type above, we still have
464 to mark the expression itself. */
465 if (type_quals & TYPE_QUAL_CONST)
466 TREE_READONLY (expr) = 1;
467 if (type_quals & TYPE_QUAL_VOLATILE)
468 TREE_THIS_VOLATILE (expr) = 1;
9031d10b 469
79581672 470 return expr;
471 }
da7e5851 472
473 /* Didn't find the base field?!? */
092b1d6f 474 gcc_unreachable ();
da7e5851 475}
476
cb02169c 477/* Convert OBJECT to the base TYPE. OBJECT is an expression whose
478 type is a class type or a pointer to a class type. In the former
479 case, TYPE is also a class type; in the latter it is another
480 pointer type. If CHECK_ACCESS is true, an error message is emitted
481 if TYPE is inaccessible. If OBJECT has pointer type, the value is
482 assumed to be non-NULL. */
4ac852cb 483
484tree
cb02169c 485convert_to_base (tree object, tree type, bool check_access, bool nonnull)
4ac852cb 486{
487 tree binfo;
cb02169c 488 tree object_type;
4ac852cb 489
cb02169c 490 if (TYPE_PTR_P (TREE_TYPE (object)))
491 {
492 object_type = TREE_TYPE (TREE_TYPE (object));
493 type = TREE_TYPE (type);
494 }
495 else
496 object_type = TREE_TYPE (object);
497
498 binfo = lookup_base (object_type, type,
9031d10b 499 check_access ? ba_check : ba_unique,
4ac852cb 500 NULL);
32dccc47 501 if (!binfo || binfo == error_mark_node)
4ac852cb 502 return error_mark_node;
503
cb02169c 504 return build_base_path (PLUS_EXPR, object, binfo, nonnull);
4ac852cb 505}
506
5e8d5ca1 507/* EXPR is an expression with unqualified class type. BASE is a base
508 binfo of that class type. Returns EXPR, converted to the BASE
c1c5bfe2 509 type. This function assumes that EXPR is the most derived class;
510 therefore virtual bases can be found at their static offsets. */
511
512tree
513convert_to_base_statically (tree expr, tree base)
514{
515 tree expr_type;
516
517 expr_type = TREE_TYPE (expr);
5e8d5ca1 518 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (base), expr_type))
c1c5bfe2 519 {
520 tree pointer_type;
521
522 pointer_type = build_pointer_type (expr_type);
523 expr = build_unary_op (ADDR_EXPR, expr, /*noconvert=*/1);
524 if (!integer_zerop (BINFO_OFFSET (base)))
9031d10b 525 expr = build2 (PLUS_EXPR, pointer_type, expr,
831d52a2 526 build_nop (pointer_type, BINFO_OFFSET (base)));
c1c5bfe2 527 expr = build_nop (build_pointer_type (BINFO_TYPE (base)), expr);
528 expr = build1 (INDIRECT_REF, BINFO_TYPE (base), expr);
529 }
530
531 return expr;
532}
533
e1ddff70 534\f
4ebee924 535tree
536build_vfield_ref (tree datum, tree type)
537{
538 tree vfield, vcontext;
539
540 if (datum == error_mark_node)
541 return error_mark_node;
542
4ebee924 543 /* First, convert to the requested type. */
544 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
cb02169c 545 datum = convert_to_base (datum, type, /*check_access=*/false,
546 /*nonnull=*/true);
4ebee924 547
548 /* Second, the requested type may not be the owner of its own vptr.
549 If not, convert to the base class that owns it. We cannot use
550 convert_to_base here, because VCONTEXT may appear more than once
6cd5db64 551 in the inheritance hierarchy of TYPE, and thus direct conversion
4ebee924 552 between the types may be ambiguous. Following the path back up
553 one step at a time via primary bases avoids the problem. */
554 vfield = TYPE_VFIELD (type);
555 vcontext = DECL_CONTEXT (vfield);
556 while (!same_type_ignoring_top_level_qualifiers_p (vcontext, type))
557 {
558 datum = build_simple_base_path (datum, CLASSTYPE_PRIMARY_BINFO (type));
559 type = TREE_TYPE (datum);
560 }
561
562 return build3 (COMPONENT_REF, TREE_TYPE (vfield), datum, vfield, NULL_TREE);
563}
564
471086d6 565/* Given an object INSTANCE, return an expression which yields the
6bfa2cc1 566 vtable element corresponding to INDEX. There are many special
567 cases for INSTANCE which we take care of here, mainly to avoid
568 creating extra tree nodes when we don't have to. */
96624a9e 569
cef0c6a0 570static tree
45baea8b 571build_vtbl_ref_1 (tree instance, tree idx)
471086d6 572{
8bfe5753 573 tree aref;
574 tree vtbl = NULL_TREE;
471086d6 575
8bfe5753 576 /* Try to figure out what a reference refers to, and
577 access its virtual function table directly. */
578
579 int cdtorp = 0;
580 tree fixed_type = fixed_type_or_null (instance, NULL, &cdtorp);
581
ef4534a3 582 tree basetype = non_reference (TREE_TYPE (instance));
471086d6 583
8bfe5753 584 if (fixed_type && !cdtorp)
471086d6 585 {
8bfe5753 586 tree binfo = lookup_base (fixed_type, basetype,
ada40935 587 ba_unique | ba_quiet, NULL);
8bfe5753 588 if (binfo)
4ee9c684 589 vtbl = unshare_expr (BINFO_VTABLE (binfo));
8bfe5753 590 }
471086d6 591
8bfe5753 592 if (!vtbl)
95f3173a 593 vtbl = build_vfield_ref (instance, basetype);
9031d10b 594
7030c696 595 assemble_external (vtbl);
434617bd 596
471086d6 597 aref = build_array_ref (vtbl, idx);
4ee9c684 598 TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
599 TREE_INVARIANT (aref) = TREE_CONSTANT (aref);
471086d6 600
dc9b5a48 601 return aref;
471086d6 602}
603
cef0c6a0 604tree
45baea8b 605build_vtbl_ref (tree instance, tree idx)
cef0c6a0 606{
607 tree aref = build_vtbl_ref_1 (instance, idx);
608
cef0c6a0 609 return aref;
610}
611
215e2f1d 612/* Given a stable object pointer INSTANCE_PTR, return an expression which
613 yields a function pointer corresponding to vtable element INDEX. */
6bfa2cc1 614
615tree
215e2f1d 616build_vfn_ref (tree instance_ptr, tree idx)
6bfa2cc1 617{
215e2f1d 618 tree aref;
619
620 aref = build_vtbl_ref_1 (build_indirect_ref (instance_ptr, 0), idx);
6bfa2cc1 621
622 /* When using function descriptors, the address of the
623 vtable entry is treated as a function pointer. */
624 if (TARGET_VTABLE_USES_DESCRIPTORS)
cef0c6a0 625 aref = build1 (NOP_EXPR, TREE_TYPE (aref),
6bfa2cc1 626 build_unary_op (ADDR_EXPR, aref, /*noconvert=*/1));
627
215e2f1d 628 /* Remember this as a method reference, for later devirtualization. */
831d52a2 629 aref = build3 (OBJ_TYPE_REF, TREE_TYPE (aref), aref, instance_ptr, idx);
215e2f1d 630
6bfa2cc1 631 return aref;
632}
633
442fd60a 634/* Return the name of the virtual function table (as an IDENTIFIER_NODE)
635 for the given TYPE. */
636
637static tree
45baea8b 638get_vtable_name (tree type)
442fd60a 639{
606b494c 640 return mangle_vtbl_for_type (type);
442fd60a 641}
642
caa6fdce 643/* DECL is an entity associated with TYPE, like a virtual table or an
644 implicitly generated constructor. Determine whether or not DECL
645 should have external or internal linkage at the object file
646 level. This routine does not deal with COMDAT linkage and other
647 similar complexities; it simply sets TREE_PUBLIC if it possible for
648 entities in other translation units to contain copies of DECL, in
649 the abstract. */
650
651void
652set_linkage_according_to_type (tree type, tree decl)
653{
654 /* If TYPE involves a local class in a function with internal
655 linkage, then DECL should have internal linkage too. Other local
656 classes have no linkage -- but if their containing functions
657 have external linkage, it makes sense for DECL to have external
658 linkage too. That will allow template definitions to be merged,
659 for example. */
660 if (no_linkage_check (type, /*relaxed_p=*/true))
661 {
662 TREE_PUBLIC (decl) = 0;
663 DECL_INTERFACE_KNOWN (decl) = 1;
664 }
665 else
666 TREE_PUBLIC (decl) = 1;
667}
668
f753592a 669/* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
670 (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
671 Use NAME for the name of the vtable, and VTABLE_TYPE for its type. */
f9d272ac 672
673static tree
45baea8b 674build_vtable (tree class_type, tree name, tree vtable_type)
f9d272ac 675{
676 tree decl;
677
678 decl = build_lang_decl (VAR_DECL, name, vtable_type);
8458d888 679 /* vtable names are already mangled; give them their DECL_ASSEMBLER_NAME
680 now to avoid confusion in mangle_decl. */
681 SET_DECL_ASSEMBLER_NAME (decl, name);
f9d272ac 682 DECL_CONTEXT (decl) = class_type;
683 DECL_ARTIFICIAL (decl) = 1;
684 TREE_STATIC (decl) = 1;
f9d272ac 685 TREE_READONLY (decl) = 1;
f9d272ac 686 DECL_VIRTUAL_P (decl) = 1;
5c43f650 687 DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
8efca15a 688 DECL_VTABLE_OR_VTT_P (decl) = 1;
f5712181 689 /* At one time the vtable info was grabbed 2 words at a time. This
690 fails on sparc unless you have 8-byte alignment. (tiemann) */
691 DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
692 DECL_ALIGN (decl));
caa6fdce 693 set_linkage_according_to_type (class_type, decl);
694 /* The vtable has not been defined -- yet. */
695 DECL_EXTERNAL (decl) = 1;
696 DECL_NOT_REALLY_EXTERN (decl) = 1;
697
553acd9c 698 /* Mark the VAR_DECL node representing the vtable itself as a
699 "gratuitous" one, thereby forcing dwarfout.c to ignore it. It
700 is rather important that such things be ignored because any
701 effort to actually generate DWARF for them will run into
702 trouble when/if we encounter code like:
9031d10b 703
553acd9c 704 #pragma interface
705 struct S { virtual void member (); };
9031d10b 706
553acd9c 707 because the artificial declaration of the vtable itself (as
708 manufactured by the g++ front end) will say that the vtable is
709 a static member of `S' but only *after* the debug output for
710 the definition of `S' has already been output. This causes
711 grief because the DWARF entry for the definition of the vtable
712 will try to refer back to an earlier *declaration* of the
713 vtable as a static member of `S' and there won't be one. We
714 might be able to arrange to have the "vtable static member"
715 attached to the member list for `S' before the debug info for
716 `S' get written (which would solve the problem) but that would
717 require more intrusive changes to the g++ front end. */
718 DECL_IGNORED_P (decl) = 1;
f5712181 719
f9d272ac 720 return decl;
721}
722
fba090a8 723/* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
724 or even complete. If this does not exist, create it. If COMPLETE is
3160db1d 725 nonzero, then complete the definition of it -- that will render it
fba090a8 726 impossible to actually build the vtable, but is useful to get at those
727 which are known to exist in the runtime. */
728
9031d10b 729tree
45baea8b 730get_vtable_decl (tree type, int complete)
fba090a8 731{
6fc7a923 732 tree decl;
733
734 if (CLASSTYPE_VTABLES (type))
735 return CLASSTYPE_VTABLES (type);
9031d10b 736
2a68cb1e 737 decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
6fc7a923 738 CLASSTYPE_VTABLES (type) = decl;
739
fba090a8 740 if (complete)
e1187456 741 {
742 DECL_EXTERNAL (decl) = 1;
d91303a6 743 finish_decl (decl, NULL_TREE, NULL_TREE);
e1187456 744 }
fba090a8 745
fba090a8 746 return decl;
747}
748
566d2052 749/* Build the primary virtual function table for TYPE. If BINFO is
750 non-NULL, build the vtable starting with the initial approximation
751 that it is the same as the one which is the head of the association
3160db1d 752 list. Returns a nonzero value if a new vtable is actually
566d2052 753 created. */
96624a9e 754
566d2052 755static int
45baea8b 756build_primary_vtable (tree binfo, tree type)
471086d6 757{
2b82dde2 758 tree decl;
759 tree virtuals;
471086d6 760
fba090a8 761 decl = get_vtable_decl (type, /*complete=*/0);
9031d10b 762
471086d6 763 if (binfo)
764 {
95f3173a 765 if (BINFO_NEW_VTABLE_MARKED (binfo))
05a817bb 766 /* We have already created a vtable for this base, so there's
767 no need to do it again. */
566d2052 768 return 0;
9031d10b 769
55d0e950 770 virtuals = copy_list (BINFO_VIRTUALS (binfo));
59751e6c 771 TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
772 DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
773 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
471086d6 774 }
775 else
776 {
b4df430b 777 gcc_assert (TREE_TYPE (decl) == vtbl_type_node);
471086d6 778 virtuals = NULL_TREE;
471086d6 779 }
780
781#ifdef GATHER_STATISTICS
782 n_vtables += 1;
783 n_vtable_elems += list_length (virtuals);
784#endif
785
471086d6 786 /* Initialize the association list for this type, based
787 on our first approximation. */
2cfde4f3 788 BINFO_VTABLE (TYPE_BINFO (type)) = decl;
789 BINFO_VIRTUALS (TYPE_BINFO (type)) = virtuals;
95f3173a 790 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type));
566d2052 791 return 1;
471086d6 792}
793
5ad590ad 794/* Give BINFO a new virtual function table which is initialized
471086d6 795 with a skeleton-copy of its original initialization. The only
796 entry that changes is the `delta' entry, so we can really
797 share a lot of structure.
798
5ad590ad 799 FOR_TYPE is the most derived type which caused this table to
471086d6 800 be needed.
801
3160db1d 802 Returns nonzero if we haven't met BINFO before.
006f94cd 803
804 The order in which vtables are built (by calling this function) for
805 an object must remain the same, otherwise a binary incompatibility
806 can result. */
96624a9e 807
566d2052 808static int
95f3173a 809build_secondary_vtable (tree binfo)
471086d6 810{
95f3173a 811 if (BINFO_NEW_VTABLE_MARKED (binfo))
05a817bb 812 /* We already created a vtable for this base. There's no need to
813 do it again. */
566d2052 814 return 0;
05a817bb 815
d8febc9d 816 /* Remember that we've created a vtable for this BINFO, so that we
817 don't try to do so again. */
95f3173a 818 SET_BINFO_NEW_VTABLE_MARKED (binfo);
9031d10b 819
d8febc9d 820 /* Make fresh virtual list, so we can smash it later. */
55d0e950 821 BINFO_VIRTUALS (binfo) = copy_list (BINFO_VIRTUALS (binfo));
d8febc9d 822
5ad590ad 823 /* Secondary vtables are laid out as part of the same structure as
824 the primary vtable. */
825 BINFO_VTABLE (binfo) = NULL_TREE;
566d2052 826 return 1;
471086d6 827}
828
566d2052 829/* Create a new vtable for BINFO which is the hierarchy dominated by
3160db1d 830 T. Return nonzero if we actually created a new vtable. */
566d2052 831
832static int
45baea8b 833make_new_vtable (tree t, tree binfo)
566d2052 834{
835 if (binfo == TYPE_BINFO (t))
836 /* In this case, it is *type*'s vtable we are modifying. We start
70050b43 837 with the approximation that its vtable is that of the
566d2052 838 immediate base class. */
4ebee924 839 return build_primary_vtable (binfo, t);
566d2052 840 else
841 /* This is our very own copy of `basetype' to play with. Later,
842 we will fill in all the virtual functions that override the
843 virtual functions in these base classes which are not defined
844 by the current type. */
95f3173a 845 return build_secondary_vtable (binfo);
566d2052 846}
847
848/* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
849 (which is in the hierarchy dominated by T) list FNDECL as its
f8732e3f 850 BV_FN. DELTA is the required constant adjustment from the `this'
851 pointer where the vtable entry appears to the `this' required when
852 the function is actually called. */
471086d6 853
854static void
45baea8b 855modify_vtable_entry (tree t,
653e5405 856 tree binfo,
857 tree fndecl,
858 tree delta,
859 tree *virtuals)
471086d6 860{
566d2052 861 tree v;
7b4abb45 862
566d2052 863 v = *virtuals;
7b4abb45 864
fc475736 865 if (fndecl != BV_FN (v)
f8732e3f 866 || !tree_int_cst_equal (delta, BV_DELTA (v)))
7b4abb45 867 {
566d2052 868 /* We need a new vtable for BINFO. */
869 if (make_new_vtable (t, binfo))
870 {
871 /* If we really did make a new vtable, we also made a copy
872 of the BINFO_VIRTUALS list. Now, we have to find the
873 corresponding entry in that list. */
874 *virtuals = BINFO_VIRTUALS (binfo);
fc475736 875 while (BV_FN (*virtuals) != BV_FN (v))
566d2052 876 *virtuals = TREE_CHAIN (*virtuals);
877 v = *virtuals;
878 }
471086d6 879
fc475736 880 BV_DELTA (v) = delta;
3c4a383e 881 BV_VCALL_INDEX (v) = NULL_TREE;
fc475736 882 BV_FN (v) = fndecl;
471086d6 883 }
471086d6 884}
885
471086d6 886\f
49213a81 887/* Add method METHOD to class TYPE. If USING_DECL is non-null, it is
e36e7923 888 the USING_DECL naming METHOD. Returns true if the method could be
889 added to the method vec. */
96624a9e 890
e36e7923 891bool
49213a81 892add_method (tree type, tree method, tree using_decl)
471086d6 893{
930bdacf 894 unsigned slot;
d09ae6d5 895 tree overload;
c0f42aca 896 bool template_conv_p = false;
897 bool conv_p;
046bfc77 898 VEC(tree,gc) *method_vec;
de5ab3f1 899 bool complete_p;
930bdacf 900 bool insert_p = false;
901 tree current_fns;
1965e597 902 tree fns;
08a54795 903
904 if (method == error_mark_node)
e36e7923 905 return false;
de5ab3f1 906
907 complete_p = COMPLETE_TYPE_P (type);
c0f42aca 908 conv_p = DECL_CONV_FN_P (method);
909 if (conv_p)
910 template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL
911 && DECL_TEMPLATE_CONV_FN_P (method));
eb0eaa84 912
eb0eaa84 913 method_vec = CLASSTYPE_METHOD_VEC (type);
de5ab3f1 914 if (!method_vec)
915 {
916 /* Make a new method vector. We start with 8 entries. We must
917 allocate at least two (for constructors and destructors), and
918 we're going to end up with an assignment operator at some
919 point as well. */
046bfc77 920 method_vec = VEC_alloc (tree, gc, 8);
de5ab3f1 921 /* Create slots for constructors and destructors. */
922 VEC_quick_push (tree, method_vec, NULL_TREE);
923 VEC_quick_push (tree, method_vec, NULL_TREE);
924 CLASSTYPE_METHOD_VEC (type) = method_vec;
925 }
926
e9360a55 927 /* Maintain TYPE_HAS_CONSTRUCTOR, etc. */
928 grok_special_member_properties (method);
929
eb0eaa84 930 /* Constructors and destructors go in special slots. */
931 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
932 slot = CLASSTYPE_CONSTRUCTOR_SLOT;
933 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
b7d1e8ea 934 {
935 slot = CLASSTYPE_DESTRUCTOR_SLOT;
9031d10b 936
de4355dc 937 if (TYPE_FOR_JAVA (type))
ed36f1cf 938 {
939 if (!DECL_ARTIFICIAL (method))
940 error ("Java class %qT cannot have a destructor", type);
941 else if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
942 error ("Java class %qT cannot have an implicit non-trivial "
943 "destructor",
944 type);
945 }
b7d1e8ea 946 }
eb0eaa84 947 else
0f2952a1 948 {
de5ab3f1 949 tree m;
950
930bdacf 951 insert_p = true;
eb0eaa84 952 /* See if we already have an entry with this name. */
9031d10b 953 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
930bdacf 954 VEC_iterate (tree, method_vec, slot, m);
de5ab3f1 955 ++slot)
c0af458b 956 {
c0af458b 957 m = OVL_CURRENT (m);
c0af458b 958 if (template_conv_p)
959 {
de5ab3f1 960 if (TREE_CODE (m) == TEMPLATE_DECL
961 && DECL_TEMPLATE_CONV_FN_P (m))
962 insert_p = false;
c0af458b 963 break;
964 }
de5ab3f1 965 if (conv_p && !DECL_CONV_FN_P (m))
c0af458b 966 break;
de5ab3f1 967 if (DECL_NAME (m) == DECL_NAME (method))
eb0eaa84 968 {
de5ab3f1 969 insert_p = false;
970 break;
471086d6 971 }
de5ab3f1 972 if (complete_p
973 && !DECL_CONV_FN_P (m)
974 && DECL_NAME (m) > DECL_NAME (method))
975 break;
0f2952a1 976 }
eb0eaa84 977 }
930bdacf 978 current_fns = insert_p ? NULL_TREE : VEC_index (tree, method_vec, slot);
9031d10b 979
1965e597 980 /* Check to see if we've already got this method. */
981 for (fns = current_fns; fns; fns = OVL_NEXT (fns))
eb0eaa84 982 {
1965e597 983 tree fn = OVL_CURRENT (fns);
984 tree fn_type;
985 tree method_type;
986 tree parms1;
987 tree parms2;
988
989 if (TREE_CODE (fn) != TREE_CODE (method))
990 continue;
991
992 /* [over.load] Member function declarations with the
993 same name and the same parameter types cannot be
994 overloaded if any of them is a static member
995 function declaration.
996
997 [namespace.udecl] When a using-declaration brings names
998 from a base class into a derived class scope, member
999 functions in the derived class override and/or hide member
1000 functions with the same name and parameter types in a base
1001 class (rather than conflicting). */
1002 fn_type = TREE_TYPE (fn);
1003 method_type = TREE_TYPE (method);
1004 parms1 = TYPE_ARG_TYPES (fn_type);
1005 parms2 = TYPE_ARG_TYPES (method_type);
1006
1007 /* Compare the quals on the 'this' parm. Don't compare
1008 the whole types, as used functions are treated as
1009 coming from the using class in overload resolution. */
1010 if (! DECL_STATIC_FUNCTION_P (fn)
1011 && ! DECL_STATIC_FUNCTION_P (method)
1012 && (TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms1)))
1013 != TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms2)))))
1014 continue;
1015
1016 /* For templates, the return type and template parameters
1017 must be identical. */
1018 if (TREE_CODE (fn) == TEMPLATE_DECL
1019 && (!same_type_p (TREE_TYPE (fn_type),
1020 TREE_TYPE (method_type))
1021 || !comp_template_parms (DECL_TEMPLATE_PARMS (fn),
1022 DECL_TEMPLATE_PARMS (method))))
1023 continue;
1024
1025 if (! DECL_STATIC_FUNCTION_P (fn))
1026 parms1 = TREE_CHAIN (parms1);
1027 if (! DECL_STATIC_FUNCTION_P (method))
1028 parms2 = TREE_CHAIN (parms2);
1029
1030 if (compparms (parms1, parms2)
1031 && (!DECL_CONV_FN_P (fn)
1032 || same_type_p (TREE_TYPE (fn_type),
1033 TREE_TYPE (method_type))))
eb0eaa84 1034 {
1965e597 1035 if (using_decl)
eb0eaa84 1036 {
1965e597 1037 if (DECL_CONTEXT (fn) == type)
1038 /* Defer to the local function. */
1039 return false;
1040 if (DECL_CONTEXT (fn) == DECL_CONTEXT (method))
1041 error ("repeated using declaration %q+D", using_decl);
198559b7 1042 else
1965e597 1043 error ("using declaration %q+D conflicts with a previous using declaration",
1044 using_decl);
eb0eaa84 1045 }
1965e597 1046 else
1047 {
1048 error ("%q+#D cannot be overloaded", method);
1049 error ("with %q+#D", fn);
1050 }
1051
1052 /* We don't call duplicate_decls here to merge the
1053 declarations because that will confuse things if the
1054 methods have inline definitions. In particular, we
1055 will crash while processing the definitions. */
1056 return false;
88e449ea 1057 }
eb0eaa84 1058 }
88e449ea 1059
074ab442 1060 /* A class should never have more than one destructor. */
7be1bc1f 1061 if (current_fns && DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
1062 return false;
1063
9031d10b 1064 /* Add the new binding. */
930bdacf 1065 overload = build_overload (method, current_fns);
9031d10b 1066
7be1bc1f 1067 if (conv_p)
1068 TYPE_HAS_CONVERSION (type) = 1;
1069 else if (slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
d09ae6d5 1070 push_class_level_binding (DECL_NAME (method), overload);
1071
930bdacf 1072 if (insert_p)
1073 {
1074 /* We only expect to add few methods in the COMPLETE_P case, so
1075 just make room for one more method in that case. */
046bfc77 1076 if (VEC_reserve (tree, gc, method_vec, complete_p ? -1 : 1))
930bdacf 1077 CLASSTYPE_METHOD_VEC (type) = method_vec;
1078 if (slot == VEC_length (tree, method_vec))
1079 VEC_quick_push (tree, method_vec, overload);
1080 else
1081 VEC_quick_insert (tree, method_vec, slot, overload);
1082 }
1083 else
93523877 1084 /* Replace the current slot. */
930bdacf 1085 VEC_replace (tree, method_vec, slot, overload);
e36e7923 1086 return true;
471086d6 1087}
1088
1089/* Subroutines of finish_struct. */
1090
c161288a 1091/* Change the access of FDECL to ACCESS in T. Return 1 if change was
1092 legit, otherwise return 0. */
96624a9e 1093
471086d6 1094static int
45baea8b 1095alter_access (tree t, tree fdecl, tree access)
471086d6 1096{
a484e8db 1097 tree elem;
1098
1099 if (!DECL_LANG_SPECIFIC (fdecl))
1100 retrofit_lang_decl (fdecl);
1101
b4df430b 1102 gcc_assert (!DECL_DISCRIMINATOR_P (fdecl));
e6393a02 1103
a484e8db 1104 elem = purpose_member (t, DECL_ACCESS (fdecl));
c7818485 1105 if (elem)
471086d6 1106 {
c7818485 1107 if (TREE_VALUE (elem) != access)
471086d6 1108 {
c7818485 1109 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
3cf8b391 1110 error ("conflicting access specifications for method"
1111 " %q+D, ignored", TREE_TYPE (fdecl));
c7818485 1112 else
8a443577 1113 error ("conflicting access specifications for field %qE, ignored",
286daa79 1114 DECL_NAME (fdecl));
471086d6 1115 }
1116 else
f86b1dce 1117 {
1118 /* They're changing the access to the same thing they changed
1119 it to before. That's OK. */
1120 ;
1121 }
c25194fd 1122 }
c7818485 1123 else
471086d6 1124 {
579bb663 1125 perform_or_defer_access_check (TYPE_BINFO (t), fdecl, fdecl);
652e1a2d 1126 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
471086d6 1127 return 1;
1128 }
1129 return 0;
1130}
1131
9f6e8c5e 1132/* Process the USING_DECL, which is a member of T. */
cc9d5e5b 1133
863c3f96 1134static void
45baea8b 1135handle_using_decl (tree using_decl, tree t)
cc9d5e5b 1136{
094fb0d8 1137 tree decl = USING_DECL_DECLS (using_decl);
cc9d5e5b 1138 tree name = DECL_NAME (using_decl);
1139 tree access
1140 = TREE_PRIVATE (using_decl) ? access_private_node
1141 : TREE_PROTECTED (using_decl) ? access_protected_node
1142 : access_public_node;
cc9d5e5b 1143 tree flist = NULL_TREE;
c161288a 1144 tree old_value;
cc9d5e5b 1145
094fb0d8 1146 gcc_assert (!processing_template_decl && decl);
9031d10b 1147
fa26c7a9 1148 old_value = lookup_member (t, name, /*protect=*/0, /*want_type=*/false);
c161288a 1149 if (old_value)
cc9d5e5b 1150 {
c161288a 1151 if (is_overloaded_fn (old_value))
1152 old_value = OVL_CURRENT (old_value);
1153
1154 if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1155 /* OK */;
1156 else
1157 old_value = NULL_TREE;
cc9d5e5b 1158 }
9031d10b 1159
1e65641d 1160 cp_emit_debug_info_for_using (decl, USING_DECL_SCOPE (using_decl));
9031d10b 1161
094fb0d8 1162 if (is_overloaded_fn (decl))
1163 flist = decl;
c161288a 1164
1165 if (! old_value)
1166 ;
1167 else if (is_overloaded_fn (old_value))
cc9d5e5b 1168 {
c161288a 1169 if (flist)
1170 /* It's OK to use functions from a base when there are functions with
1171 the same name already present in the current class. */;
1172 else
cc9d5e5b 1173 {
3cf8b391 1174 error ("%q+D invalid in %q#T", using_decl, t);
1175 error (" because of local method %q+#D with same name",
1176 OVL_CURRENT (old_value));
c161288a 1177 return;
cc9d5e5b 1178 }
1179 }
864312c0 1180 else if (!DECL_ARTIFICIAL (old_value))
c161288a 1181 {
3cf8b391 1182 error ("%q+D invalid in %q#T", using_decl, t);
1183 error (" because of local member %q+#D with same name", old_value);
c161288a 1184 return;
1185 }
9031d10b 1186
331bc0ad 1187 /* Make type T see field decl FDECL with access ACCESS. */
c161288a 1188 if (flist)
1189 for (; flist; flist = OVL_NEXT (flist))
1190 {
49213a81 1191 add_method (t, OVL_CURRENT (flist), using_decl);
c161288a 1192 alter_access (t, OVL_CURRENT (flist), access);
1193 }
1194 else
094fb0d8 1195 alter_access (t, decl, access);
cc9d5e5b 1196}
471086d6 1197\f
64fcba70 1198/* Run through the base classes of T, updating CANT_HAVE_CONST_CTOR_P,
1199 and NO_CONST_ASN_REF_P. Also set flag bits in T based on
1200 properties of the bases. */
471086d6 1201
b8b24df5 1202static void
45baea8b 1203check_bases (tree t,
653e5405 1204 int* cant_have_const_ctor_p,
1205 int* no_const_asn_ref_p)
471086d6 1206{
b8b24df5 1207 int i;
a201f10a 1208 int seen_non_virtual_nearly_empty_base_p;
f6cc6a08 1209 tree base_binfo;
1210 tree binfo;
471086d6 1211
a201f10a 1212 seen_non_virtual_nearly_empty_base_p = 0;
b8b24df5 1213
f6cc6a08 1214 for (binfo = TYPE_BINFO (t), i = 0;
1215 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
471086d6 1216 {
f6cc6a08 1217 tree basetype = TREE_TYPE (base_binfo);
005efe3a 1218
b4df430b 1219 gcc_assert (COMPLETE_TYPE_P (basetype));
9031d10b 1220
1d6228f0 1221 /* Effective C++ rule 14. We only need to check TYPE_POLYMORPHIC_P
b8b24df5 1222 here because the case of virtual functions but non-virtual
1223 dtor is handled in finish_struct_1. */
c0d4a023 1224 if (!TYPE_POLYMORPHIC_P (basetype))
1225 warning (OPT_Weffc__,
074ab442 1226 "base class %q#T has a non-virtual destructor", basetype);
471086d6 1227
b8b24df5 1228 /* If the base class doesn't have copy constructors or
1229 assignment operators that take const references, then the
1230 derived class cannot have such a member automatically
1231 generated. */
1232 if (! TYPE_HAS_CONST_INIT_REF (basetype))
1233 *cant_have_const_ctor_p = 1;
1234 if (TYPE_HAS_ASSIGN_REF (basetype)
1235 && !TYPE_HAS_CONST_ASSIGN_REF (basetype))
1236 *no_const_asn_ref_p = 1;
471086d6 1237
57c28194 1238 if (BINFO_VIRTUAL_P (base_binfo))
c0af329c 1239 /* A virtual base does not effect nearly emptiness. */
a201f10a 1240 ;
e6863ea0 1241 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
a201f10a 1242 {
1243 if (seen_non_virtual_nearly_empty_base_p)
1244 /* And if there is more than one nearly empty base, then the
1245 derived class is not nearly empty either. */
1246 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1247 else
c0af329c 1248 /* Remember we've seen one. */
a201f10a 1249 seen_non_virtual_nearly_empty_base_p = 1;
1250 }
1251 else if (!is_empty_class (basetype))
1252 /* If the base class is not empty or nearly empty, then this
1253 class cannot be nearly empty. */
1254 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
e6863ea0 1255
b8b24df5 1256 /* A lot of properties from the bases also apply to the derived
1257 class. */
471086d6 1258 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
9031d10b 1259 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
89e923d8 1260 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
9031d10b 1261 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
b8b24df5 1262 |= TYPE_HAS_COMPLEX_ASSIGN_REF (basetype);
3f7d79e4 1263 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (basetype);
1d6228f0 1264 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
9031d10b 1265 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t)
5671723d 1266 |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
b8b24df5 1267 }
1268}
1269
eea75c62 1270/* Determine all the primary bases within T. Sets BINFO_PRIMARY_BASE_P for
1271 those that are primaries. Sets BINFO_LOST_PRIMARY_P for those
1272 that have had a nearly-empty virtual primary base stolen by some
4a44ba29 1273 other base in the hierarchy. Determines CLASSTYPE_PRIMARY_BASE for
eea75c62 1274 T. */
59751e6c 1275
1276static void
eea75c62 1277determine_primary_bases (tree t)
59751e6c 1278{
eea75c62 1279 unsigned i;
1280 tree primary = NULL_TREE;
1281 tree type_binfo = TYPE_BINFO (t);
1282 tree base_binfo;
1283
1284 /* Determine the primary bases of our bases. */
1285 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1286 base_binfo = TREE_CHAIN (base_binfo))
59751e6c 1287 {
eea75c62 1288 tree primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (base_binfo));
59751e6c 1289
eea75c62 1290 /* See if we're the non-virtual primary of our inheritance
1291 chain. */
1292 if (!BINFO_VIRTUAL_P (base_binfo))
95f3173a 1293 {
eea75c62 1294 tree parent = BINFO_INHERITANCE_CHAIN (base_binfo);
1295 tree parent_primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (parent));
9031d10b 1296
eea75c62 1297 if (parent_primary
5e8d5ca1 1298 && SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo),
1299 BINFO_TYPE (parent_primary)))
eea75c62 1300 /* We are the primary binfo. */
1301 BINFO_PRIMARY_P (base_binfo) = 1;
1302 }
1303 /* Determine if we have a virtual primary base, and mark it so.
1304 */
1305 if (primary && BINFO_VIRTUAL_P (primary))
1306 {
1307 tree this_primary = copied_binfo (primary, base_binfo);
1308
1309 if (BINFO_PRIMARY_P (this_primary))
1310 /* Someone already claimed this base. */
1311 BINFO_LOST_PRIMARY_P (base_binfo) = 1;
1312 else
95f3173a 1313 {
eea75c62 1314 tree delta;
9031d10b 1315
eea75c62 1316 BINFO_PRIMARY_P (this_primary) = 1;
1317 BINFO_INHERITANCE_CHAIN (this_primary) = base_binfo;
9031d10b 1318
eea75c62 1319 /* A virtual binfo might have been copied from within
653e5405 1320 another hierarchy. As we're about to use it as a
1321 primary base, make sure the offsets match. */
eea75c62 1322 delta = size_diffop (convert (ssizetype,
1323 BINFO_OFFSET (base_binfo)),
1324 convert (ssizetype,
1325 BINFO_OFFSET (this_primary)));
9031d10b 1326
eea75c62 1327 propagate_binfo_offsets (this_primary, delta);
95f3173a 1328 }
1329 }
59751e6c 1330 }
d4898d1c 1331
eea75c62 1332 /* First look for a dynamic direct non-virtual base. */
f6cc6a08 1333 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, base_binfo); i++)
b8b24df5 1334 {
b8b24df5 1335 tree basetype = BINFO_TYPE (base_binfo);
a3fd53f0 1336
eea75c62 1337 if (TYPE_CONTAINS_VPTR_P (basetype) && !BINFO_VIRTUAL_P (base_binfo))
471086d6 1338 {
eea75c62 1339 primary = base_binfo;
1340 goto found;
d0ceae4d 1341 }
1342 }
d4898d1c 1343
5ad590ad 1344 /* A "nearly-empty" virtual base class can be the primary base
eea75c62 1345 class, if no non-virtual polymorphic base can be found. Look for
1346 a nearly-empty virtual dynamic base that is not already a primary
4a44ba29 1347 base of something in the hierarchy. If there is no such base,
eea75c62 1348 just pick the first nearly-empty virtual base. */
1349
1350 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1351 base_binfo = TREE_CHAIN (base_binfo))
1352 if (BINFO_VIRTUAL_P (base_binfo)
1353 && CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (base_binfo)))
1354 {
1355 if (!BINFO_PRIMARY_P (base_binfo))
1356 {
1357 /* Found one that is not primary. */
1358 primary = base_binfo;
1359 goto found;
1360 }
1361 else if (!primary)
1362 /* Remember the first candidate. */
1363 primary = base_binfo;
1364 }
9031d10b 1365
eea75c62 1366 found:
1367 /* If we've got a primary base, use it. */
1368 if (primary)
5e530cb0 1369 {
eea75c62 1370 tree basetype = BINFO_TYPE (primary);
9031d10b 1371
eea75c62 1372 CLASSTYPE_PRIMARY_BINFO (t) = primary;
1373 if (BINFO_PRIMARY_P (primary))
1374 /* We are stealing a primary base. */
1375 BINFO_LOST_PRIMARY_P (BINFO_INHERITANCE_CHAIN (primary)) = 1;
1376 BINFO_PRIMARY_P (primary) = 1;
1377 if (BINFO_VIRTUAL_P (primary))
5e530cb0 1378 {
eea75c62 1379 tree delta;
5e530cb0 1380
eea75c62 1381 BINFO_INHERITANCE_CHAIN (primary) = type_binfo;
1382 /* A virtual binfo might have been copied from within
653e5405 1383 another hierarchy. As we're about to use it as a primary
1384 base, make sure the offsets match. */
eea75c62 1385 delta = size_diffop (ssize_int (0),
1386 convert (ssizetype, BINFO_OFFSET (primary)));
9031d10b 1387
eea75c62 1388 propagate_binfo_offsets (primary, delta);
5e530cb0 1389 }
9031d10b 1390
eea75c62 1391 primary = TYPE_BINFO (basetype);
9031d10b 1392
eea75c62 1393 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1394 BINFO_VTABLE (type_binfo) = BINFO_VTABLE (primary);
1395 BINFO_VIRTUALS (type_binfo) = BINFO_VIRTUALS (primary);
5e530cb0 1396 }
471086d6 1397}
471086d6 1398\f
50e67742 1399/* Set memoizing fields and bits of T (and its variants) for later
1400 use. */
96624a9e 1401
471086d6 1402static void
45baea8b 1403finish_struct_bits (tree t)
471086d6 1404{
28c6e5cc 1405 tree variants;
9031d10b 1406
471086d6 1407 /* Fix up variants (if any). */
28c6e5cc 1408 for (variants = TYPE_NEXT_VARIANT (t);
1409 variants;
1410 variants = TYPE_NEXT_VARIANT (variants))
471086d6 1411 {
1412 /* These fields are in the _TYPE part of the node, not in
1413 the TYPE_LANG_SPECIFIC component, so they are not shared. */
1414 TYPE_HAS_CONSTRUCTOR (variants) = TYPE_HAS_CONSTRUCTOR (t);
471086d6 1415 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
9031d10b 1416 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
89e923d8 1417 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
471086d6 1418
1d6228f0 1419 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
9031d10b 1420
a6460bf1 1421 TYPE_BINFO (variants) = TYPE_BINFO (t);
1422
471086d6 1423 /* Copy whatever these are holding today. */
82bb2115 1424 TYPE_VFIELD (variants) = TYPE_VFIELD (t);
1425 TYPE_METHODS (variants) = TYPE_METHODS (t);
e857e9c7 1426 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
471086d6 1427 }
1428
f6cc6a08 1429 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t))
0937382c 1430 /* For a class w/o baseclasses, 'finish_struct' has set
1431 CLASSTYPE_PURE_VIRTUALS correctly (by definition).
b4a0d48d 1432 Similarly for a class whose base classes do not have vtables.
1433 When neither of these is true, we might have removed abstract
1434 virtuals (by providing a definition), added some (by declaring
1435 new ones), or redeclared ones from a base class. We need to
1436 recalculate what's really an abstract virtual at this point (by
1437 looking in the vtables). */
1438 get_pure_virtuals (t);
9031d10b 1439
b4a0d48d 1440 /* If this type has a copy constructor or a destructor, force its
1441 mode to be BLKmode, and force its TREE_ADDRESSABLE bit to be
1442 nonzero. This will cause it to be passed by invisible reference
1443 and prevent it from being returned in a register. */
965db4a0 1444 if (! TYPE_HAS_TRIVIAL_INIT_REF (t) || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
471086d6 1445 {
3f7d79e4 1446 tree variants;
b0df6589 1447 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
3f7d79e4 1448 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
471086d6 1449 {
1450 TYPE_MODE (variants) = BLKmode;
1451 TREE_ADDRESSABLE (variants) = 1;
471086d6 1452 }
1453 }
1454}
1455
45b83a06 1456/* Issue warnings about T having private constructors, but no friends,
9031d10b 1457 and so forth.
46c7925e 1458
45b83a06 1459 HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
1460 static members. HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
1461 non-private static member functions. */
1462
1463static void
45baea8b 1464maybe_warn_about_overly_private_class (tree t)
46c7925e 1465{
9e8c0a0f 1466 int has_member_fn = 0;
1467 int has_nonprivate_method = 0;
1468 tree fn;
1469
1470 if (!warn_ctor_dtor_privacy
45b83a06 1471 /* If the class has friends, those entities might create and
1472 access instances, so we should not warn. */
9e8c0a0f 1473 || (CLASSTYPE_FRIEND_CLASSES (t)
1474 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
45b83a06 1475 /* We will have warned when the template was declared; there's
1476 no need to warn on every instantiation. */
9e8c0a0f 1477 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
9031d10b 1478 /* There's no reason to even consider warning about this
9e8c0a0f 1479 class. */
1480 return;
9031d10b 1481
9e8c0a0f 1482 /* We only issue one warning, if more than one applies, because
1483 otherwise, on code like:
1484
1485 class A {
1486 // Oops - forgot `public:'
1487 A();
1488 A(const A&);
1489 ~A();
1490 };
1491
1492 we warn several times about essentially the same problem. */
1493
1494 /* Check to see if all (non-constructor, non-destructor) member
1495 functions are private. (Since there are no friends or
1496 non-private statics, we can't ever call any of the private member
1497 functions.) */
1498 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
1499 /* We're not interested in compiler-generated methods; they don't
1500 provide any way to call private members. */
9031d10b 1501 if (!DECL_ARTIFICIAL (fn))
9e8c0a0f 1502 {
1503 if (!TREE_PRIVATE (fn))
45b83a06 1504 {
9031d10b 1505 if (DECL_STATIC_FUNCTION_P (fn))
9e8c0a0f 1506 /* A non-private static member function is just like a
1507 friend; it can create and invoke private member
1508 functions, and be accessed without a class
1509 instance. */
1510 return;
9031d10b 1511
9e8c0a0f 1512 has_nonprivate_method = 1;
db0ec145 1513 /* Keep searching for a static member function. */
9e8c0a0f 1514 }
6528caf7 1515 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
9e8c0a0f 1516 has_member_fn = 1;
9031d10b 1517 }
46c7925e 1518
9031d10b 1519 if (!has_nonprivate_method && has_member_fn)
9e8c0a0f 1520 {
6528caf7 1521 /* There are no non-private methods, and there's at least one
1522 private member function that isn't a constructor or
1523 destructor. (If all the private members are
1524 constructors/destructors we want to use the code below that
1525 issues error messages specifically referring to
1526 constructors/destructors.) */
f6cc6a08 1527 unsigned i;
95f3173a 1528 tree binfo = TYPE_BINFO (t);
9031d10b 1529
f6cc6a08 1530 for (i = 0; i != BINFO_N_BASE_BINFOS (binfo); i++)
2cfde4f3 1531 if (BINFO_BASE_ACCESS (binfo, i) != access_private_node)
9e8c0a0f 1532 {
1533 has_nonprivate_method = 1;
1534 break;
1535 }
9031d10b 1536 if (!has_nonprivate_method)
45b83a06 1537 {
c0d4a023 1538 warning (OPT_Wctor_dtor_privacy,
074ab442 1539 "all member functions in class %qT are private", t);
9e8c0a0f 1540 return;
45b83a06 1541 }
9e8c0a0f 1542 }
46c7925e 1543
9e8c0a0f 1544 /* Even if some of the member functions are non-private, the class
1545 won't be useful for much if all the constructors or destructors
1546 are private: such an object can never be created or destroyed. */
ed36f1cf 1547 fn = CLASSTYPE_DESTRUCTORS (t);
1548 if (fn && TREE_PRIVATE (fn))
9e8c0a0f 1549 {
c0d4a023 1550 warning (OPT_Wctor_dtor_privacy,
074ab442 1551 "%q#T only defines a private destructor and has no friends",
b7d1e8ea 1552 t);
1553 return;
9e8c0a0f 1554 }
45b83a06 1555
e5d21846 1556 if (TYPE_HAS_CONSTRUCTOR (t)
1557 /* Implicitly generated constructors are always public. */
1558 && (!CLASSTYPE_LAZY_DEFAULT_CTOR (t)
1559 || !CLASSTYPE_LAZY_COPY_CTOR (t)))
9e8c0a0f 1560 {
1561 int nonprivate_ctor = 0;
9031d10b 1562
9e8c0a0f 1563 /* If a non-template class does not define a copy
1564 constructor, one is defined for it, enabling it to avoid
1565 this warning. For a template class, this does not
1566 happen, and so we would normally get a warning on:
45b83a06 1567
9031d10b 1568 template <class T> class C { private: C(); };
1569
9e8c0a0f 1570 To avoid this asymmetry, we check TYPE_HAS_INIT_REF. All
1571 complete non-template or fully instantiated classes have this
1572 flag set. */
1573 if (!TYPE_HAS_INIT_REF (t))
1574 nonprivate_ctor = 1;
9031d10b 1575 else
1576 for (fn = CLASSTYPE_CONSTRUCTORS (t); fn; fn = OVL_NEXT (fn))
9e8c0a0f 1577 {
1578 tree ctor = OVL_CURRENT (fn);
1579 /* Ideally, we wouldn't count copy constructors (or, in
1580 fact, any constructor that takes an argument of the
1581 class type as a parameter) because such things cannot
1582 be used to construct an instance of the class unless
1583 you already have one. But, for now at least, we're
1584 more generous. */
1585 if (! TREE_PRIVATE (ctor))
45b83a06 1586 {
9e8c0a0f 1587 nonprivate_ctor = 1;
1588 break;
45b83a06 1589 }
9e8c0a0f 1590 }
46c7925e 1591
9e8c0a0f 1592 if (nonprivate_ctor == 0)
1593 {
c0d4a023 1594 warning (OPT_Wctor_dtor_privacy,
074ab442 1595 "%q#T only defines private constructors and has no friends",
653e5405 1596 t);
9e8c0a0f 1597 return;
45b83a06 1598 }
1599 }
46c7925e 1600}
1601
573aba85 1602static struct {
1603 gt_pointer_operator new_value;
1604 void *cookie;
1605} resort_data;
1606
15eb8b2d 1607/* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
1608
1609static int
45baea8b 1610method_name_cmp (const void* m1_p, const void* m2_p)
15eb8b2d 1611{
cc52f165 1612 const tree *const m1 = (const tree *) m1_p;
1613 const tree *const m2 = (const tree *) m2_p;
9031d10b 1614
15eb8b2d 1615 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1616 return 0;
1617 if (*m1 == NULL_TREE)
1618 return -1;
1619 if (*m2 == NULL_TREE)
1620 return 1;
1621 if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
1622 return -1;
1623 return 1;
1624}
45b83a06 1625
573aba85 1626/* This routine compares two fields like method_name_cmp but using the
1627 pointer operator in resort_field_decl_data. */
1628
1629static int
45baea8b 1630resort_method_name_cmp (const void* m1_p, const void* m2_p)
573aba85 1631{
cc52f165 1632 const tree *const m1 = (const tree *) m1_p;
1633 const tree *const m2 = (const tree *) m2_p;
573aba85 1634 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1635 return 0;
1636 if (*m1 == NULL_TREE)
1637 return -1;
1638 if (*m2 == NULL_TREE)
1639 return 1;
1640 {
1641 tree d1 = DECL_NAME (OVL_CURRENT (*m1));
1642 tree d2 = DECL_NAME (OVL_CURRENT (*m2));
1643 resort_data.new_value (&d1, resort_data.cookie);
1644 resort_data.new_value (&d2, resort_data.cookie);
1645 if (d1 < d2)
1646 return -1;
1647 }
1648 return 1;
1649}
1650
1651/* Resort TYPE_METHOD_VEC because pointers have been reordered. */
1652
9031d10b 1653void
45baea8b 1654resort_type_method_vec (void* obj,
653e5405 1655 void* orig_obj ATTRIBUTE_UNUSED ,
1656 gt_pointer_operator new_value,
1657 void* cookie)
573aba85 1658{
046bfc77 1659 VEC(tree,gc) *method_vec = (VEC(tree,gc) *) obj;
de5ab3f1 1660 int len = VEC_length (tree, method_vec);
1661 size_t slot;
1662 tree fn;
573aba85 1663
1664 /* The type conversion ops have to live at the front of the vec, so we
1665 can't sort them. */
de5ab3f1 1666 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
930bdacf 1667 VEC_iterate (tree, method_vec, slot, fn);
de5ab3f1 1668 ++slot)
1669 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1670 break;
1671
573aba85 1672 if (len - slot > 1)
1673 {
1674 resort_data.new_value = new_value;
1675 resort_data.cookie = cookie;
de5ab3f1 1676 qsort (VEC_address (tree, method_vec) + slot, len - slot, sizeof (tree),
573aba85 1677 resort_method_name_cmp);
1678 }
1679}
1680
38d89ee9 1681/* Warn about duplicate methods in fn_fields.
471086d6 1682
7308eea2 1683 Sort methods that are not special (i.e., constructors, destructors,
1684 and type conversion operators) so that we can find them faster in
1685 search. */
471086d6 1686
45b83a06 1687static void
45baea8b 1688finish_struct_methods (tree t)
471086d6 1689{
45b83a06 1690 tree fn_fields;
046bfc77 1691 VEC(tree,gc) *method_vec;
9f6e8c5e 1692 int slot, len;
1693
9f6e8c5e 1694 method_vec = CLASSTYPE_METHOD_VEC (t);
1827796b 1695 if (!method_vec)
1696 return;
1697
de5ab3f1 1698 len = VEC_length (tree, method_vec);
471086d6 1699
38d89ee9 1700 /* Clear DECL_IN_AGGR_P for all functions. */
9031d10b 1701 for (fn_fields = TYPE_METHODS (t); fn_fields;
45b83a06 1702 fn_fields = TREE_CHAIN (fn_fields))
7308eea2 1703 DECL_IN_AGGR_P (fn_fields) = 0;
471086d6 1704
45b83a06 1705 /* Issue warnings about private constructors and such. If there are
1706 no methods, then some public defaults are generated. */
15eb8b2d 1707 maybe_warn_about_overly_private_class (t);
1708
15eb8b2d 1709 /* The type conversion ops have to live at the front of the vec, so we
1710 can't sort them. */
930bdacf 1711 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1712 VEC_iterate (tree, method_vec, slot, fn_fields);
de5ab3f1 1713 ++slot)
1714 if (!DECL_CONV_FN_P (OVL_CURRENT (fn_fields)))
1715 break;
15eb8b2d 1716 if (len - slot > 1)
de5ab3f1 1717 qsort (VEC_address (tree, method_vec) + slot,
1718 len-slot, sizeof (tree), method_name_cmp);
471086d6 1719}
1720
8458d888 1721/* Make BINFO's vtable have N entries, including RTTI entries,
d8febc9d 1722 vbase and vcall offsets, etc. Set its type and call the backend
1723 to lay it out. */
6beec4ad 1724
1725static void
45baea8b 1726layout_vtable_decl (tree binfo, int n)
6beec4ad 1727{
6beec4ad 1728 tree atype;
59751e6c 1729 tree vtable;
6beec4ad 1730
9031d10b 1731 atype = build_cplus_array_type (vtable_entry_type,
82ef7cb5 1732 build_index_type (size_int (n - 1)));
6beec4ad 1733 layout_type (atype);
1734
1735 /* We may have to grow the vtable. */
59751e6c 1736 vtable = get_vtbl_decl_for_binfo (binfo);
1737 if (!same_type_p (TREE_TYPE (vtable), atype))
6beec4ad 1738 {
b278476e 1739 TREE_TYPE (vtable) = atype;
59751e6c 1740 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
b278476e 1741 layout_decl (vtable, 0);
6beec4ad 1742 }
1743}
1744
cc1fb265 1745/* True iff FNDECL and BASE_FNDECL (both non-static member functions)
1746 have the same signature. */
5355cb60 1747
dcbeb3ef 1748int
45baea8b 1749same_signature_p (tree fndecl, tree base_fndecl)
5355cb60 1750{
6d0f8076 1751 /* One destructor overrides another if they are the same kind of
1752 destructor. */
1753 if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
1754 && special_function_p (base_fndecl) == special_function_p (fndecl))
f0b48940 1755 return 1;
6d0f8076 1756 /* But a non-destructor never overrides a destructor, nor vice
1757 versa, nor do different kinds of destructors override
1758 one-another. For example, a complete object destructor does not
1759 override a deleting destructor. */
7ac05dd7 1760 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
f0b48940 1761 return 0;
6d0f8076 1762
4b141b11 1763 if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)
1764 || (DECL_CONV_FN_P (fndecl)
1765 && DECL_CONV_FN_P (base_fndecl)
1766 && same_type_p (DECL_CONV_FN_TYPE (fndecl),
1767 DECL_CONV_FN_TYPE (base_fndecl))))
5355cb60 1768 {
f0b48940 1769 tree types, base_types;
f0b48940 1770 types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
1771 base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
1772 if ((TYPE_QUALS (TREE_TYPE (TREE_VALUE (base_types)))
1773 == TYPE_QUALS (TREE_TYPE (TREE_VALUE (types))))
1774 && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
1775 return 1;
5355cb60 1776 }
f0b48940 1777 return 0;
5355cb60 1778}
1779
ea723b38 1780/* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
1781 subobject. */
9031d10b 1782
ea723b38 1783static bool
1784base_derived_from (tree derived, tree base)
1785{
95f3173a 1786 tree probe;
1787
1788 for (probe = base; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
1789 {
1790 if (probe == derived)
1791 return true;
57c28194 1792 else if (BINFO_VIRTUAL_P (probe))
95f3173a 1793 /* If we meet a virtual base, we can't follow the inheritance
1794 any more. See if the complete type of DERIVED contains
1795 such a virtual base. */
97c118b9 1796 return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (derived))
1797 != NULL_TREE);
95f3173a 1798 }
1799 return false;
ea723b38 1800}
1801
f0b48940 1802typedef struct find_final_overrider_data_s {
1803 /* The function for which we are trying to find a final overrider. */
1804 tree fn;
1805 /* The base class in which the function was declared. */
1806 tree declaring_base;
ea723b38 1807 /* The candidate overriders. */
cca3a714 1808 tree candidates;
398b91ef 1809 /* Path to most derived. */
046bfc77 1810 VEC(tree,heap) *path;
f0b48940 1811} find_final_overrider_data;
d8febc9d 1812
5e0f4fd3 1813/* Add the overrider along the current path to FFOD->CANDIDATES.
1814 Returns true if an overrider was found; false otherwise. */
d8febc9d 1815
5e0f4fd3 1816static bool
9031d10b 1817dfs_find_final_overrider_1 (tree binfo,
398b91ef 1818 find_final_overrider_data *ffod,
1819 unsigned depth)
b0722fac 1820{
de160cce 1821 tree method;
1822
5e0f4fd3 1823 /* If BINFO is not the most derived type, try a more derived class.
1824 A definition there will overrider a definition here. */
398b91ef 1825 if (depth)
95f3173a 1826 {
398b91ef 1827 depth--;
1828 if (dfs_find_final_overrider_1
1829 (VEC_index (tree, ffod->path, depth), ffod, depth))
5e0f4fd3 1830 return true;
1831 }
95f3173a 1832
de160cce 1833 method = look_for_overrides_here (BINFO_TYPE (binfo), ffod->fn);
5e0f4fd3 1834 if (method)
1835 {
1836 tree *candidate = &ffod->candidates;
9031d10b 1837
5e0f4fd3 1838 /* Remove any candidates overridden by this new function. */
1839 while (*candidate)
d8febc9d 1840 {
5e0f4fd3 1841 /* If *CANDIDATE overrides METHOD, then METHOD
1842 cannot override anything else on the list. */
1843 if (base_derived_from (TREE_VALUE (*candidate), binfo))
1844 return true;
1845 /* If METHOD overrides *CANDIDATE, remove *CANDIDATE. */
1846 if (base_derived_from (binfo, TREE_VALUE (*candidate)))
1847 *candidate = TREE_CHAIN (*candidate);
95f3173a 1848 else
5e0f4fd3 1849 candidate = &TREE_CHAIN (*candidate);
fc475736 1850 }
9031d10b 1851
5e0f4fd3 1852 /* Add the new function. */
1853 ffod->candidates = tree_cons (method, binfo, ffod->candidates);
1854 return true;
95f3173a 1855 }
fc475736 1856
5e0f4fd3 1857 return false;
1858}
1859
1860/* Called from find_final_overrider via dfs_walk. */
1861
1862static tree
398b91ef 1863dfs_find_final_overrider_pre (tree binfo, void *data)
5e0f4fd3 1864{
1865 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1866
1867 if (binfo == ffod->declaring_base)
398b91ef 1868 dfs_find_final_overrider_1 (binfo, ffod, VEC_length (tree, ffod->path));
046bfc77 1869 VEC_safe_push (tree, heap, ffod->path, binfo);
5e0f4fd3 1870
95f3173a 1871 return NULL_TREE;
1872}
04a332ef 1873
95f3173a 1874static tree
398b91ef 1875dfs_find_final_overrider_post (tree binfo ATTRIBUTE_UNUSED, void *data)
95f3173a 1876{
95f3173a 1877 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
398b91ef 1878 VEC_pop (tree, ffod->path);
cca3a714 1879
b48d6271 1880 return NULL_TREE;
1881}
1882
fc475736 1883/* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
1884 FN and whose TREE_VALUE is the binfo for the base where the
e880f776 1885 overriding occurs. BINFO (in the hierarchy dominated by the binfo
1886 DERIVED) is the base object in which FN is declared. */
96624a9e 1887
f3ba5c6a 1888static tree
45baea8b 1889find_final_overrider (tree derived, tree binfo, tree fn)
f3ba5c6a 1890{
fc475736 1891 find_final_overrider_data ffod;
f3ba5c6a 1892
6c0cc2cd 1893 /* Getting this right is a little tricky. This is valid:
f3ba5c6a 1894
fc475736 1895 struct S { virtual void f (); };
1896 struct T { virtual void f (); };
1897 struct U : public S, public T { };
f3ba5c6a 1898
9031d10b 1899 even though calling `f' in `U' is ambiguous. But,
f3ba5c6a 1900
fc475736 1901 struct R { virtual void f(); };
1902 struct S : virtual public R { virtual void f (); };
1903 struct T : virtual public R { virtual void f (); };
1904 struct U : public S, public T { };
b48d6271 1905
70050b43 1906 is not -- there's no way to decide whether to put `S::f' or
9031d10b 1907 `T::f' in the vtable for `R'.
1908
fc475736 1909 The solution is to look at all paths to BINFO. If we find
1910 different overriders along any two, then there is a problem. */
71b1859a 1911 if (DECL_THUNK_P (fn))
1912 fn = THUNK_TARGET (fn);
5e0f4fd3 1913
1914 /* Determine the depth of the hierarchy. */
fc475736 1915 ffod.fn = fn;
1916 ffod.declaring_base = binfo;
cca3a714 1917 ffod.candidates = NULL_TREE;
046bfc77 1918 ffod.path = VEC_alloc (tree, heap, 30);
fc475736 1919
398b91ef 1920 dfs_walk_all (derived, dfs_find_final_overrider_pre,
1921 dfs_find_final_overrider_post, &ffod);
5e0f4fd3 1922
046bfc77 1923 VEC_free (tree, heap, ffod.path);
9031d10b 1924
cca3a714 1925 /* If there was no winner, issue an error message. */
ea723b38 1926 if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
22d4ab2c 1927 return error_mark_node;
b48d6271 1928
ea723b38 1929 return ffod.candidates;
f3ba5c6a 1930}
1931
6fc7a923 1932/* Return the index of the vcall offset for FN when TYPE is used as a
1933 virtual base. */
70050b43 1934
70050b43 1935static tree
6fc7a923 1936get_vcall_index (tree fn, tree type)
70050b43 1937{
046bfc77 1938 VEC(tree_pair_s,gc) *indices = CLASSTYPE_VCALL_INDICES (type);
26cbb959 1939 tree_pair_p p;
1940 unsigned ix;
70050b43 1941
26cbb959 1942 for (ix = 0; VEC_iterate (tree_pair_s, indices, ix, p); ix++)
1943 if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (p->purpose))
1944 || same_signature_p (fn, p->purpose))
1945 return p->value;
6fc7a923 1946
1947 /* There should always be an appropriate index. */
092b1d6f 1948 gcc_unreachable ();
70050b43 1949}
70050b43 1950
1951/* Update an entry in the vtable for BINFO, which is in the hierarchy
e18c26dd 1952 dominated by T. FN has been overridden in BINFO; VIRTUALS points to the
70050b43 1953 corresponding position in the BINFO_VIRTUALS list. */
f8732e3f 1954
1955static void
adcb03c7 1956update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
1957 unsigned ix)
f8732e3f 1958{
1959 tree b;
1960 tree overrider;
f8732e3f 1961 tree delta;
2b82dde2 1962 tree virtual_base;
70050b43 1963 tree first_defn;
1bf5bd08 1964 tree overrider_fn, overrider_target;
1965 tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
1966 tree over_return, base_return;
45d4608f 1967 bool lost = false;
f8732e3f 1968
70050b43 1969 /* Find the nearest primary base (possibly binfo itself) which defines
1970 this function; this is the class the caller will convert to when
1971 calling FN through BINFO. */
1972 for (b = binfo; ; b = get_primary_binfo (b))
f8732e3f 1973 {
b4df430b 1974 gcc_assert (b);
1bf5bd08 1975 if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
2b82dde2 1976 break;
45d4608f 1977
1978 /* The nearest definition is from a lost primary. */
1979 if (BINFO_LOST_PRIMARY_P (b))
1980 lost = true;
f8732e3f 1981 }
70050b43 1982 first_defn = b;
f8732e3f 1983
2b82dde2 1984 /* Find the final overrider. */
1bf5bd08 1985 overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
f8732e3f 1986 if (overrider == error_mark_node)
22d4ab2c 1987 {
1988 error ("no unique final overrider for %qD in %qT", target_fn, t);
1989 return;
1990 }
1bf5bd08 1991 overrider_target = overrider_fn = TREE_PURPOSE (overrider);
9031d10b 1992
6beb3f76 1993 /* Check for adjusting covariant return types. */
1bf5bd08 1994 over_return = TREE_TYPE (TREE_TYPE (overrider_target));
1995 base_return = TREE_TYPE (TREE_TYPE (target_fn));
9031d10b 1996
1bf5bd08 1997 if (POINTER_TYPE_P (over_return)
1998 && TREE_CODE (over_return) == TREE_CODE (base_return)
1999 && CLASS_TYPE_P (TREE_TYPE (over_return))
e36e7923 2000 && CLASS_TYPE_P (TREE_TYPE (base_return))
2001 /* If the overrider is invalid, don't even try. */
2002 && !DECL_INVALID_OVERRIDER_P (overrider_target))
1bf5bd08 2003 {
2004 /* If FN is a covariant thunk, we must figure out the adjustment
653e5405 2005 to the final base FN was converting to. As OVERRIDER_TARGET might
2006 also be converting to the return type of FN, we have to
2007 combine the two conversions here. */
1bf5bd08 2008 tree fixed_offset, virtual_offset;
79581672 2009
2010 over_return = TREE_TYPE (over_return);
2011 base_return = TREE_TYPE (base_return);
9031d10b 2012
1bf5bd08 2013 if (DECL_THUNK_P (fn))
2014 {
b4df430b 2015 gcc_assert (DECL_RESULT_THUNK_P (fn));
1bf5bd08 2016 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
2017 virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
1bf5bd08 2018 }
2019 else
2020 fixed_offset = virtual_offset = NULL_TREE;
805e22b2 2021
6709b660 2022 if (virtual_offset)
2023 /* Find the equivalent binfo within the return type of the
2024 overriding function. We will want the vbase offset from
2025 there. */
97c118b9 2026 virtual_offset = binfo_for_vbase (BINFO_TYPE (virtual_offset),
79581672 2027 over_return);
2028 else if (!same_type_ignoring_top_level_qualifiers_p
2029 (over_return, base_return))
1bf5bd08 2030 {
2031 /* There was no existing virtual thunk (which takes
79581672 2032 precedence). So find the binfo of the base function's
2033 return type within the overriding function's return type.
2034 We cannot call lookup base here, because we're inside a
2035 dfs_walk, and will therefore clobber the BINFO_MARKED
2036 flags. Fortunately we know the covariancy is valid (it
2037 has already been checked), so we can just iterate along
2038 the binfos, which have been chained in inheritance graph
2039 order. Of course it is lame that we have to repeat the
2040 search here anyway -- we should really be caching pieces
2041 of the vtable and avoiding this repeated work. */
2042 tree thunk_binfo, base_binfo;
2043
2044 /* Find the base binfo within the overriding function's
f05abcd9 2045 return type. We will always find a thunk_binfo, except
2046 when the covariancy is invalid (which we will have
2047 already diagnosed). */
79581672 2048 for (base_binfo = TYPE_BINFO (base_return),
2049 thunk_binfo = TYPE_BINFO (over_return);
f05abcd9 2050 thunk_binfo;
79581672 2051 thunk_binfo = TREE_CHAIN (thunk_binfo))
f05abcd9 2052 if (SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo),
2053 BINFO_TYPE (base_binfo)))
2054 break;
9031d10b 2055
79581672 2056 /* See if virtual inheritance is involved. */
2057 for (virtual_offset = thunk_binfo;
2058 virtual_offset;
2059 virtual_offset = BINFO_INHERITANCE_CHAIN (virtual_offset))
2060 if (BINFO_VIRTUAL_P (virtual_offset))
2061 break;
9031d10b 2062
f05abcd9 2063 if (virtual_offset
2064 || (thunk_binfo && !BINFO_OFFSET_ZEROP (thunk_binfo)))
1bf5bd08 2065 {
4880ab99 2066 tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
05927412 2067
79581672 2068 if (virtual_offset)
1bf5bd08 2069 {
79581672 2070 /* We convert via virtual base. Adjust the fixed
2071 offset to be from there. */
4880ab99 2072 offset = size_diffop
2073 (offset, convert
2074 (ssizetype, BINFO_OFFSET (virtual_offset)));
1bf5bd08 2075 }
2076 if (fixed_offset)
2077 /* There was an existing fixed offset, this must be
2078 from the base just converted to, and the base the
2079 FN was thunking to. */
2080 fixed_offset = size_binop (PLUS_EXPR, fixed_offset, offset);
2081 else
2082 fixed_offset = offset;
2083 }
2084 }
9031d10b 2085
1bf5bd08 2086 if (fixed_offset || virtual_offset)
2087 /* Replace the overriding function with a covariant thunk. We
2088 will emit the overriding function in its own slot as
6beb3f76 2089 well. */
1bf5bd08 2090 overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2091 fixed_offset, virtual_offset);
2092 }
2093 else
b4df430b 2094 gcc_assert (!DECL_THUNK_P (fn));
9031d10b 2095
2b82dde2 2096 /* Assume that we will produce a thunk that convert all the way to
2097 the final overrider, and not to an intermediate virtual base. */
6c6e3d32 2098 virtual_base = NULL_TREE;
2b82dde2 2099
45d4608f 2100 /* See if we can convert to an intermediate virtual base first, and then
5ad590ad 2101 use the vcall offset located there to finish the conversion. */
45d4608f 2102 for (; b; b = BINFO_INHERITANCE_CHAIN (b))
f8732e3f 2103 {
70050b43 2104 /* If we find the final overrider, then we can stop
2105 walking. */
5e8d5ca1 2106 if (SAME_BINFO_TYPE_P (BINFO_TYPE (b),
2107 BINFO_TYPE (TREE_VALUE (overrider))))
606b494c 2108 break;
2b82dde2 2109
70050b43 2110 /* If we find a virtual base, and we haven't yet found the
2111 overrider, then there is a virtual base between the
2112 declaring base (first_defn) and the final overrider. */
57c28194 2113 if (BINFO_VIRTUAL_P (b))
95f3173a 2114 {
2115 virtual_base = b;
2116 break;
2117 }
f8732e3f 2118 }
f8732e3f 2119
adcb03c7 2120 if (overrider_fn != overrider_target && !virtual_base)
2121 {
2122 /* The ABI specifies that a covariant thunk includes a mangling
653e5405 2123 for a this pointer adjustment. This-adjusting thunks that
2124 override a function from a virtual base have a vcall
2125 adjustment. When the virtual base in question is a primary
2126 virtual base, we know the adjustments are zero, (and in the
2127 non-covariant case, we would not use the thunk).
2128 Unfortunately we didn't notice this could happen, when
2129 designing the ABI and so never mandated that such a covariant
2130 thunk should be emitted. Because we must use the ABI mandated
2131 name, we must continue searching from the binfo where we
2132 found the most recent definition of the function, towards the
2133 primary binfo which first introduced the function into the
2134 vtable. If that enters a virtual base, we must use a vcall
2135 this-adjusting thunk. Bleah! */
4880ab99 2136 tree probe = first_defn;
2137
2138 while ((probe = get_primary_binfo (probe))
2139 && (unsigned) list_length (BINFO_VIRTUALS (probe)) > ix)
57c28194 2140 if (BINFO_VIRTUAL_P (probe))
4880ab99 2141 virtual_base = probe;
9031d10b 2142
adcb03c7 2143 if (virtual_base)
2144 /* Even if we find a virtual base, the correct delta is
2145 between the overrider and the binfo we're building a vtable
2146 for. */
2147 goto virtual_covariant;
2148 }
9031d10b 2149
70050b43 2150 /* Compute the constant adjustment to the `this' pointer. The
2151 `this' pointer, when this function is called, will point at BINFO
2152 (or one of its primary bases, which are at the same offset). */
2b82dde2 2153 if (virtual_base)
b4e2a4a6 2154 /* The `this' pointer needs to be adjusted from the declaration to
2155 the nearest virtual base. */
4880ab99 2156 delta = size_diffop (convert (ssizetype, BINFO_OFFSET (virtual_base)),
2157 convert (ssizetype, BINFO_OFFSET (first_defn)));
45d4608f 2158 else if (lost)
2159 /* If the nearest definition is in a lost primary, we don't need an
2160 entry in our vtable. Except possibly in a constructor vtable,
2161 if we happen to get our primary back. In that case, the offset
2162 will be zero, as it will be a primary base. */
2163 delta = size_zero_node;
f8732e3f 2164 else
6fc7a923 2165 /* The `this' pointer needs to be adjusted from pointing to
2166 BINFO to pointing at the base where the final overrider
2167 appears. */
adcb03c7 2168 virtual_covariant:
4880ab99 2169 delta = size_diffop (convert (ssizetype,
2170 BINFO_OFFSET (TREE_VALUE (overrider))),
2171 convert (ssizetype, BINFO_OFFSET (binfo)));
f8732e3f 2172
1bf5bd08 2173 modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
2b82dde2 2174
2175 if (virtual_base)
9031d10b 2176 BV_VCALL_INDEX (*virtuals)
1bf5bd08 2177 = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
55d0e950 2178 else
2179 BV_VCALL_INDEX (*virtuals) = NULL_TREE;
f8732e3f 2180}
2181
d4898d1c 2182/* Called from modify_all_vtables via dfs_walk. */
96624a9e 2183
d4898d1c 2184static tree
45baea8b 2185dfs_modify_vtables (tree binfo, void* data)
d4898d1c 2186{
4e88b09a 2187 tree t = (tree) data;
e6b62c39 2188 tree virtuals;
2189 tree old_virtuals;
2190 unsigned ix;
2191
2192 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2193 /* A base without a vtable needs no modification, and its bases
2194 are uninteresting. */
2195 return dfs_skip_bases;
9031d10b 2196
e6b62c39 2197 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t)
2198 && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2199 /* Don't do the primary vtable, if it's new. */
2200 return NULL_TREE;
2201
2202 if (BINFO_PRIMARY_P (binfo) && !BINFO_VIRTUAL_P (binfo))
2203 /* There's no need to modify the vtable for a non-virtual primary
2204 base; we're not going to use that vtable anyhow. We do still
2205 need to do this for virtual primary bases, as they could become
2206 non-primary in a construction vtable. */
2207 return NULL_TREE;
2208
2209 make_new_vtable (t, binfo);
9031d10b 2210
e6b62c39 2211 /* Now, go through each of the virtual functions in the virtual
2212 function table for BINFO. Find the final overrider, and update
2213 the BINFO_VIRTUALS list appropriately. */
2214 for (ix = 0, virtuals = BINFO_VIRTUALS (binfo),
2215 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2216 virtuals;
2217 ix++, virtuals = TREE_CHAIN (virtuals),
2218 old_virtuals = TREE_CHAIN (old_virtuals))
9031d10b 2219 update_vtable_entry_for_fn (t,
2220 binfo,
e6b62c39 2221 BV_FN (old_virtuals),
2222 &virtuals, ix);
d4898d1c 2223
d4898d1c 2224 return NULL_TREE;
2225}
2226
f676efd0 2227/* Update all of the primary and secondary vtables for T. Create new
2228 vtables as required, and initialize their RTTI information. Each
b746c8da 2229 of the functions in VIRTUALS is declared in T and may override a
2230 virtual function from a base class; find and modify the appropriate
2231 entries to point to the overriding functions. Returns a list, in
2232 declaration order, of the virtual functions that are declared in T,
2233 but do not appear in the primary base class vtable, and which
2234 should therefore be appended to the end of the vtable for T. */
f676efd0 2235
2236static tree
45baea8b 2237modify_all_vtables (tree t, tree virtuals)
d4898d1c 2238{
5ad590ad 2239 tree binfo = TYPE_BINFO (t);
2240 tree *fnsp;
f676efd0 2241
fc475736 2242 /* Update all of the vtables. */
e6b62c39 2243 dfs_walk_once (binfo, dfs_modify_vtables, NULL, t);
f676efd0 2244
b746c8da 2245 /* Add virtual functions not already in our primary vtable. These
2246 will be both those introduced by this class, and those overridden
2247 from secondary bases. It does not include virtuals merely
2248 inherited from secondary bases. */
2249 for (fnsp = &virtuals; *fnsp; )
f676efd0 2250 {
5ad590ad 2251 tree fn = TREE_VALUE (*fnsp);
f676efd0 2252
b746c8da 2253 if (!value_member (fn, BINFO_VIRTUALS (binfo))
2254 || DECL_VINDEX (fn) == error_mark_node)
f676efd0 2255 {
5ad590ad 2256 /* We don't need to adjust the `this' pointer when
2257 calling this function. */
2258 BV_DELTA (*fnsp) = integer_zero_node;
2259 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2260
b746c8da 2261 /* This is a function not already in our vtable. Keep it. */
5ad590ad 2262 fnsp = &TREE_CHAIN (*fnsp);
f676efd0 2263 }
5ad590ad 2264 else
2265 /* We've already got an entry for this function. Skip it. */
2266 *fnsp = TREE_CHAIN (*fnsp);
f676efd0 2267 }
c83788c9 2268
b746c8da 2269 return virtuals;
b0722fac 2270}
2271
abc8b85c 2272/* Get the base virtual function declarations in T that have the
2273 indicated NAME. */
96624a9e 2274
fc63a4fc 2275static tree
45baea8b 2276get_basefndecls (tree name, tree t)
63b1d638 2277{
abc8b85c 2278 tree methods;
63b1d638 2279 tree base_fndecls = NULL_TREE;
2cfde4f3 2280 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
abc8b85c 2281 int i;
63b1d638 2282
9e2f74d1 2283 /* Find virtual functions in T with the indicated NAME. */
2284 i = lookup_fnfields_1 (t, name);
2285 if (i != -1)
de5ab3f1 2286 for (methods = VEC_index (tree, CLASSTYPE_METHOD_VEC (t), i);
9e2f74d1 2287 methods;
2288 methods = OVL_NEXT (methods))
2289 {
2290 tree method = OVL_CURRENT (methods);
2291
2292 if (TREE_CODE (method) == FUNCTION_DECL
2293 && DECL_VINDEX (method))
2294 base_fndecls = tree_cons (NULL_TREE, method, base_fndecls);
2295 }
63b1d638 2296
2297 if (base_fndecls)
2298 return base_fndecls;
2299
2300 for (i = 0; i < n_baseclasses; i++)
2301 {
2cfde4f3 2302 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
abc8b85c 2303 base_fndecls = chainon (get_basefndecls (name, basetype),
63b1d638 2304 base_fndecls);
2305 }
2306
2307 return base_fndecls;
2308}
2309
de9554eb 2310/* If this declaration supersedes the declaration of
2311 a method declared virtual in the base class, then
2312 mark this field as being virtual as well. */
2313
ed36f1cf 2314void
45baea8b 2315check_for_override (tree decl, tree ctype)
de9554eb 2316{
4c481f71 2317 if (TREE_CODE (decl) == TEMPLATE_DECL)
2318 /* In [temp.mem] we have:
de9554eb 2319
653e5405 2320 A specialization of a member function template does not
2321 override a virtual function from a base class. */
4c481f71 2322 return;
2323 if ((DECL_DESTRUCTOR_P (decl)
4b141b11 2324 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2325 || DECL_CONV_FN_P (decl))
4c481f71 2326 && look_for_overrides (ctype, decl)
2327 && !DECL_STATIC_FUNCTION_P (decl))
b746c8da 2328 /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2329 the error_mark_node so that we know it is an overriding
2330 function. */
2331 DECL_VINDEX (decl) = decl;
2332
4c481f71 2333 if (DECL_VIRTUAL_P (decl))
de9554eb 2334 {
b746c8da 2335 if (!DECL_VINDEX (decl))
de9554eb 2336 DECL_VINDEX (decl) = error_mark_node;
2337 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
d7db2b38 2338 if (DECL_DLLIMPORT_P (decl))
2339 {
2340 /* When we handled the dllimport attribute we may not have known
2341 that this function is virtual We can't use dllimport
2342 semantics for a virtual method because we need to initialize
2343 the vtable entry with a constant address. */
2344 DECL_DLLIMPORT_P (decl) = 0;
2345 DECL_ATTRIBUTES (decl)
2346 = remove_attribute ("dllimport", DECL_ATTRIBUTES (decl));
2347 }
de9554eb 2348 }
2349}
2350
d2a15a12 2351/* Warn about hidden virtual functions that are not overridden in t.
2352 We know that constructors and destructors don't apply. */
96624a9e 2353
05458f58 2354static void
45baea8b 2355warn_hidden (tree t)
63b1d638 2356{
046bfc77 2357 VEC(tree,gc) *method_vec = CLASSTYPE_METHOD_VEC (t);
de5ab3f1 2358 tree fns;
2359 size_t i;
63b1d638 2360
2361 /* We go through each separately named virtual function. */
9031d10b 2362 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
930bdacf 2363 VEC_iterate (tree, method_vec, i, fns);
de5ab3f1 2364 ++i)
63b1d638 2365 {
de5ab3f1 2366 tree fn;
abc8b85c 2367 tree name;
2368 tree fndecl;
2369 tree base_fndecls;
f6cc6a08 2370 tree base_binfo;
2371 tree binfo;
abc8b85c 2372 int j;
2373
2374 /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2375 have the same name. Figure out what name that is. */
de5ab3f1 2376 name = DECL_NAME (OVL_CURRENT (fns));
abc8b85c 2377 /* There are no possibly hidden functions yet. */
2378 base_fndecls = NULL_TREE;
2379 /* Iterate through all of the base classes looking for possibly
2380 hidden functions. */
f6cc6a08 2381 for (binfo = TYPE_BINFO (t), j = 0;
2382 BINFO_BASE_ITERATE (binfo, j, base_binfo); j++)
2bcf86b1 2383 {
f6cc6a08 2384 tree basetype = BINFO_TYPE (base_binfo);
abc8b85c 2385 base_fndecls = chainon (get_basefndecls (name, basetype),
2386 base_fndecls);
2bcf86b1 2387 }
2388
c0af329c 2389 /* If there are no functions to hide, continue. */
abc8b85c 2390 if (!base_fndecls)
63b1d638 2391 continue;
2392
c0af329c 2393 /* Remove any overridden functions. */
de5ab3f1 2394 for (fn = fns; fn; fn = OVL_NEXT (fn))
63b1d638 2395 {
de5ab3f1 2396 fndecl = OVL_CURRENT (fn);
abc8b85c 2397 if (DECL_VINDEX (fndecl))
2398 {
2399 tree *prev = &base_fndecls;
9031d10b 2400
2401 while (*prev)
abc8b85c 2402 /* If the method from the base class has the same
2403 signature as the method from the derived class, it
2404 has been overridden. */
2405 if (same_signature_p (fndecl, TREE_VALUE (*prev)))
2406 *prev = TREE_CHAIN (*prev);
2407 else
2408 prev = &TREE_CHAIN (*prev);
2409 }
63b1d638 2410 }
2411
63b1d638 2412 /* Now give a warning for all base functions without overriders,
2413 as they are hidden. */
9031d10b 2414 while (base_fndecls)
abc8b85c 2415 {
2416 /* Here we know it is a hider, and no overrider exists. */
3cf8b391 2417 warning (0, "%q+D was hidden", TREE_VALUE (base_fndecls));
2418 warning (0, " by %q+D", fns);
abc8b85c 2419 base_fndecls = TREE_CHAIN (base_fndecls);
2420 }
63b1d638 2421 }
2422}
2423
2424/* Check for things that are invalid. There are probably plenty of other
2425 things we should check for also. */
96624a9e 2426
63b1d638 2427static void
45baea8b 2428finish_struct_anon (tree t)
63b1d638 2429{
2430 tree field;
15eb8b2d 2431
63b1d638 2432 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
2433 {
2434 if (TREE_STATIC (field))
2435 continue;
2436 if (TREE_CODE (field) != FIELD_DECL)
2437 continue;
2438
2439 if (DECL_NAME (field) == NULL_TREE
128e1d72 2440 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
63b1d638 2441 {
15eb8b2d 2442 tree elt = TYPE_FIELDS (TREE_TYPE (field));
2443 for (; elt; elt = TREE_CHAIN (elt))
63b1d638 2444 {
3a1fbde8 2445 /* We're generally only interested in entities the user
2446 declared, but we also find nested classes by noticing
2447 the TYPE_DECL that we create implicitly. You're
2448 allowed to put one anonymous union inside another,
82fdf3bf 2449 though, so we explicitly tolerate that. We use
2450 TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
2451 we also allow unnamed types used for defining fields. */
9031d10b 2452 if (DECL_ARTIFICIAL (elt)
3a1fbde8 2453 && (!DECL_IMPLICIT_TYPEDEF_P (elt)
82fdf3bf 2454 || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
63b1d638 2455 continue;
2456
15eb8b2d 2457 if (TREE_CODE (elt) != FIELD_DECL)
6b0303ff 2458 {
3cf8b391 2459 pedwarn ("%q+#D invalid; an anonymous union can "
2460 "only have non-static data members", elt);
6b0303ff 2461 continue;
2462 }
2463
15eb8b2d 2464 if (TREE_PRIVATE (elt))
3cf8b391 2465 pedwarn ("private member %q+#D in anonymous union", elt);
15eb8b2d 2466 else if (TREE_PROTECTED (elt))
3cf8b391 2467 pedwarn ("protected member %q+#D in anonymous union", elt);
d2a15a12 2468
15eb8b2d 2469 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
2470 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
63b1d638 2471 }
2472 }
2473 }
2474}
2475
7a40f9b7 2476/* Add T to CLASSTYPE_DECL_LIST of current_class_type which
2477 will be used later during class template instantiation.
2478 When FRIEND_P is zero, T can be a static member data (VAR_DECL),
2479 a non-static member data (FIELD_DECL), a member function
9031d10b 2480 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
7a40f9b7 2481 a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
2482 When FRIEND_P is nonzero, T is either a friend class
2483 (RECORD_TYPE, TEMPLATE_DECL) or a friend function
2484 (FUNCTION_DECL, TEMPLATE_DECL). */
2485
2486void
45baea8b 2487maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
7a40f9b7 2488{
2489 /* Save some memory by not creating TREE_LIST if TYPE is not template. */
2490 if (CLASSTYPE_TEMPLATE_INFO (type))
2491 CLASSTYPE_DECL_LIST (type)
2492 = tree_cons (friend_p ? NULL_TREE : type,
2493 t, CLASSTYPE_DECL_LIST (type));
2494}
2495
0f2952a1 2496/* Create default constructors, assignment operators, and so forth for
64fcba70 2497 the type indicated by T, if they are needed. CANT_HAVE_CONST_CTOR,
2498 and CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason,
2499 the class cannot have a default constructor, copy constructor
2500 taking a const reference argument, or an assignment operator taking
2501 a const reference, respectively. */
0f2952a1 2502
8fb1488c 2503static void
9031d10b 2504add_implicitly_declared_members (tree t,
45baea8b 2505 int cant_have_const_cctor,
2506 int cant_have_const_assignment)
0f2952a1 2507{
0f2952a1 2508 /* Destructor. */
ed36f1cf 2509 if (!CLASSTYPE_DESTRUCTORS (t))
0f2952a1 2510 {
ed36f1cf 2511 /* In general, we create destructors lazily. */
2512 CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
2513 /* However, if the implicit destructor is non-trivial
2514 destructor, we sometimes have to create it at this point. */
2515 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
2516 {
2517 bool lazy_p = true;
0f2952a1 2518
ed36f1cf 2519 if (TYPE_FOR_JAVA (t))
2520 /* If this a Java class, any non-trivial destructor is
2521 invalid, even if compiler-generated. Therefore, if the
2522 destructor is non-trivial we create it now. */
2523 lazy_p = false;
2524 else
2525 {
2526 tree binfo;
2527 tree base_binfo;
2528 int ix;
2529
2530 /* If the implicit destructor will be virtual, then we must
2531 generate it now because (unfortunately) we do not
2532 generate virtual tables lazily. */
2533 binfo = TYPE_BINFO (t);
2534 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
2535 {
2536 tree base_type;
2537 tree dtor;
2538
2539 base_type = BINFO_TYPE (base_binfo);
2540 dtor = CLASSTYPE_DESTRUCTORS (base_type);
2541 if (dtor && DECL_VIRTUAL_P (dtor))
2542 {
2543 lazy_p = false;
2544 break;
2545 }
2546 }
2547 }
2548
2549 /* If we can't get away with being lazy, generate the destructor
9031d10b 2550 now. */
ed36f1cf 2551 if (!lazy_p)
2552 lazily_declare_fn (sfk_destructor, t);
2553 }
0f2952a1 2554 }
0f2952a1 2555
2556 /* Default constructor. */
64fcba70 2557 if (! TYPE_HAS_CONSTRUCTOR (t))
0f2952a1 2558 {
1827796b 2559 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 1;
2560 CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 1;
0f2952a1 2561 }
2562
2563 /* Copy constructor. */
771665d8 2564 if (! TYPE_HAS_INIT_REF (t) && ! TYPE_FOR_JAVA (t))
0f2952a1 2565 {
1827796b 2566 TYPE_HAS_INIT_REF (t) = 1;
2567 TYPE_HAS_CONST_INIT_REF (t) = !cant_have_const_cctor;
2568 CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
2569 TYPE_HAS_CONSTRUCTOR (t) = 1;
0f2952a1 2570 }
2571
de5ab3f1 2572 /* If there is no assignment operator, one will be created if and
2573 when it is needed. For now, just record whether or not the type
2574 of the parameter to the assignment operator will be a const or
2575 non-const reference. */
2576 if (!TYPE_HAS_ASSIGN_REF (t) && !TYPE_FOR_JAVA (t))
2967f654 2577 {
2578 TYPE_HAS_ASSIGN_REF (t) = 1;
2579 TYPE_HAS_CONST_ASSIGN_REF (t) = !cant_have_const_assignment;
2580 CLASSTYPE_LAZY_ASSIGNMENT_OP (t) = 1;
2581 }
0f2952a1 2582}
2583
15eb8b2d 2584/* Subroutine of finish_struct_1. Recursively count the number of fields
2585 in TYPE, including anonymous union members. */
2586
2587static int
45baea8b 2588count_fields (tree fields)
15eb8b2d 2589{
2590 tree x;
2591 int n_fields = 0;
2592 for (x = fields; x; x = TREE_CHAIN (x))
2593 {
2594 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2595 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
2596 else
2597 n_fields += 1;
2598 }
2599 return n_fields;
2600}
2601
2602/* Subroutine of finish_struct_1. Recursively add all the fields in the
860251be 2603 TREE_LIST FIELDS to the SORTED_FIELDS_TYPE elts, starting at offset IDX. */
15eb8b2d 2604
2605static int
860251be 2606add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
15eb8b2d 2607{
2608 tree x;
2609 for (x = fields; x; x = TREE_CHAIN (x))
2610 {
2611 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
860251be 2612 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
15eb8b2d 2613 else
860251be 2614 field_vec->elts[idx++] = x;
15eb8b2d 2615 }
2616 return idx;
2617}
2618
5c035e5d 2619/* FIELD is a bit-field. We are finishing the processing for its
2620 enclosing type. Issue any appropriate messages and set appropriate
2621 flags. */
2622
2623static void
45baea8b 2624check_bitfield_decl (tree field)
5c035e5d 2625{
2626 tree type = TREE_TYPE (field);
f5ecb8bd 2627 tree w;
2628
2629 /* Extract the declared width of the bitfield, which has been
2630 temporarily stashed in DECL_INITIAL. */
2631 w = DECL_INITIAL (field);
074ab442 2632 gcc_assert (w != NULL_TREE);
f5ecb8bd 2633 /* Remove the bit-field width indicator so that the rest of the
2634 compiler does not treat that value as an initializer. */
2635 DECL_INITIAL (field) = NULL_TREE;
5c035e5d 2636
ad63a0fc 2637 /* Detect invalid bit-field type. */
f5ecb8bd 2638 if (!INTEGRAL_TYPE_P (type))
5c035e5d 2639 {
3cf8b391 2640 error ("bit-field %q+#D with non-integral type", field);
f5ecb8bd 2641 TREE_TYPE (field) = error_mark_node;
ad63a0fc 2642 w = error_mark_node;
5c035e5d 2643 }
f5ecb8bd 2644 else
5c035e5d 2645 {
5c035e5d 2646 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
2647 STRIP_NOPS (w);
2648
2649 /* detect invalid field size. */
13f0eb20 2650 w = integral_constant_value (w);
5c035e5d 2651
2652 if (TREE_CODE (w) != INTEGER_CST)
2653 {
3cf8b391 2654 error ("bit-field %q+D width not an integer constant", field);
ad63a0fc 2655 w = error_mark_node;
5c035e5d 2656 }
a0c2c45b 2657 else if (tree_int_cst_sgn (w) < 0)
5c035e5d 2658 {
3cf8b391 2659 error ("negative width in bit-field %q+D", field);
ad63a0fc 2660 w = error_mark_node;
5c035e5d 2661 }
a0c2c45b 2662 else if (integer_zerop (w) && DECL_NAME (field) != 0)
5c035e5d 2663 {
3cf8b391 2664 error ("zero width for bit-field %q+D", field);
ad63a0fc 2665 w = error_mark_node;
5c035e5d 2666 }
a0c2c45b 2667 else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
5c035e5d 2668 && TREE_CODE (type) != ENUMERAL_TYPE
2669 && TREE_CODE (type) != BOOLEAN_TYPE)
3cf8b391 2670 warning (0, "width of %q+D exceeds its type", field);
5c035e5d 2671 else if (TREE_CODE (type) == ENUMERAL_TYPE
a0c2c45b 2672 && (0 > compare_tree_int (w,
2673 min_precision (TYPE_MIN_VALUE (type),
78a8ed03 2674 TYPE_UNSIGNED (type)))
a0c2c45b 2675 || 0 > compare_tree_int (w,
2676 min_precision
2677 (TYPE_MAX_VALUE (type),
78a8ed03 2678 TYPE_UNSIGNED (type)))))
3cf8b391 2679 warning (0, "%q+D is too small to hold all values of %q#T", field, type);
ad63a0fc 2680 }
9031d10b 2681
ad63a0fc 2682 if (w != error_mark_node)
2683 {
2684 DECL_SIZE (field) = convert (bitsizetype, w);
2685 DECL_BIT_FIELD (field) = 1;
5c035e5d 2686 }
2687 else
ad63a0fc 2688 {
2689 /* Non-bit-fields are aligned for their type. */
2690 DECL_BIT_FIELD (field) = 0;
2691 CLEAR_DECL_C_BIT_FIELD (field);
ad63a0fc 2692 }
5c035e5d 2693}
2694
2695/* FIELD is a non bit-field. We are finishing the processing for its
2696 enclosing type T. Issue any appropriate messages and set appropriate
2697 flags. */
2698
2699static void
45baea8b 2700check_field_decl (tree field,
653e5405 2701 tree t,
2702 int* cant_have_const_ctor,
2703 int* no_const_asn_ref,
45baea8b 2704 int* any_default_members)
5c035e5d 2705{
2706 tree type = strip_array_types (TREE_TYPE (field));
2707
2708 /* An anonymous union cannot contain any fields which would change
2709 the settings of CANT_HAVE_CONST_CTOR and friends. */
2710 if (ANON_UNION_TYPE_P (type))
2711 ;
2712 /* And, we don't set TYPE_HAS_CONST_INIT_REF, etc., for anonymous
2713 structs. So, we recurse through their fields here. */
2714 else if (ANON_AGGR_TYPE_P (type))
2715 {
2716 tree fields;
2717
2718 for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
b8e0d419 2719 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
5c035e5d 2720 check_field_decl (fields, t, cant_have_const_ctor,
64fcba70 2721 no_const_asn_ref, any_default_members);
5c035e5d 2722 }
2723 /* Check members with class type for constructors, destructors,
2724 etc. */
2725 else if (CLASS_TYPE_P (type))
2726 {
2727 /* Never let anything with uninheritable virtuals
2728 make it through without complaint. */
2729 abstract_virtuals_error (field, type);
9031d10b 2730
5c035e5d 2731 if (TREE_CODE (t) == UNION_TYPE)
2732 {
2733 if (TYPE_NEEDS_CONSTRUCTING (type))
3cf8b391 2734 error ("member %q+#D with constructor not allowed in union",
2735 field);
89e923d8 2736 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3cf8b391 2737 error ("member %q+#D with destructor not allowed in union", field);
5c035e5d 2738 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3cf8b391 2739 error ("member %q+#D with copy assignment operator not allowed in union",
2740 field);
5c035e5d 2741 }
2742 else
2743 {
2744 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
9031d10b 2745 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
89e923d8 2746 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
5c035e5d 2747 TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_HAS_COMPLEX_ASSIGN_REF (type);
2748 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (type);
2749 }
2750
2751 if (!TYPE_HAS_CONST_INIT_REF (type))
2752 *cant_have_const_ctor = 1;
2753
2754 if (!TYPE_HAS_CONST_ASSIGN_REF (type))
2755 *no_const_asn_ref = 1;
5c035e5d 2756 }
2757 if (DECL_INITIAL (field) != NULL_TREE)
2758 {
2759 /* `build_class_init_list' does not recognize
2760 non-FIELD_DECLs. */
2761 if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
8a443577 2762 error ("multiple fields in union %qT initialized", t);
5c035e5d 2763 *any_default_members = 1;
2764 }
d38a9387 2765}
5c035e5d 2766
9b3f19c6 2767/* Check the data members (both static and non-static), class-scoped
2768 typedefs, etc., appearing in the declaration of T. Issue
2769 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
2770 declaration order) of access declarations; each TREE_VALUE in this
2771 list is a USING_DECL.
471086d6 2772
9b3f19c6 2773 In addition, set the following flags:
471086d6 2774
9b3f19c6 2775 EMPTY_P
2776 The class is empty, i.e., contains no non-static data members.
471086d6 2777
9b3f19c6 2778 CANT_HAVE_CONST_CTOR_P
2779 This class cannot have an implicitly generated copy constructor
2780 taking a const reference.
471086d6 2781
9b3f19c6 2782 CANT_HAVE_CONST_ASN_REF
2783 This class cannot have an implicitly generated assignment
2784 operator taking a const reference.
471086d6 2785
9b3f19c6 2786 All of these flags should be initialized before calling this
2787 function.
471086d6 2788
9b3f19c6 2789 Returns a pointer to the end of the TYPE_FIELDs chain; additional
2790 fields can be added by adding to this chain. */
471086d6 2791
b8b24df5 2792static void
14786872 2793check_field_decls (tree t, tree *access_decls,
14786872 2794 int *cant_have_const_ctor_p,
2795 int *no_const_asn_ref_p)
9b3f19c6 2796{
2797 tree *field;
2798 tree *next;
bd04d3e4 2799 bool has_pointers;
9b3f19c6 2800 int any_default_members;
4010b92a 2801 int cant_pack = 0;
9b3f19c6 2802
2803 /* Assume there are no access declarations. */
2804 *access_decls = NULL_TREE;
2805 /* Assume this class has no pointer members. */
bd04d3e4 2806 has_pointers = false;
9b3f19c6 2807 /* Assume none of the members of this class have default
2808 initializations. */
2809 any_default_members = 0;
2810
2811 for (field = &TYPE_FIELDS (t); *field; field = next)
471086d6 2812 {
9b3f19c6 2813 tree x = *field;
2814 tree type = TREE_TYPE (x);
471086d6 2815
9b3f19c6 2816 next = &TREE_CHAIN (x);
471086d6 2817
fff5e605 2818 if (TREE_CODE (x) == USING_DECL)
ce28ee2e 2819 {
9b3f19c6 2820 /* Prune the access declaration from the list of fields. */
2821 *field = TREE_CHAIN (x);
2822
2823 /* Save the access declarations for our caller. */
2824 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
2825
2826 /* Since we've reset *FIELD there's no reason to skip to the
2827 next field. */
2828 next = field;
ce28ee2e 2829 continue;
2830 }
471086d6 2831
c906a2a7 2832 if (TREE_CODE (x) == TYPE_DECL
2833 || TREE_CODE (x) == TEMPLATE_DECL)
ce28ee2e 2834 continue;
471086d6 2835
ce28ee2e 2836 /* If we've gotten this far, it's a data member, possibly static,
96624a9e 2837 or an enumerator. */
b8e0d419 2838 DECL_CONTEXT (x) = t;
471086d6 2839
28bbd27a 2840 /* When this goes into scope, it will be a non-local reference. */
2841 DECL_NONLOCAL (x) = 1;
2842
2843 if (TREE_CODE (t) == UNION_TYPE)
2844 {
2845 /* [class.union]
2846
2847 If a union contains a static data member, or a member of
7677ebb9 2848 reference type, the program is ill-formed. */
28bbd27a 2849 if (TREE_CODE (x) == VAR_DECL)
2850 {
3cf8b391 2851 error ("%q+D may not be static because it is a member of a union", x);
28bbd27a 2852 continue;
2853 }
2854 if (TREE_CODE (type) == REFERENCE_TYPE)
2855 {
3cf8b391 2856 error ("%q+D may not have reference type %qT because"
2857 " it is a member of a union",
2858 x, type);
28bbd27a 2859 continue;
2860 }
2861 }
2862
ce28ee2e 2863 /* Perform error checking that did not get done in
2864 grokdeclarator. */
e36e96ee 2865 if (TREE_CODE (type) == FUNCTION_TYPE)
ce28ee2e 2866 {
3cf8b391 2867 error ("field %q+D invalidly declared function type", x);
e36e96ee 2868 type = build_pointer_type (type);
2869 TREE_TYPE (x) = type;
ce28ee2e 2870 }
e36e96ee 2871 else if (TREE_CODE (type) == METHOD_TYPE)
ce28ee2e 2872 {
3cf8b391 2873 error ("field %q+D invalidly declared method type", x);
e36e96ee 2874 type = build_pointer_type (type);
2875 TREE_TYPE (x) = type;
ce28ee2e 2876 }
471086d6 2877
e36e96ee 2878 if (type == error_mark_node)
ce28ee2e 2879 continue;
9031d10b 2880
28bbd27a 2881 if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL)
91caa6ca 2882 continue;
471086d6 2883
ce28ee2e 2884 /* Now it can only be a FIELD_DECL. */
471086d6 2885
ce28ee2e 2886 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
9b3f19c6 2887 CLASSTYPE_NON_AGGREGATE (t) = 1;
471086d6 2888
ce28ee2e 2889 /* If this is of reference type, check if it needs an init.
2890 Also do a little ANSI jig if necessary. */
e36e96ee 2891 if (TREE_CODE (type) == REFERENCE_TYPE)
653e5405 2892 {
9b3f19c6 2893 CLASSTYPE_NON_POD_P (t) = 1;
ce28ee2e 2894 if (DECL_INITIAL (x) == NULL_TREE)
b7151a8b 2895 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
471086d6 2896
ce28ee2e 2897 /* ARM $12.6.2: [A member initializer list] (or, for an
2898 aggregate, initialization by a brace-enclosed list) is the
2899 only way to initialize nonstatic const and reference
2900 members. */
1ad432f2 2901 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
ce28ee2e 2902
b6bc0551 2903 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2904 && extra_warnings)
ced7c954 2905 warning (OPT_Wextra, "non-static reference %q+#D in class without a constructor", x);
ce28ee2e 2906 }
471086d6 2907
5c035e5d 2908 type = strip_array_types (type);
bd04d3e4 2909
2bc7da70 2910 if (TYPE_PACKED (t))
2911 {
2912 if (!pod_type_p (type) && !TYPE_PACKED (type))
adb8ba10 2913 {
2914 warning
2915 (0,
2916 "ignoring packed attribute because of unpacked non-POD field %q+#D",
2917 x);
4010b92a 2918 cant_pack = 1;
adb8ba10 2919 }
2bc7da70 2920 else if (TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
2921 DECL_PACKED (x) = 1;
2922 }
2923
2924 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
2925 /* We don't treat zero-width bitfields as making a class
2926 non-empty. */
2927 ;
2928 else
2929 {
2930 /* The class is non-empty. */
2931 CLASSTYPE_EMPTY_P (t) = 0;
2932 /* The class is not even nearly empty. */
2933 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
2934 /* If one of the data members contains an empty class,
2935 so does T. */
2936 if (CLASS_TYPE_P (type)
2937 && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
2938 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
2939 }
2940
bd04d3e4 2941 /* This is used by -Weffc++ (see below). Warn only for pointers
2942 to members which might hold dynamic memory. So do not warn
2943 for pointers to functions or pointers to members. */
2944 if (TYPE_PTR_P (type)
2945 && !TYPE_PTRFN_P (type)
2946 && !TYPE_PTR_TO_MEMBER_P (type))
2947 has_pointers = true;
02d7f858 2948
28bbd27a 2949 if (CLASS_TYPE_P (type))
2950 {
2951 if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
2952 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
2953 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
2954 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
2955 }
2956
e36e96ee 2957 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
9b3f19c6 2958 CLASSTYPE_HAS_MUTABLE (t) = 1;
6f9b1420 2959
a7c16e55 2960 if (! pod_type_p (type))
653e5405 2961 /* DR 148 now allows pointers to members (which are POD themselves),
2962 to be allowed in POD structs. */
9b3f19c6 2963 CLASSTYPE_NON_POD_P (t) = 1;
e36e96ee 2964
e63bd8ae 2965 if (! zero_init_p (type))
2966 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
2967
ce28ee2e 2968 /* If any field is const, the structure type is pseudo-const. */
e36e96ee 2969 if (CP_TYPE_CONST_P (type))
ce28ee2e 2970 {
2971 C_TYPE_FIELDS_READONLY (t) = 1;
2972 if (DECL_INITIAL (x) == NULL_TREE)
b7151a8b 2973 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
ce28ee2e 2974
2975 /* ARM $12.6.2: [A member initializer list] (or, for an
2976 aggregate, initialization by a brace-enclosed list) is the
2977 only way to initialize nonstatic const and reference
2978 members. */
1ad432f2 2979 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
ce28ee2e 2980
b6bc0551 2981 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2982 && extra_warnings)
ced7c954 2983 warning (OPT_Wextra, "non-static const member %q+#D in class without a constructor", x);
ce28ee2e 2984 }
9b3f19c6 2985 /* A field that is pseudo-const makes the structure likewise. */
7f77d1f0 2986 else if (CLASS_TYPE_P (type))
ce28ee2e 2987 {
9b3f19c6 2988 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
b7151a8b 2989 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
2990 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
2991 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
ce28ee2e 2992 }
471086d6 2993
f532d265 2994 /* Core issue 80: A nonstatic data member is required to have a
2995 different name from the class iff the class has a
2996 user-defined constructor. */
e8d95fdc 2997 if (constructor_name_p (DECL_NAME (x), t) && TYPE_HAS_CONSTRUCTOR (t))
3cf8b391 2998 pedwarn ("field %q+#D with same name as class", x);
f532d265 2999
15e55420 3000 /* We set DECL_C_BIT_FIELD in grokbitfield.
3001 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
3002 if (DECL_C_BIT_FIELD (x))
5c035e5d 3003 check_bitfield_decl (x);
ce28ee2e 3004 else
5c035e5d 3005 check_field_decl (x, t,
9b3f19c6 3006 cant_have_const_ctor_p,
9b3f19c6 3007 no_const_asn_ref_p,
5c035e5d 3008 &any_default_members);
471086d6 3009 }
3010
bd04d3e4 3011 /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
3012 it should also define a copy constructor and an assignment operator to
3013 implement the correct copy semantic (deep vs shallow, etc.). As it is
3014 not feasible to check whether the constructors do allocate dynamic memory
3015 and store it within members, we approximate the warning like this:
3016
3017 -- Warn only if there are members which are pointers
3018 -- Warn only if there is a non-trivial constructor (otherwise,
3019 there cannot be memory allocated).
3020 -- Warn only if there is a non-trivial destructor. We assume that the
3021 user at least implemented the cleanup correctly, and a destructor
3022 is needed to free dynamic memory.
9031d10b 3023
4a44ba29 3024 This seems enough for practical purposes. */
4010b92a 3025 if (warn_ecpp
3026 && has_pointers
3027 && TYPE_HAS_CONSTRUCTOR (t)
3028 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3029 && !(TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
02d7f858 3030 {
ced7c954 3031 warning (OPT_Weffc__, "%q#T has pointer data members", t);
9031d10b 3032
02d7f858 3033 if (! TYPE_HAS_INIT_REF (t))
3034 {
c0d4a023 3035 warning (OPT_Weffc__,
074ab442 3036 " but does not override %<%T(const %T&)%>", t, t);
c0d4a023 3037 if (!TYPE_HAS_ASSIGN_REF (t))
3038 warning (OPT_Weffc__, " or %<operator=(const %T&)%>", t);
02d7f858 3039 }
3040 else if (! TYPE_HAS_ASSIGN_REF (t))
c0d4a023 3041 warning (OPT_Weffc__,
074ab442 3042 " but does not override %<operator=(const %T&)%>", t);
02d7f858 3043 }
9b3f19c6 3044
4010b92a 3045 /* If any of the fields couldn't be packed, unset TYPE_PACKED. */
3046 if (cant_pack)
3047 TYPE_PACKED (t) = 0;
b8b24df5 3048
3049 /* Check anonymous struct/anonymous union fields. */
3050 finish_struct_anon (t);
3051
9b3f19c6 3052 /* We've built up the list of access declarations in reverse order.
3053 Fix that now. */
3054 *access_decls = nreverse (*access_decls);
9b3f19c6 3055}
3056
08549945 3057/* If TYPE is an empty class type, records its OFFSET in the table of
3058 OFFSETS. */
b8b24df5 3059
08549945 3060static int
45baea8b 3061record_subobject_offset (tree type, tree offset, splay_tree offsets)
23c5f505 3062{
08549945 3063 splay_tree_node n;
23c5f505 3064
08549945 3065 if (!is_empty_class (type))
3066 return 0;
23c5f505 3067
08549945 3068 /* Record the location of this empty object in OFFSETS. */
3069 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3070 if (!n)
9031d10b 3071 n = splay_tree_insert (offsets,
08549945 3072 (splay_tree_key) offset,
3073 (splay_tree_value) NULL_TREE);
9031d10b 3074 n->value = ((splay_tree_value)
08549945 3075 tree_cons (NULL_TREE,
3076 type,
3077 (tree) n->value));
3078
3079 return 0;
b8b24df5 3080}
3081
3160db1d 3082/* Returns nonzero if TYPE is an empty class type and there is
08549945 3083 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
32c93c4e 3084
08549945 3085static int
45baea8b 3086check_subobject_offset (tree type, tree offset, splay_tree offsets)
32c93c4e 3087{
08549945 3088 splay_tree_node n;
3089 tree t;
3090
3091 if (!is_empty_class (type))
3092 return 0;
3093
3094 /* Record the location of this empty object in OFFSETS. */
3095 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3096 if (!n)
3097 return 0;
3098
3099 for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3100 if (same_type_p (TREE_VALUE (t), type))
3101 return 1;
3102
3103 return 0;
32c93c4e 3104}
3105
08549945 3106/* Walk through all the subobjects of TYPE (located at OFFSET). Call
3107 F for every subobject, passing it the type, offset, and table of
edf55fe1 3108 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3109 be traversed.
c99b4ef9 3110
3111 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3112 than MAX_OFFSET will not be walked.
3113
3160db1d 3114 If F returns a nonzero value, the traversal ceases, and that value
c99b4ef9 3115 is returned. Otherwise, returns zero. */
281335db 3116
08549945 3117static int
9031d10b 3118walk_subobject_offsets (tree type,
653e5405 3119 subobject_offset_fn f,
3120 tree offset,
3121 splay_tree offsets,
3122 tree max_offset,
3123 int vbases_p)
23c5f505 3124{
08549945 3125 int r = 0;
342407fe 3126 tree type_binfo = NULL_TREE;
08549945 3127
c99b4ef9 3128 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3129 stop. */
3130 if (max_offset && INT_CST_LT (max_offset, offset))
3131 return 0;
3132
65a7c526 3133 if (type == error_mark_node)
3134 return 0;
074ab442 3135
9031d10b 3136 if (!TYPE_P (type))
342407fe 3137 {
3138 if (abi_version_at_least (2))
3139 type_binfo = type;
3140 type = BINFO_TYPE (type);
3141 }
3142
08549945 3143 if (CLASS_TYPE_P (type))
23c5f505 3144 {
08549945 3145 tree field;
23ed74d8 3146 tree binfo;
08549945 3147 int i;
3148
5671723d 3149 /* Avoid recursing into objects that are not interesting. */
3150 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3151 return 0;
3152
08549945 3153 /* Record the location of TYPE. */
3154 r = (*f) (type, offset, offsets);
3155 if (r)
3156 return r;
3157
3158 /* Iterate through the direct base classes of TYPE. */
342407fe 3159 if (!type_binfo)
3160 type_binfo = TYPE_BINFO (type);
f6cc6a08 3161 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
08549945 3162 {
342407fe 3163 tree binfo_offset;
3164
9031d10b 3165 if (abi_version_at_least (2)
57c28194 3166 && BINFO_VIRTUAL_P (binfo))
23ed74d8 3167 continue;
23c5f505 3168
9031d10b 3169 if (!vbases_p
3170 && BINFO_VIRTUAL_P (binfo)
f235209b 3171 && !BINFO_PRIMARY_P (binfo))
08549945 3172 continue;
3173
342407fe 3174 if (!abi_version_at_least (2))
3175 binfo_offset = size_binop (PLUS_EXPR,
3176 offset,
3177 BINFO_OFFSET (binfo));
3178 else
3179 {
3180 tree orig_binfo;
3181 /* We cannot rely on BINFO_OFFSET being set for the base
3182 class yet, but the offsets for direct non-virtual
3183 bases can be calculated by going back to the TYPE. */
2cfde4f3 3184 orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
9031d10b 3185 binfo_offset = size_binop (PLUS_EXPR,
342407fe 3186 offset,
3187 BINFO_OFFSET (orig_binfo));
3188 }
3189
3190 r = walk_subobject_offsets (binfo,
08549945 3191 f,
342407fe 3192 binfo_offset,
08549945 3193 offsets,
c99b4ef9 3194 max_offset,
9031d10b 3195 (abi_version_at_least (2)
23ed74d8 3196 ? /*vbases_p=*/0 : vbases_p));
08549945 3197 if (r)
3198 return r;
3199 }
3200
97c118b9 3201 if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
23ed74d8 3202 {
97c118b9 3203 unsigned ix;
046bfc77 3204 VEC(tree,gc) *vbases;
23ed74d8 3205
342407fe 3206 /* Iterate through the virtual base classes of TYPE. In G++
3207 3.2, we included virtual bases in the direct base class
3208 loop above, which results in incorrect results; the
3209 correct offsets for virtual bases are only known when
3210 working with the most derived type. */
3211 if (vbases_p)
930bdacf 3212 for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
3213 VEC_iterate (tree, vbases, ix, binfo); ix++)
342407fe 3214 {
342407fe 3215 r = walk_subobject_offsets (binfo,
3216 f,
3217 size_binop (PLUS_EXPR,
3218 offset,
3219 BINFO_OFFSET (binfo)),
3220 offsets,
3221 max_offset,
3222 /*vbases_p=*/0);
3223 if (r)
3224 return r;
3225 }
3226 else
23ed74d8 3227 {
342407fe 3228 /* We still have to walk the primary base, if it is
3229 virtual. (If it is non-virtual, then it was walked
3230 above.) */
97c118b9 3231 tree vbase = get_primary_binfo (type_binfo);
9031d10b 3232
57c28194 3233 if (vbase && BINFO_VIRTUAL_P (vbase)
eea75c62 3234 && BINFO_PRIMARY_P (vbase)
3235 && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
342407fe 3236 {
9031d10b 3237 r = (walk_subobject_offsets
95f3173a 3238 (vbase, f, offset,
3239 offsets, max_offset, /*vbases_p=*/0));
3240 if (r)
3241 return r;
342407fe 3242 }
23ed74d8 3243 }
3244 }
3245
08549945 3246 /* Iterate through the fields of TYPE. */
3247 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
23ed74d8 3248 if (TREE_CODE (field) == FIELD_DECL && !DECL_ARTIFICIAL (field))
08549945 3249 {
d99a5b29 3250 tree field_offset;
3251
3252 if (abi_version_at_least (2))
3253 field_offset = byte_position (field);
3254 else
3255 /* In G++ 3.2, DECL_FIELD_OFFSET was used. */
3256 field_offset = DECL_FIELD_OFFSET (field);
3257
08549945 3258 r = walk_subobject_offsets (TREE_TYPE (field),
3259 f,
3260 size_binop (PLUS_EXPR,
3261 offset,
d99a5b29 3262 field_offset),
08549945 3263 offsets,
c99b4ef9 3264 max_offset,
08549945 3265 /*vbases_p=*/1);
3266 if (r)
3267 return r;
3268 }
23c5f505 3269 }
08549945 3270 else if (TREE_CODE (type) == ARRAY_TYPE)
3271 {
5671723d 3272 tree element_type = strip_array_types (type);
08549945 3273 tree domain = TYPE_DOMAIN (type);
3274 tree index;
23c5f505 3275
5671723d 3276 /* Avoid recursing into objects that are not interesting. */
3277 if (!CLASS_TYPE_P (element_type)
3278 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3279 return 0;
3280
08549945 3281 /* Step through each of the elements in the array. */
23ed74d8 3282 for (index = size_zero_node;
3283 /* G++ 3.2 had an off-by-one error here. */
9031d10b 3284 (abi_version_at_least (2)
23ed74d8 3285 ? !INT_CST_LT (TYPE_MAX_VALUE (domain), index)
3286 : INT_CST_LT (index, TYPE_MAX_VALUE (domain)));
08549945 3287 index = size_binop (PLUS_EXPR, index, size_one_node))
3288 {
3289 r = walk_subobject_offsets (TREE_TYPE (type),
3290 f,
3291 offset,
3292 offsets,
c99b4ef9 3293 max_offset,
08549945 3294 /*vbases_p=*/1);
3295 if (r)
3296 return r;
9031d10b 3297 offset = size_binop (PLUS_EXPR, offset,
08549945 3298 TYPE_SIZE_UNIT (TREE_TYPE (type)));
c99b4ef9 3299 /* If this new OFFSET is bigger than the MAX_OFFSET, then
3300 there's no point in iterating through the remaining
3301 elements of the array. */
3302 if (max_offset && INT_CST_LT (max_offset, offset))
3303 break;
08549945 3304 }
3305 }
3306
3307 return 0;
3308}
3309
cc016fcb 3310/* Record all of the empty subobjects of TYPE (either a type or a
3311 binfo). If IS_DATA_MEMBER is true, then a non-static data member
776a1f2d 3312 is being placed at OFFSET; otherwise, it is a base class that is
3313 being placed at OFFSET. */
08549945 3314
3315static void
9031d10b 3316record_subobject_offsets (tree type,
653e5405 3317 tree offset,
3318 splay_tree offsets,
776a1f2d 3319 bool is_data_member)
08549945 3320{
776a1f2d 3321 tree max_offset;
cc016fcb 3322 /* If recording subobjects for a non-static data member or a
3323 non-empty base class , we do not need to record offsets beyond
3324 the size of the biggest empty class. Additional data members
3325 will go at the end of the class. Additional base classes will go
3326 either at offset zero (if empty, in which case they cannot
3327 overlap with offsets past the size of the biggest empty class) or
3328 at the end of the class.
3329
3330 However, if we are placing an empty base class, then we must record
776a1f2d 3331 all offsets, as either the empty class is at offset zero (where
3332 other empty classes might later be placed) or at the end of the
3333 class (where other objects might then be placed, so other empty
3334 subobjects might later overlap). */
074ab442 3335 if (is_data_member
cc016fcb 3336 || !is_empty_class (BINFO_TYPE (type)))
776a1f2d 3337 max_offset = sizeof_biggest_empty_class;
3338 else
3339 max_offset = NULL_TREE;
08549945 3340 walk_subobject_offsets (type, record_subobject_offset, offset,
776a1f2d 3341 offsets, max_offset, is_data_member);
23c5f505 3342}
3343
3160db1d 3344/* Returns nonzero if any of the empty subobjects of TYPE (located at
3345 OFFSET) conflict with entries in OFFSETS. If VBASES_P is nonzero,
08549945 3346 virtual bases of TYPE are examined. */
32c93c4e 3347
3348static int
45baea8b 3349layout_conflict_p (tree type,
653e5405 3350 tree offset,
3351 splay_tree offsets,
3352 int vbases_p)
32c93c4e 3353{
c99b4ef9 3354 splay_tree_node max_node;
3355
3356 /* Get the node in OFFSETS that indicates the maximum offset where
3357 an empty subobject is located. */
3358 max_node = splay_tree_max (offsets);
3359 /* If there aren't any empty subobjects, then there's no point in
3360 performing this check. */
3361 if (!max_node)
3362 return 0;
3363
08549945 3364 return walk_subobject_offsets (type, check_subobject_offset, offset,
c99b4ef9 3365 offsets, (tree) (max_node->key),
3366 vbases_p);
32c93c4e 3367}
3368
23c5f505 3369/* DECL is a FIELD_DECL corresponding either to a base subobject of a
3370 non-static data member of the type indicated by RLI. BINFO is the
08549945 3371 binfo corresponding to the base subobject, OFFSETS maps offsets to
23ed74d8 3372 types already located at those offsets. This function determines
3373 the position of the DECL. */
23c5f505 3374
3375static void
9031d10b 3376layout_nonempty_base_or_field (record_layout_info rli,
3377 tree decl,
3378 tree binfo,
23ed74d8 3379 splay_tree offsets)
23c5f505 3380{
08549945 3381 tree offset = NULL_TREE;
23ed74d8 3382 bool field_p;
3383 tree type;
9031d10b 3384
23ed74d8 3385 if (binfo)
3386 {
3387 /* For the purposes of determining layout conflicts, we want to
3388 use the class type of BINFO; TREE_TYPE (DECL) will be the
3389 CLASSTYPE_AS_BASE version, which does not contain entries for
3390 zero-sized bases. */
3391 type = TREE_TYPE (binfo);
3392 field_p = false;
3393 }
3394 else
3395 {
3396 type = TREE_TYPE (decl);
3397 field_p = true;
3398 }
08549945 3399
23c5f505 3400 /* Try to place the field. It may take more than one try if we have
3401 a hard time placing the field without putting two objects of the
3402 same type at the same address. */
3403 while (1)
3404 {
ad847b26 3405 struct record_layout_info_s old_rli = *rli;
23c5f505 3406
02e7a332 3407 /* Place this field. */
3408 place_field (rli, decl);
5d634e85 3409 offset = byte_position (decl);
550bbfa8 3410
23c5f505 3411 /* We have to check to see whether or not there is already
3412 something of the same type at the offset we're about to use.
550bbfa8 3413 For example, consider:
9031d10b 3414
550bbfa8 3415 struct S {};
3416 struct T : public S { int i; };
3417 struct U : public S, public T {};
9031d10b 3418
23c5f505 3419 Here, we put S at offset zero in U. Then, we can't put T at
3420 offset zero -- its S component would be at the same address
3421 as the S we already allocated. So, we have to skip ahead.
3422 Since all data members, including those whose type is an
3160db1d 3423 empty class, have nonzero size, any overlap can happen only
23c5f505 3424 with a direct or indirect base-class -- it can't happen with
3425 a data member. */
550bbfa8 3426 /* In a union, overlap is permitted; all members are placed at
3427 offset zero. */
3428 if (TREE_CODE (rli->t) == UNION_TYPE)
3429 break;
64f10f70 3430 /* G++ 3.2 did not check for overlaps when placing a non-empty
3431 virtual base. */
57c28194 3432 if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
64f10f70 3433 break;
9031d10b 3434 if (layout_conflict_p (field_p ? type : binfo, offset,
342407fe 3435 offsets, field_p))
23c5f505 3436 {
23c5f505 3437 /* Strip off the size allocated to this field. That puts us
3438 at the first place we could have put the field with
3439 proper alignment. */
02e7a332 3440 *rli = old_rli;
3441
08549945 3442 /* Bump up by the alignment required for the type. */
02e7a332 3443 rli->bitpos
9031d10b 3444 = size_binop (PLUS_EXPR, rli->bitpos,
3445 bitsize_int (binfo
08549945 3446 ? CLASSTYPE_ALIGN (type)
3447 : TYPE_ALIGN (type)));
02e7a332 3448 normalize_rli (rli);
23c5f505 3449 }
3450 else
3451 /* There was no conflict. We're done laying out this field. */
3452 break;
3453 }
08549945 3454
f1b15480 3455 /* Now that we know where it will be placed, update its
08549945 3456 BINFO_OFFSET. */
3457 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
e5a82780 3458 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
23ed74d8 3459 this point because their BINFO_OFFSET is copied from another
3460 hierarchy. Therefore, we may not need to add the entire
3461 OFFSET. */
9031d10b 3462 propagate_binfo_offsets (binfo,
23ed74d8 3463 size_diffop (convert (ssizetype, offset),
9031d10b 3464 convert (ssizetype,
95f3173a 3465 BINFO_OFFSET (binfo))));
23c5f505 3466}
3467
e5a82780 3468/* Returns true if TYPE is empty and OFFSET is nonzero. */
64f10f70 3469
3470static int
3471empty_base_at_nonzero_offset_p (tree type,
3472 tree offset,
3473 splay_tree offsets ATTRIBUTE_UNUSED)
3474{
3475 return is_empty_class (type) && !integer_zerop (offset);
3476}
3477
32c93c4e 3478/* Layout the empty base BINFO. EOC indicates the byte currently just
2404485e 3479 past the end of the class, and should be correctly aligned for a
08549945 3480 class of the type indicated by BINFO; OFFSETS gives the offsets of
f1b15480 3481 the empty bases allocated so far. T is the most derived
3160db1d 3482 type. Return nonzero iff we added it at the end. */
32c93c4e 3483
f0cac90f 3484static bool
95f3173a 3485layout_empty_base (tree binfo, tree eoc, splay_tree offsets)
32c93c4e 3486{
2404485e 3487 tree alignment;
32c93c4e 3488 tree basetype = BINFO_TYPE (binfo);
f0cac90f 3489 bool atend = false;
d99a5b29 3490
32c93c4e 3491 /* This routine should only be used for empty classes. */
b4df430b 3492 gcc_assert (is_empty_class (basetype));
5e4e7e1f 3493 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
32c93c4e 3494
21420d40 3495 if (!integer_zerop (BINFO_OFFSET (binfo)))
3496 {
3497 if (abi_version_at_least (2))
3498 propagate_binfo_offsets
3499 (binfo, size_diffop (size_zero_node, BINFO_OFFSET (binfo)));
c0d4a023 3500 else
3501 warning (OPT_Wabi,
074ab442 3502 "offset of empty base %qT may not be ABI-compliant and may"
21420d40 3503 "change in a future version of GCC",
3504 BINFO_TYPE (binfo));
3505 }
9031d10b 3506
32c93c4e 3507 /* This is an empty base class. We first try to put it at offset
3508 zero. */
342407fe 3509 if (layout_conflict_p (binfo,
08549945 3510 BINFO_OFFSET (binfo),
9031d10b 3511 offsets,
08549945 3512 /*vbases_p=*/0))
32c93c4e 3513 {
3514 /* That didn't work. Now, we move forward from the next
3515 available spot in the class. */
f0cac90f 3516 atend = true;
95f3173a 3517 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
9031d10b 3518 while (1)
32c93c4e 3519 {
342407fe 3520 if (!layout_conflict_p (binfo,
9031d10b 3521 BINFO_OFFSET (binfo),
08549945 3522 offsets,
3523 /*vbases_p=*/0))
32c93c4e 3524 /* We finally found a spot where there's no overlap. */
3525 break;
3526
3527 /* There's overlap here, too. Bump along to the next spot. */
95f3173a 3528 propagate_binfo_offsets (binfo, alignment);
32c93c4e 3529 }
3530 }
f0cac90f 3531 return atend;
32c93c4e 3532}
3533
dfea972c 3534/* Layout the base given by BINFO in the class indicated by RLI.
14786872 3535 *BASE_ALIGN is a running maximum of the alignments of
23ed74d8 3536 any base class. OFFSETS gives the location of empty base
3537 subobjects. T is the most derived type. Return nonzero if the new
3538 object cannot be nearly-empty. A new FIELD_DECL is inserted at
9031d10b 3539 *NEXT_FIELD, unless BINFO is for an empty base class.
23c5f505 3540
23ed74d8 3541 Returns the location at which the next field should be inserted. */
3542
3543static tree *
14786872 3544build_base_field (record_layout_info rli, tree binfo,
23ed74d8 3545 splay_tree offsets, tree *next_field)
281335db 3546{
23ed74d8 3547 tree t = rli->t;
281335db 3548 tree basetype = BINFO_TYPE (binfo);
281335db 3549
4b72716d 3550 if (!COMPLETE_TYPE_P (basetype))
281335db 3551 /* This error is now reported in xref_tag, thus giving better
3552 location information. */
23ed74d8 3553 return next_field;
9031d10b 3554
23ed74d8 3555 /* Place the base class. */
3556 if (!is_empty_class (basetype))
23c5f505 3557 {
23ed74d8 3558 tree decl;
3559
23c5f505 3560 /* The containing class is non-empty because it has a non-empty
3561 base class. */
14786872 3562 CLASSTYPE_EMPTY_P (t) = 0;
9031d10b 3563
23ed74d8 3564 /* Create the FIELD_DECL. */
3565 decl = build_decl (FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
3566 DECL_ARTIFICIAL (decl) = 1;
553acd9c 3567 DECL_IGNORED_P (decl) = 1;
23ed74d8 3568 DECL_FIELD_CONTEXT (decl) = t;
3569 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3570 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3571 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3572 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
f2fffff3 3573 DECL_MODE (decl) = TYPE_MODE (basetype);
6078f68f 3574 DECL_FIELD_IS_BASE (decl) = 1;
41be95a2 3575
23c5f505 3576 /* Try to place the field. It may take more than one try if we
3577 have a hard time placing the field without putting two
3578 objects of the same type at the same address. */
23ed74d8 3579 layout_nonempty_base_or_field (rli, decl, binfo, offsets);
3580 /* Add the new FIELD_DECL to the list of fields for T. */
3581 TREE_CHAIN (decl) = *next_field;
3582 *next_field = decl;
3583 next_field = &TREE_CHAIN (decl);
23c5f505 3584 }
3585 else
2404485e 3586 {
23ed74d8 3587 tree eoc;
64f10f70 3588 bool atend;
2404485e 3589
3590 /* On some platforms (ARM), even empty classes will not be
3591 byte-aligned. */
23ed74d8 3592 eoc = round_up (rli_size_unit_so_far (rli),
3593 CLASSTYPE_ALIGN_UNIT (basetype));
95f3173a 3594 atend = layout_empty_base (binfo, eoc, offsets);
64f10f70 3595 /* A nearly-empty class "has no proper base class that is empty,
3596 not morally virtual, and at an offset other than zero." */
57c28194 3597 if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
64f10f70 3598 {
3599 if (atend)
3600 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
776a1f2d 3601 /* The check above (used in G++ 3.2) is insufficient because
64f10f70 3602 an empty class placed at offset zero might itself have an
e5a82780 3603 empty base at a nonzero offset. */
9031d10b 3604 else if (walk_subobject_offsets (basetype,
64f10f70 3605 empty_base_at_nonzero_offset_p,
3606 size_zero_node,
3607 /*offsets=*/NULL,
3608 /*max_offset=*/NULL_TREE,
3609 /*vbases_p=*/true))
3610 {
3611 if (abi_version_at_least (2))
3612 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
c0d4a023 3613 else
3614 warning (OPT_Wabi,
074ab442 3615 "class %qT will be considered nearly empty in a "
64f10f70 3616 "future version of GCC", t);
3617 }
3618 }
9031d10b 3619
23ed74d8 3620 /* We do not create a FIELD_DECL for empty base classes because
3621 it might overlap some other field. We want to be able to
3622 create CONSTRUCTORs for the class by iterating over the
3623 FIELD_DECLs, and the back end does not handle overlapping
3624 FIELD_DECLs. */
14786872 3625
3626 /* An empty virtual base causes a class to be non-empty
3627 -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
3628 here because that was already done when the virtual table
3629 pointer was created. */
2404485e 3630 }
23c5f505 3631
23c5f505 3632 /* Record the offsets of BINFO and its base subobjects. */
342407fe 3633 record_subobject_offsets (binfo,
08549945 3634 BINFO_OFFSET (binfo),
9031d10b 3635 offsets,
776a1f2d 3636 /*is_data_member=*/false);
23ed74d8 3637
3638 return next_field;
281335db 3639}
3640
08549945 3641/* Layout all of the non-virtual base classes. Record empty
23ed74d8 3642 subobjects in OFFSETS. T is the most derived type. Return nonzero
3643 if the type cannot be nearly empty. The fields created
3644 corresponding to the base classes will be inserted at
3645 *NEXT_FIELD. */
b8b24df5 3646
23ed74d8 3647static void
14786872 3648build_base_fields (record_layout_info rli,
23ed74d8 3649 splay_tree offsets, tree *next_field)
b8b24df5 3650{
3651 /* Chain to hold all the new FIELD_DECLs which stand in for base class
3652 subobjects. */
23ed74d8 3653 tree t = rli->t;
2cfde4f3 3654 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
23c5f505 3655 int i;
b8b24df5 3656
5ad590ad 3657 /* The primary base class is always allocated first. */
23ed74d8 3658 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
3659 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
14786872 3660 offsets, next_field);
281335db 3661
3662 /* Now allocate the rest of the bases. */
b8b24df5 3663 for (i = 0; i < n_baseclasses; ++i)
3664 {
281335db 3665 tree base_binfo;
b8b24df5 3666
2cfde4f3 3667 base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
d0ceae4d 3668
5ad590ad 3669 /* The primary base was already allocated above, so we don't
3670 need to allocate it again here. */
23ed74d8 3671 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
b8b24df5 3672 continue;
3673
95f3173a 3674 /* Virtual bases are added at the end (a primary virtual base
3675 will have already been added). */
57c28194 3676 if (BINFO_VIRTUAL_P (base_binfo))
b8b24df5 3677 continue;
3678
14786872 3679 next_field = build_base_field (rli, base_binfo,
23ed74d8 3680 offsets, next_field);
b8b24df5 3681 }
b8b24df5 3682}
3683
9f6e8c5e 3684/* Go through the TYPE_METHODS of T issuing any appropriate
3685 diagnostics, figuring out which methods override which other
4446df62 3686 methods, and so forth. */
9f6e8c5e 3687
3688static void
45baea8b 3689check_methods (tree t)
9f6e8c5e 3690{
3691 tree x;
9f6e8c5e 3692
3693 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
3694 {
9f6e8c5e 3695 check_for_override (x, t);
a98fd0a1 3696 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
3cf8b391 3697 error ("initializer specified for non-virtual method %q+D", x);
9f6e8c5e 3698 /* The name of the field is the original field name
3699 Save this in auxiliary field for later overloading. */
3700 if (DECL_VINDEX (x))
3701 {
4446df62 3702 TYPE_POLYMORPHIC_P (t) = 1;
a98fd0a1 3703 if (DECL_PURE_VIRTUAL_P (x))
046bfc77 3704 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
9f6e8c5e 3705 }
ed36f1cf 3706 /* All user-declared destructors are non-trivial. */
3707 if (DECL_DESTRUCTOR_P (x))
3708 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
9f6e8c5e 3709 }
9f6e8c5e 3710}
3711
e55cba4c 3712/* FN is a constructor or destructor. Clone the declaration to create
3713 a specialized in-charge or not-in-charge version, as indicated by
3714 NAME. */
3715
3716static tree
45baea8b 3717build_clone (tree fn, tree name)
e55cba4c 3718{
3719 tree parms;
3720 tree clone;
3721
3722 /* Copy the function. */
3723 clone = copy_decl (fn);
3724 /* Remember where this function came from. */
3725 DECL_CLONED_FUNCTION (clone) = fn;
8f80e66d 3726 DECL_ABSTRACT_ORIGIN (clone) = fn;
e55cba4c 3727 /* Reset the function name. */
3728 DECL_NAME (clone) = name;
6e2808a0 3729 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
e55cba4c 3730 /* There's no pending inline data for this function. */
3731 DECL_PENDING_INLINE_INFO (clone) = NULL;
3732 DECL_PENDING_INLINE_P (clone) = 0;
3733 /* And it hasn't yet been deferred. */
3734 DECL_DEFERRED_FN (clone) = 0;
3735
f04596da 3736 /* The base-class destructor is not virtual. */
3737 if (name == base_dtor_identifier)
3738 {
3739 DECL_VIRTUAL_P (clone) = 0;
3740 if (TREE_CODE (clone) != TEMPLATE_DECL)
3741 DECL_VINDEX (clone) = NULL_TREE;
3742 }
3743
f8732e3f 3744 /* If there was an in-charge parameter, drop it from the function
e55cba4c 3745 type. */
3746 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3747 {
3748 tree basetype;
3749 tree parmtypes;
3750 tree exceptions;
3751
3752 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3753 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3754 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
3755 /* Skip the `this' parameter. */
3756 parmtypes = TREE_CHAIN (parmtypes);
3757 /* Skip the in-charge parameter. */
3758 parmtypes = TREE_CHAIN (parmtypes);
dcbeb3ef 3759 /* And the VTT parm, in a complete [cd]tor. */
3760 if (DECL_HAS_VTT_PARM_P (fn)
3761 && ! DECL_NEEDS_VTT_PARM_P (clone))
3762 parmtypes = TREE_CHAIN (parmtypes);
0ce25b06 3763 /* If this is subobject constructor or destructor, add the vtt
3764 parameter. */
9031d10b 3765 TREE_TYPE (clone)
5bfb0742 3766 = build_method_type_directly (basetype,
3767 TREE_TYPE (TREE_TYPE (clone)),
3768 parmtypes);
e55cba4c 3769 if (exceptions)
3770 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
3771 exceptions);
9031d10b 3772 TREE_TYPE (clone)
b3beaf30 3773 = cp_build_type_attribute_variant (TREE_TYPE (clone),
3774 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
e55cba4c 3775 }
3776
dcbeb3ef 3777 /* Copy the function parameters. But, DECL_ARGUMENTS on a TEMPLATE_DECL
3778 aren't function parameters; those are the template parameters. */
e55cba4c 3779 if (TREE_CODE (clone) != TEMPLATE_DECL)
3780 {
3781 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
3782 /* Remove the in-charge parameter. */
3783 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3784 {
3785 TREE_CHAIN (DECL_ARGUMENTS (clone))
3786 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3787 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
3788 }
dcbeb3ef 3789 /* And the VTT parm, in a complete [cd]tor. */
3790 if (DECL_HAS_VTT_PARM_P (fn))
0ce25b06 3791 {
dcbeb3ef 3792 if (DECL_NEEDS_VTT_PARM_P (clone))
3793 DECL_HAS_VTT_PARM_P (clone) = 1;
3794 else
3795 {
3796 TREE_CHAIN (DECL_ARGUMENTS (clone))
3797 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3798 DECL_HAS_VTT_PARM_P (clone) = 0;
3799 }
0ce25b06 3800 }
3801
e55cba4c 3802 for (parms = DECL_ARGUMENTS (clone); parms; parms = TREE_CHAIN (parms))
3803 {
3804 DECL_CONTEXT (parms) = clone;
dbc42b78 3805 cxx_dup_lang_specific_decl (parms);
e55cba4c 3806 }
3807 }
3808
e55cba4c 3809 /* Create the RTL for this function. */
0e8e37b2 3810 SET_DECL_RTL (clone, NULL_RTX);
b2c4af5e 3811 rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
9031d10b 3812
e55cba4c 3813 /* Make it easy to find the CLONE given the FN. */
3814 TREE_CHAIN (clone) = TREE_CHAIN (fn);
3815 TREE_CHAIN (fn) = clone;
3816
3817 /* If this is a template, handle the DECL_TEMPLATE_RESULT as well. */
3818 if (TREE_CODE (clone) == TEMPLATE_DECL)
3819 {
3820 tree result;
3821
9031d10b 3822 DECL_TEMPLATE_RESULT (clone)
e55cba4c 3823 = build_clone (DECL_TEMPLATE_RESULT (clone), name);
3824 result = DECL_TEMPLATE_RESULT (clone);
3825 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
3826 DECL_TI_TEMPLATE (result) = clone;
3827 }
b11ef6ee 3828 else if (pch_file)
3829 note_decl_for_pch (clone);
e55cba4c 3830
3831 return clone;
3832}
3833
3834/* Produce declarations for all appropriate clones of FN. If
3160db1d 3835 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
e55cba4c 3836 CLASTYPE_METHOD_VEC as well. */
3837
3838void
45baea8b 3839clone_function_decl (tree fn, int update_method_vec_p)
e55cba4c 3840{
3841 tree clone;
3842
90a83261 3843 /* Avoid inappropriate cloning. */
606b494c 3844 if (TREE_CHAIN (fn)
3845 && DECL_CLONED_FUNCTION (TREE_CHAIN (fn)))
90a83261 3846 return;
3847
f04596da 3848 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
e55cba4c 3849 {
f04596da 3850 /* For each constructor, we need two variants: an in-charge version
3851 and a not-in-charge version. */
e55cba4c 3852 clone = build_clone (fn, complete_ctor_identifier);
3853 if (update_method_vec_p)
49213a81 3854 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
e55cba4c 3855 clone = build_clone (fn, base_ctor_identifier);
3856 if (update_method_vec_p)
49213a81 3857 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
e55cba4c 3858 }
3859 else
f04596da 3860 {
b4df430b 3861 gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
f04596da 3862
0ce25b06 3863 /* For each destructor, we need three variants: an in-charge
f04596da 3864 version, a not-in-charge version, and an in-charge deleting
f8732e3f 3865 version. We clone the deleting version first because that
3866 means it will go second on the TYPE_METHODS list -- and that
3867 corresponds to the correct layout order in the virtual
9031d10b 3868 function table.
b429d3ee 3869
653e5405 3870 For a non-virtual destructor, we do not build a deleting
b429d3ee 3871 destructor. */
3872 if (DECL_VIRTUAL_P (fn))
3873 {
3874 clone = build_clone (fn, deleting_dtor_identifier);
3875 if (update_method_vec_p)
49213a81 3876 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
b429d3ee 3877 }
f8732e3f 3878 clone = build_clone (fn, complete_dtor_identifier);
f04596da 3879 if (update_method_vec_p)
49213a81 3880 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
f04596da 3881 clone = build_clone (fn, base_dtor_identifier);
3882 if (update_method_vec_p)
49213a81 3883 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
f04596da 3884 }
8f80e66d 3885
3886 /* Note that this is an abstract function that is never emitted. */
3887 DECL_ABSTRACT (fn) = 1;
e55cba4c 3888}
3889
a321abdb 3890/* DECL is an in charge constructor, which is being defined. This will
3891 have had an in class declaration, from whence clones were
3892 declared. An out-of-class definition can specify additional default
3893 arguments. As it is the clones that are involved in overload
3894 resolution, we must propagate the information from the DECL to its
c0af329c 3895 clones. */
a321abdb 3896
3897void
45baea8b 3898adjust_clone_args (tree decl)
a321abdb 3899{
3900 tree clone;
9031d10b 3901
a321abdb 3902 for (clone = TREE_CHAIN (decl); clone && DECL_CLONED_FUNCTION (clone);
3903 clone = TREE_CHAIN (clone))
3904 {
3905 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
3906 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
3907 tree decl_parms, clone_parms;
3908
3909 clone_parms = orig_clone_parms;
9031d10b 3910
c0af329c 3911 /* Skip the 'this' parameter. */
a321abdb 3912 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
3913 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3914
3915 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
3916 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3917 if (DECL_HAS_VTT_PARM_P (decl))
3918 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
9031d10b 3919
a321abdb 3920 clone_parms = orig_clone_parms;
3921 if (DECL_HAS_VTT_PARM_P (clone))
3922 clone_parms = TREE_CHAIN (clone_parms);
9031d10b 3923
a321abdb 3924 for (decl_parms = orig_decl_parms; decl_parms;
3925 decl_parms = TREE_CHAIN (decl_parms),
3926 clone_parms = TREE_CHAIN (clone_parms))
3927 {
b4df430b 3928 gcc_assert (same_type_p (TREE_TYPE (decl_parms),
3929 TREE_TYPE (clone_parms)));
9031d10b 3930
a321abdb 3931 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
3932 {
3933 /* A default parameter has been added. Adjust the
c0af329c 3934 clone's parameters. */
a321abdb 3935 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3936 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3937 tree type;
3938
3939 clone_parms = orig_decl_parms;
3940
3941 if (DECL_HAS_VTT_PARM_P (clone))
3942 {
3943 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
3944 TREE_VALUE (orig_clone_parms),
3945 clone_parms);
3946 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
3947 }
5bfb0742 3948 type = build_method_type_directly (basetype,
3949 TREE_TYPE (TREE_TYPE (clone)),
3950 clone_parms);
a321abdb 3951 if (exceptions)
3952 type = build_exception_variant (type, exceptions);
3953 TREE_TYPE (clone) = type;
9031d10b 3954
a321abdb 3955 clone_parms = NULL_TREE;
3956 break;
3957 }
3958 }
b4df430b 3959 gcc_assert (!clone_parms);
a321abdb 3960 }
3961}
3962
e55cba4c 3963/* For each of the constructors and destructors in T, create an
3964 in-charge and not-in-charge variant. */
3965
3966static void
45baea8b 3967clone_constructors_and_destructors (tree t)
e55cba4c 3968{
3969 tree fns;
3970
e55cba4c 3971 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
3972 out now. */
3973 if (!CLASSTYPE_METHOD_VEC (t))
3974 return;
3975
e55cba4c 3976 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3977 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
f04596da 3978 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3979 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
e55cba4c 3980}
3981
9f6e8c5e 3982/* Remove all zero-width bit-fields from T. */
3983
3984static void
45baea8b 3985remove_zero_width_bit_fields (tree t)
9f6e8c5e 3986{
3987 tree *fieldsp;
3988
9031d10b 3989 fieldsp = &TYPE_FIELDS (t);
9f6e8c5e 3990 while (*fieldsp)
3991 {
3992 if (TREE_CODE (*fieldsp) == FIELD_DECL
9031d10b 3993 && DECL_C_BIT_FIELD (*fieldsp)
9f6e8c5e 3994 && DECL_INITIAL (*fieldsp))
3995 *fieldsp = TREE_CHAIN (*fieldsp);
3996 else
3997 fieldsp = &TREE_CHAIN (*fieldsp);
3998 }
3999}
4000
5bc45500 4001/* Returns TRUE iff we need a cookie when dynamically allocating an
4002 array whose elements have the indicated class TYPE. */
4003
4004static bool
45baea8b 4005type_requires_array_cookie (tree type)
5bc45500 4006{
4007 tree fns;
54bc85f7 4008 bool has_two_argument_delete_p = false;
5bc45500 4009
b4df430b 4010 gcc_assert (CLASS_TYPE_P (type));
5bc45500 4011
4012 /* If there's a non-trivial destructor, we need a cookie. In order
4013 to iterate through the array calling the destructor for each
4014 element, we'll have to know how many elements there are. */
4015 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4016 return true;
4017
4018 /* If the usual deallocation function is a two-argument whose second
4019 argument is of type `size_t', then we have to pass the size of
4020 the array to the deallocation function, so we will need to store
4021 a cookie. */
9031d10b 4022 fns = lookup_fnfields (TYPE_BINFO (type),
5bc45500 4023 ansi_opname (VEC_DELETE_EXPR),
4024 /*protect=*/0);
4025 /* If there are no `operator []' members, or the lookup is
4026 ambiguous, then we don't need a cookie. */
4027 if (!fns || fns == error_mark_node)
4028 return false;
4029 /* Loop through all of the functions. */
4ac852cb 4030 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
5bc45500 4031 {
4032 tree fn;
4033 tree second_parm;
4034
4035 /* Select the current function. */
4036 fn = OVL_CURRENT (fns);
4037 /* See if this function is a one-argument delete function. If
4038 it is, then it will be the usual deallocation function. */
4039 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
4040 if (second_parm == void_list_node)
4041 return false;
4042 /* Otherwise, if we have a two-argument function and the second
4043 argument is `size_t', it will be the usual deallocation
4044 function -- unless there is one-argument function, too. */
4045 if (TREE_CHAIN (second_parm) == void_list_node
12717da4 4046 && same_type_p (TREE_VALUE (second_parm), size_type_node))
5bc45500 4047 has_two_argument_delete_p = true;
4048 }
4049
4050 return has_two_argument_delete_p;
4051}
4052
b8b24df5 4053/* Check the validity of the bases and members declared in T. Add any
4054 implicitly-generated functions (like copy-constructors and
4055 assignment operators). Compute various flag bits (like
4056 CLASSTYPE_NON_POD_T) for T. This routine works purely at the C++
4057 level: i.e., independently of the ABI in use. */
4058
4059static void
14786872 4060check_bases_and_members (tree t)
b8b24df5 4061{
b8b24df5 4062 /* Nonzero if the implicitly generated copy constructor should take
4063 a non-const reference argument. */
4064 int cant_have_const_ctor;
dfea972c 4065 /* Nonzero if the implicitly generated assignment operator
b8b24df5 4066 should take a non-const reference argument. */
4067 int no_const_asn_ref;
4068 tree access_decls;
4069
4070 /* By default, we use const reference arguments and generate default
4071 constructors. */
b8b24df5 4072 cant_have_const_ctor = 0;
4073 no_const_asn_ref = 0;
4074
c0af329c 4075 /* Check all the base-classes. */
64fcba70 4076 check_bases (t, &cant_have_const_ctor,
b8b24df5 4077 &no_const_asn_ref);
4078
ed36f1cf 4079 /* Check all the method declarations. */
4080 check_methods (t);
4081
4082 /* Check all the data member declarations. We cannot call
4083 check_field_decls until we have called check_bases check_methods,
4084 as check_field_decls depends on TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4085 being set appropriately. */
14786872 4086 check_field_decls (t, &access_decls,
b8b24df5 4087 &cant_have_const_ctor,
4088 &no_const_asn_ref);
4089
b53fb33d 4090 /* A nearly-empty class has to be vptr-containing; a nearly empty
4091 class contains just a vptr. */
4092 if (!TYPE_CONTAINS_VPTR_P (t))
e6863ea0 4093 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4094
b8b24df5 4095 /* Do some bookkeeping that will guide the generation of implicitly
4096 declared member functions. */
4097 TYPE_HAS_COMPLEX_INIT_REF (t)
1f0b839e 4098 |= (TYPE_HAS_INIT_REF (t) || TYPE_CONTAINS_VPTR_P (t));
b8b24df5 4099 TYPE_NEEDS_CONSTRUCTING (t)
1f0b839e 4100 |= (TYPE_HAS_CONSTRUCTOR (t) || TYPE_CONTAINS_VPTR_P (t));
4101 CLASSTYPE_NON_AGGREGATE (t)
4102 |= (TYPE_HAS_CONSTRUCTOR (t) || TYPE_POLYMORPHIC_P (t));
b8b24df5 4103 CLASSTYPE_NON_POD_P (t)
9031d10b 4104 |= (CLASSTYPE_NON_AGGREGATE (t)
ed36f1cf 4105 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
b8b24df5 4106 || TYPE_HAS_ASSIGN_REF (t));
b8b24df5 4107 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
e4e264a5 4108 |= TYPE_HAS_ASSIGN_REF (t) || TYPE_CONTAINS_VPTR_P (t);
b8b24df5 4109
93523877 4110 /* Synthesize any needed methods. */
64fcba70 4111 add_implicitly_declared_members (t,
b8b24df5 4112 cant_have_const_ctor,
4113 no_const_asn_ref);
4114
e55cba4c 4115 /* Create the in-charge and not-in-charge variants of constructors
4116 and destructors. */
4117 clone_constructors_and_destructors (t);
4118
c161288a 4119 /* Process the using-declarations. */
4120 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4121 handle_using_decl (TREE_VALUE (access_decls), t);
4122
b8b24df5 4123 /* Build and sort the CLASSTYPE_METHOD_VEC. */
4124 finish_struct_methods (t);
5bc45500 4125
4126 /* Figure out whether or not we will need a cookie when dynamically
4127 allocating an array of this type. */
1f3233d1 4128 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
5bc45500 4129 = type_requires_array_cookie (t);
b8b24df5 4130}
4131
4446df62 4132/* If T needs a pointer to its virtual function table, set TYPE_VFIELD
23c5f505 4133 accordingly. If a new vfield was created (because T doesn't have a
4134 primary base class), then the newly created field is returned. It
59751e6c 4135 is not added to the TYPE_FIELDS list; it is the caller's
b746c8da 4136 responsibility to do that. Accumulate declared virtual functions
4137 on VIRTUALS_P. */
4446df62 4138
23c5f505 4139static tree
45baea8b 4140create_vtable_ptr (tree t, tree* virtuals_p)
4446df62 4141{
4142 tree fn;
4143
b746c8da 4144 /* Collect the virtual functions declared in T. */
4446df62 4145 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
b746c8da 4146 if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
4147 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
4148 {
4149 tree new_virtual = make_node (TREE_LIST);
9031d10b 4150
b746c8da 4151 BV_FN (new_virtual) = fn;
4152 BV_DELTA (new_virtual) = integer_zero_node;
55d0e950 4153 BV_VCALL_INDEX (new_virtual) = NULL_TREE;
4446df62 4154
b746c8da 4155 TREE_CHAIN (new_virtual) = *virtuals_p;
4156 *virtuals_p = new_virtual;
4157 }
9031d10b 4158
5d634e85 4159 /* If we couldn't find an appropriate base class, create a new field
4160 here. Even if there weren't any new virtual functions, we might need a
b53fb33d 4161 new virtual function table if we're supposed to include vptrs in
4162 all classes that need them. */
b746c8da 4163 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
4446df62 4164 {
4165 /* We build this decl with vtbl_ptr_type_node, which is a
4166 `vtable_entry_type*'. It might seem more precise to use
f5f73833 4167 `vtable_entry_type (*)[N]' where N is the number of virtual
4446df62 4168 functions. However, that would require the vtable pointer in
4169 base classes to have a different type than the vtable pointer
4170 in derived classes. We could make that happen, but that
4171 still wouldn't solve all the problems. In particular, the
4172 type-based alias analysis code would decide that assignments
4173 to the base class vtable pointer can't alias assignments to
4174 the derived class vtable pointer, since they have different
e18c26dd 4175 types. Thus, in a derived class destructor, where the base
4446df62 4176 class constructor was inlined, we could generate bad code for
9031d10b 4177 setting up the vtable pointer.
4446df62 4178
653e5405 4179 Therefore, we use one type for all vtable pointers. We still
4446df62 4180 use a type-correct type; it's just doesn't indicate the array
4181 bounds. That's better than using `void*' or some such; it's
4182 cleaner, and it let's the alias analysis code know that these
4183 stores cannot alias stores to void*! */
c34a859d 4184 tree field;
4185
4186 field = build_decl (FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
c34a859d 4187 DECL_VIRTUAL_P (field) = 1;
4188 DECL_ARTIFICIAL (field) = 1;
4189 DECL_FIELD_CONTEXT (field) = t;
4190 DECL_FCONTEXT (field) = t;
9031d10b 4191
c34a859d 4192 TYPE_VFIELD (t) = field;
9031d10b 4193
c34a859d 4194 /* This class is non-empty. */
14786872 4195 CLASSTYPE_EMPTY_P (t) = 0;
4446df62 4196
c34a859d 4197 return field;
4446df62 4198 }
23c5f505 4199
4200 return NULL_TREE;
4446df62 4201}
4202
8d3a02b8 4203/* Fixup the inline function given by INFO now that the class is
4204 complete. */
9b3f19c6 4205
8d3a02b8 4206static void
45baea8b 4207fixup_pending_inline (tree fn)
8d3a02b8 4208{
518796ad 4209 if (DECL_PENDING_INLINE_INFO (fn))
8d3a02b8 4210 {
518796ad 4211 tree args = DECL_ARGUMENTS (fn);
8d3a02b8 4212 while (args)
4213 {
4214 DECL_CONTEXT (args) = fn;
4215 args = TREE_CHAIN (args);
4216 }
4217 }
4218}
9b3f19c6 4219
8d3a02b8 4220/* Fixup the inline methods and friends in TYPE now that TYPE is
4221 complete. */
9b3f19c6 4222
8d3a02b8 4223static void
45baea8b 4224fixup_inline_methods (tree type)
9b3f19c6 4225{
8d3a02b8 4226 tree method = TYPE_METHODS (type);
046bfc77 4227 VEC(tree,gc) *friends;
03106e7d 4228 unsigned ix;
9b3f19c6 4229
8d3a02b8 4230 if (method && TREE_CODE (method) == TREE_VEC)
9b3f19c6 4231 {
8d3a02b8 4232 if (TREE_VEC_ELT (method, 1))
4233 method = TREE_VEC_ELT (method, 1);
4234 else if (TREE_VEC_ELT (method, 0))
4235 method = TREE_VEC_ELT (method, 0);
9b3f19c6 4236 else
8d3a02b8 4237 method = TREE_VEC_ELT (method, 2);
9b3f19c6 4238 }
4239
8d3a02b8 4240 /* Do inline member functions. */
4241 for (; method; method = TREE_CHAIN (method))
518796ad 4242 fixup_pending_inline (method);
9b3f19c6 4243
8d3a02b8 4244 /* Do friends. */
03106e7d 4245 for (friends = CLASSTYPE_INLINE_FRIENDS (type), ix = 0;
4246 VEC_iterate (tree, friends, ix, method); ix++)
4247 fixup_pending_inline (method);
4248 CLASSTYPE_INLINE_FRIENDS (type) = NULL;
8d3a02b8 4249}
9b3f19c6 4250
cbf538c6 4251/* Add OFFSET to all base types of BINFO which is a base in the
4252 hierarchy dominated by T.
a22f582f 4253
d0ceae4d 4254 OFFSET, which is a type offset, is number of bytes. */
a22f582f 4255
4256static void
95f3173a 4257propagate_binfo_offsets (tree binfo, tree offset)
a22f582f 4258{
d0ceae4d 4259 int i;
4260 tree primary_binfo;
f6cc6a08 4261 tree base_binfo;
a22f582f 4262
d0ceae4d 4263 /* Update BINFO's offset. */
4264 BINFO_OFFSET (binfo)
9031d10b 4265 = convert (sizetype,
d0ceae4d 4266 size_binop (PLUS_EXPR,
4267 convert (ssizetype, BINFO_OFFSET (binfo)),
4268 offset));
a22f582f 4269
d0ceae4d 4270 /* Find the primary base class. */
4271 primary_binfo = get_primary_binfo (binfo);
4272
eea75c62 4273 if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
28c6e5cc 4274 propagate_binfo_offsets (primary_binfo, offset);
9031d10b 4275
d0ceae4d 4276 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
4277 downwards. */
f6cc6a08 4278 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
a22f582f 4279 {
28c6e5cc 4280 /* Don't do the primary base twice. */
4281 if (base_binfo == primary_binfo)
4282 continue;
d0ceae4d 4283
28c6e5cc 4284 if (BINFO_VIRTUAL_P (base_binfo))
d0ceae4d 4285 continue;
4286
95f3173a 4287 propagate_binfo_offsets (base_binfo, offset);
d0ceae4d 4288 }
cbf538c6 4289}
4290
23ed74d8 4291/* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
08549945 4292 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
4293 empty subobjects of T. */
a22f582f 4294
50e67742 4295static void
23ed74d8 4296layout_virtual_bases (record_layout_info rli, splay_tree offsets)
a22f582f 4297{
95f3173a 4298 tree vbase;
23ed74d8 4299 tree t = rli->t;
84fb34c4 4300 bool first_vbase = true;
23ed74d8 4301 tree *next_field;
32c93c4e 4302
2cfde4f3 4303 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
32c93c4e 4304 return;
4305
23ed74d8 4306 if (!abi_version_at_least(2))
4307 {
4308 /* In G++ 3.2, we incorrectly rounded the size before laying out
4309 the virtual bases. */
4310 finish_record_layout (rli, /*free_p=*/false);
32c93c4e 4311#ifdef STRUCTURE_SIZE_BOUNDARY
23ed74d8 4312 /* Packed structures don't need to have minimum size. */
4313 if (! TYPE_PACKED (t))
3473aefe 4314 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
32c93c4e 4315#endif
23ed74d8 4316 rli->offset = TYPE_SIZE_UNIT (t);
4317 rli->bitpos = bitsize_zero_node;
4318 rli->record_align = TYPE_ALIGN (t);
4319 }
a22f582f 4320
23ed74d8 4321 /* Find the last field. The artificial fields created for virtual
4322 bases will go after the last extant field to date. */
4323 next_field = &TYPE_FIELDS (t);
4324 while (*next_field)
4325 next_field = &TREE_CHAIN (*next_field);
a22f582f 4326
cbf538c6 4327 /* Go through the virtual bases, allocating space for each virtual
5ad590ad 4328 base that is not already a primary base class. These are
4329 allocated in inheritance graph order. */
95f3173a 4330 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
59751e6c 4331 {
57c28194 4332 if (!BINFO_VIRTUAL_P (vbase))
606b494c 4333 continue;
84fb34c4 4334
f235209b 4335 if (!BINFO_PRIMARY_P (vbase))
59751e6c 4336 {
23ed74d8 4337 tree basetype = TREE_TYPE (vbase);
4338
59751e6c 4339 /* This virtual base is not a primary base of any class in the
4340 hierarchy, so we have to add space for it. */
14786872 4341 next_field = build_base_field (rli, vbase,
23ed74d8 4342 offsets, next_field);
32c93c4e 4343
84fb34c4 4344 /* If the first virtual base might have been placed at a
4345 lower address, had we started from CLASSTYPE_SIZE, rather
4346 than TYPE_SIZE, issue a warning. There can be both false
4347 positives and false negatives from this warning in rare
4348 cases; to deal with all the possibilities would probably
4349 require performing both layout algorithms and comparing
4350 the results which is not particularly tractable. */
4351 if (warn_abi
4352 && first_vbase
9031d10b 4353 && (tree_int_cst_lt
23ed74d8 4354 (size_binop (CEIL_DIV_EXPR,
4355 round_up (CLASSTYPE_SIZE (t),
4356 CLASSTYPE_ALIGN (basetype)),
4357 bitsize_unit_node),
4358 BINFO_OFFSET (vbase))))
c0d4a023 4359 warning (OPT_Wabi,
074ab442 4360 "offset of virtual base %qT is not ABI-compliant and "
653e5405 4361 "may change in a future version of GCC",
84fb34c4 4362 basetype);
4363
84fb34c4 4364 first_vbase = false;
59751e6c 4365 }
4366 }
a22f582f 4367}
4368
29639fe2 4369/* Returns the offset of the byte just past the end of the base class
4370 BINFO. */
4371
4372static tree
4373end_of_base (tree binfo)
4374{
4375 tree size;
4376
4377 if (is_empty_class (BINFO_TYPE (binfo)))
4378 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
4379 allocate some space for it. It cannot have virtual bases, so
4380 TYPE_SIZE_UNIT is fine. */
4381 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4382 else
4383 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4384
4385 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
4386}
4387
32c93c4e 4388/* Returns the offset of the byte just past the end of the base class
4389 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
4390 only non-virtual bases are included. */
a22f582f 4391
23ed74d8 4392static tree
45baea8b 4393end_of_class (tree t, int include_virtuals_p)
a22f582f 4394{
23ed74d8 4395 tree result = size_zero_node;
046bfc77 4396 VEC(tree,gc) *vbases;
29639fe2 4397 tree binfo;
930bdacf 4398 tree base_binfo;
29639fe2 4399 tree offset;
32c93c4e 4400 int i;
a22f582f 4401
f6cc6a08 4402 for (binfo = TYPE_BINFO (t), i = 0;
4403 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
32c93c4e 4404 {
32c93c4e 4405 if (!include_virtuals_p
eea75c62 4406 && BINFO_VIRTUAL_P (base_binfo)
4407 && (!BINFO_PRIMARY_P (base_binfo)
4408 || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
32c93c4e 4409 continue;
a22f582f 4410
f6cc6a08 4411 offset = end_of_base (base_binfo);
23ed74d8 4412 if (INT_CST_LT_UNSIGNED (result, offset))
4413 result = offset;
32c93c4e 4414 }
a22f582f 4415
29639fe2 4416 /* G++ 3.2 did not check indirect virtual bases. */
4417 if (abi_version_at_least (2) && include_virtuals_p)
930bdacf 4418 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4419 VEC_iterate (tree, vbases, i, base_binfo); i++)
29639fe2 4420 {
930bdacf 4421 offset = end_of_base (base_binfo);
29639fe2 4422 if (INT_CST_LT_UNSIGNED (result, offset))
4423 result = offset;
4424 }
4425
32c93c4e 4426 return result;
a22f582f 4427}
4428
23ed74d8 4429/* Warn about bases of T that are inaccessible because they are
cca3a714 4430 ambiguous. For example:
4431
4432 struct S {};
4433 struct T : public S {};
4434 struct U : public S, public T {};
4435
4436 Here, `(S*) new U' is not allowed because there are two `S'
4437 subobjects of U. */
4438
4439static void
45baea8b 4440warn_about_ambiguous_bases (tree t)
cca3a714 4441{
4442 int i;
046bfc77 4443 VEC(tree,gc) *vbases;
23ed74d8 4444 tree basetype;
97c118b9 4445 tree binfo;
f6cc6a08 4446 tree base_binfo;
cca3a714 4447
ada40935 4448 /* If there are no repeated bases, nothing can be ambiguous. */
4449 if (!CLASSTYPE_REPEATED_BASE_P (t))
4450 return;
9031d10b 4451
23ed74d8 4452 /* Check direct bases. */
f6cc6a08 4453 for (binfo = TYPE_BINFO (t), i = 0;
4454 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
cca3a714 4455 {
f6cc6a08 4456 basetype = BINFO_TYPE (base_binfo);
cca3a714 4457
ada40935 4458 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
c3ceba8e 4459 warning (0, "direct base %qT inaccessible in %qT due to ambiguity",
23ed74d8 4460 basetype, t);
cca3a714 4461 }
23ed74d8 4462
4463 /* Check for ambiguous virtual bases. */
4464 if (extra_warnings)
930bdacf 4465 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4466 VEC_iterate (tree, vbases, i, binfo); i++)
23ed74d8 4467 {
97c118b9 4468 basetype = BINFO_TYPE (binfo);
9031d10b 4469
ada40935 4470 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
ced7c954 4471 warning (OPT_Wextra, "virtual base %qT inaccessible in %qT due to ambiguity",
23ed74d8 4472 basetype, t);
4473 }
cca3a714 4474}
4475
08549945 4476/* Compare two INTEGER_CSTs K1 and K2. */
4477
4478static int
45baea8b 4479splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
08549945 4480{
4481 return tree_int_cst_compare ((tree) k1, (tree) k2);
4482}
4483
23ed74d8 4484/* Increase the size indicated in RLI to account for empty classes
4485 that are "off the end" of the class. */
4486
4487static void
4488include_empty_classes (record_layout_info rli)
4489{
4490 tree eoc;
f7c99d26 4491 tree rli_size;
23ed74d8 4492
4493 /* It might be the case that we grew the class to allocate a
4494 zero-sized base class. That won't be reflected in RLI, yet,
4495 because we are willing to overlay multiple bases at the same
4496 offset. However, now we need to make sure that RLI is big enough
4497 to reflect the entire class. */
9031d10b 4498 eoc = end_of_class (rli->t,
23ed74d8 4499 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
f7c99d26 4500 rli_size = rli_size_unit_so_far (rli);
4501 if (TREE_CODE (rli_size) == INTEGER_CST
4502 && INT_CST_LT_UNSIGNED (rli_size, eoc))
23ed74d8 4503 {
703790ea 4504 if (!abi_version_at_least (2))
4505 /* In version 1 of the ABI, the size of a class that ends with
4506 a bitfield was not rounded up to a whole multiple of a
4507 byte. Because rli_size_unit_so_far returns only the number
4508 of fully allocated bytes, any extra bits were not included
4509 in the size. */
4510 rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
4511 else
4512 /* The size should have been rounded to a whole byte. */
b4df430b 4513 gcc_assert (tree_int_cst_equal
4514 (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
9031d10b 4515 rli->bitpos
4516 = size_binop (PLUS_EXPR,
f7c99d26 4517 rli->bitpos,
4518 size_binop (MULT_EXPR,
4519 convert (bitsizetype,
4520 size_binop (MINUS_EXPR,
4521 eoc, rli_size)),
4522 bitsize_int (BITS_PER_UNIT)));
4523 normalize_rli (rli);
23ed74d8 4524 }
4525}
4526
8d3a02b8 4527/* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
4528 BINFO_OFFSETs for all of the base-classes. Position the vtable
c0af329c 4529 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
b8b24df5 4530
8d3a02b8 4531static void
c83788c9 4532layout_class_type (tree t, tree *virtuals_p)
8d3a02b8 4533{
23c5f505 4534 tree non_static_data_members;
4535 tree field;
4536 tree vptr;
4537 record_layout_info rli;
08549945 4538 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
4539 types that appear at that offset. */
4540 splay_tree empty_base_offsets;
84fb34c4 4541 /* True if the last field layed out was a bit-field. */
4542 bool last_field_was_bitfield = false;
23ed74d8 4543 /* The location at which the next field should be inserted. */
4544 tree *next_field;
4545 /* T, as a base class. */
4546 tree base_t;
23c5f505 4547
4548 /* Keep track of the first non-static data member. */
4549 non_static_data_members = TYPE_FIELDS (t);
4550
02e7a332 4551 /* Start laying out the record. */
4552 rli = start_record_layout (t);
9b5c3a54 4553
eea75c62 4554 /* Mark all the primary bases in the hierarchy. */
4555 determine_primary_bases (t);
d4898d1c 4556
23c5f505 4557 /* Create a pointer to our virtual function table. */
14786872 4558 vptr = create_vtable_ptr (t, virtuals_p);
23c5f505 4559
5ad590ad 4560 /* The vptr is always the first thing in the class. */
606b494c 4561 if (vptr)
23c5f505 4562 {
23ed74d8 4563 TREE_CHAIN (vptr) = TYPE_FIELDS (t);
4564 TYPE_FIELDS (t) = vptr;
4565 next_field = &TREE_CHAIN (vptr);
02e7a332 4566 place_field (rli, vptr);
23c5f505 4567 }
23ed74d8 4568 else
4569 next_field = &TYPE_FIELDS (t);
23c5f505 4570
9160d06d 4571 /* Build FIELD_DECLs for all of the non-virtual base-types. */
9031d10b 4572 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
08549945 4573 NULL, NULL);
14786872 4574 build_base_fields (rli, empty_base_offsets, next_field);
9031d10b 4575
23c5f505 4576 /* Layout the non-static data members. */
02e7a332 4577 for (field = non_static_data_members; field; field = TREE_CHAIN (field))
23c5f505 4578 {
4c3b332b 4579 tree type;
4580 tree padding;
23c5f505 4581
4582 /* We still pass things that aren't non-static data members to
4583 the back-end, in case it wants to do something with them. */
4584 if (TREE_CODE (field) != FIELD_DECL)
4585 {
02e7a332 4586 place_field (rli, field);
242fc35c 4587 /* If the static data member has incomplete type, keep track
9031d10b 4588 of it so that it can be completed later. (The handling
242fc35c 4589 of pending statics in finish_record_layout is
4590 insufficient; consider:
4591
4592 struct S1;
4593 struct S2 { static S1 s1; };
9031d10b 4594
653e5405 4595 At this point, finish_record_layout will be called, but
242fc35c 4596 S1 is still incomplete.) */
4597 if (TREE_CODE (field) == VAR_DECL)
f1f4cd55 4598 {
4599 maybe_register_incomplete_var (field);
4600 /* The visibility of static data members is determined
4601 at their point of declaration, not their point of
4602 definition. */
4603 determine_visibility (field);
4604 }
23c5f505 4605 continue;
4606 }
4607
4c3b332b 4608 type = TREE_TYPE (field);
ac117046 4609 if (type == error_mark_node)
4610 continue;
9031d10b 4611
c155550d 4612 padding = NULL_TREE;
4c3b332b 4613
4614 /* If this field is a bit-field whose width is greater than its
5ad590ad 4615 type, then there are some special rules for allocating
4616 it. */
4c3b332b 4617 if (DECL_C_BIT_FIELD (field)
606b494c 4618 && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
4c3b332b 4619 {
4620 integer_type_kind itk;
4621 tree integer_type;
bea25212 4622 bool was_unnamed_p = false;
4c3b332b 4623 /* We must allocate the bits as if suitably aligned for the
4624 longest integer type that fits in this many bits. type
4625 of the field. Then, we are supposed to use the left over
4626 bits as additional padding. */
4627 for (itk = itk_char; itk != itk_none; ++itk)
9031d10b 4628 if (INT_CST_LT (DECL_SIZE (field),
4c3b332b 4629 TYPE_SIZE (integer_types[itk])))
4630 break;
4631
4632 /* ITK now indicates a type that is too large for the
4633 field. We have to back up by one to find the largest
4634 type that fits. */
4635 integer_type = integer_types[itk - 1];
221c4c52 4636
c155550d 4637 /* Figure out how much additional padding is required. GCC
4638 3.2 always created a padding field, even if it had zero
4639 width. */
4640 if (!abi_version_at_least (2)
4641 || INT_CST_LT (TYPE_SIZE (integer_type), DECL_SIZE (field)))
221c4c52 4642 {
c155550d 4643 if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
4644 /* In a union, the padding field must have the full width
4645 of the bit-field; all fields start at offset zero. */
4646 padding = DECL_SIZE (field);
4647 else
4648 {
c0d4a023 4649 if (TREE_CODE (t) == UNION_TYPE)
4650 warning (OPT_Wabi, "size assigned to %qT may not be "
c155550d 4651 "ABI-compliant and may change in a future "
9031d10b 4652 "version of GCC",
c155550d 4653 t);
4654 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
4655 TYPE_SIZE (integer_type));
4656 }
221c4c52 4657 }
d5d5e2f4 4658#ifdef PCC_BITFIELD_TYPE_MATTERS
46b3cd10 4659 /* An unnamed bitfield does not normally affect the
4660 alignment of the containing class on a target where
4661 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
4662 make any exceptions for unnamed bitfields when the
4663 bitfields are longer than their types. Therefore, we
4664 temporarily give the field a name. */
4665 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
4666 {
4667 was_unnamed_p = true;
4668 DECL_NAME (field) = make_anon_name ();
4669 }
d5d5e2f4 4670#endif
4c3b332b 4671 DECL_SIZE (field) = TYPE_SIZE (integer_type);
4672 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
aca14577 4673 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
bea25212 4674 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4675 empty_base_offsets);
4676 if (was_unnamed_p)
4677 DECL_NAME (field) = NULL_TREE;
4678 /* Now that layout has been performed, set the size of the
4679 field to the size of its declared type; the rest of the
4680 field is effectively invisible. */
4681 DECL_SIZE (field) = TYPE_SIZE (type);
8cc085df 4682 /* We must also reset the DECL_MODE of the field. */
4683 if (abi_version_at_least (2))
4684 DECL_MODE (field) = TYPE_MODE (type);
4685 else if (warn_abi
4686 && DECL_MODE (field) != TYPE_MODE (type))
4687 /* Versions of G++ before G++ 3.4 did not reset the
4688 DECL_MODE. */
c0d4a023 4689 warning (OPT_Wabi,
074ab442 4690 "the offset of %qD may not be ABI-compliant and may "
8cc085df 4691 "change in a future version of GCC", field);
4c3b332b 4692 }
bea25212 4693 else
4694 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4695 empty_base_offsets);
4c3b332b 4696
edf55fe1 4697 /* Remember the location of any empty classes in FIELD. */
4698 if (abi_version_at_least (2))
9031d10b 4699 record_subobject_offsets (TREE_TYPE (field),
edf55fe1 4700 byte_position(field),
4701 empty_base_offsets,
776a1f2d 4702 /*is_data_member=*/true);
edf55fe1 4703
84fb34c4 4704 /* If a bit-field does not immediately follow another bit-field,
4705 and yet it starts in the middle of a byte, we have failed to
4706 comply with the ABI. */
4707 if (warn_abi
9031d10b 4708 && DECL_C_BIT_FIELD (field)
aa796005 4709 /* The TREE_NO_WARNING flag gets set by Objective-C when
4710 laying out an Objective-C class. The ObjC ABI differs
4711 from the C++ ABI, and so we do not want a warning
4712 here. */
4713 && !TREE_NO_WARNING (field)
84fb34c4 4714 && !last_field_was_bitfield
4715 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
4716 DECL_FIELD_BIT_OFFSET (field),
4717 bitsize_unit_node)))
c0d4a023 4718 warning (OPT_Wabi, "offset of %q+D is not ABI-compliant and may "
3cf8b391 4719 "change in a future version of GCC", field);
84fb34c4 4720
d99a5b29 4721 /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
4722 offset of the field. */
9031d10b 4723 if (warn_abi
d99a5b29 4724 && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
4725 byte_position (field))
4726 && contains_empty_class_p (TREE_TYPE (field)))
c0d4a023 4727 warning (OPT_Wabi, "%q+D contains empty classes which may cause base "
3cf8b391 4728 "classes to be placed at different locations in a "
4729 "future version of GCC", field);
d99a5b29 4730
c0e47fd4 4731 /* The middle end uses the type of expressions to determine the
4732 possible range of expression values. In order to optimize
4733 "x.i > 7" to "false" for a 2-bit bitfield "i", the middle end
074ab442 4734 must be made aware of the width of "i", via its type.
c0e47fd4 4735
074ab442 4736 Because C++ does not have integer types of arbitrary width,
c0e47fd4 4737 we must (for the purposes of the front end) convert from the
4738 type assigned here to the declared type of the bitfield
4739 whenever a bitfield expression is used as an rvalue.
4740 Similarly, when assigning a value to a bitfield, the value
4741 must be converted to the type given the bitfield here. */
4742 if (DECL_C_BIT_FIELD (field))
4743 {
4744 tree ftype;
4745 unsigned HOST_WIDE_INT width;
4746 ftype = TREE_TYPE (field);
4747 width = tree_low_cst (DECL_SIZE (field), /*unsignedp=*/1);
4748 if (width != TYPE_PRECISION (ftype))
074ab442 4749 TREE_TYPE (field)
4750 = c_build_bitfield_integer_type (width,
c0e47fd4 4751 TYPE_UNSIGNED (ftype));
4752 }
4753
4c3b332b 4754 /* If we needed additional padding after this field, add it
4755 now. */
4756 if (padding)
4757 {
4758 tree padding_field;
4759
9031d10b 4760 padding_field = build_decl (FIELD_DECL,
4c3b332b 4761 NULL_TREE,
9031d10b 4762 char_type_node);
4c3b332b 4763 DECL_BIT_FIELD (padding_field) = 1;
4764 DECL_SIZE (padding_field) = padding;
c155550d 4765 DECL_CONTEXT (padding_field) = t;
bb51617e 4766 DECL_ARTIFICIAL (padding_field) = 1;
553acd9c 4767 DECL_IGNORED_P (padding_field) = 1;
08549945 4768 layout_nonempty_base_or_field (rli, padding_field,
9031d10b 4769 NULL_TREE,
23ed74d8 4770 empty_base_offsets);
4c3b332b 4771 }
84fb34c4 4772
4773 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
23c5f505 4774 }
4775
23ed74d8 4776 if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
f7c99d26 4777 {
4778 /* Make sure that we are on a byte boundary so that the size of
4779 the class without virtual bases will always be a round number
4780 of bytes. */
4781 rli->bitpos = round_up (rli->bitpos, BITS_PER_UNIT);
4782 normalize_rli (rli);
4783 }
23ed74d8 4784
9833f238 4785 /* G++ 3.2 does not allow virtual bases to be overlaid with tail
4786 padding. */
4787 if (!abi_version_at_least (2))
4788 include_empty_classes(rli);
9f6e8c5e 4789
4446df62 4790 /* Delete all zero-width bit-fields from the list of fields. Now
4791 that the type is laid out they are no longer important. */
4792 remove_zero_width_bit_fields (t);
4793
23ed74d8 4794 /* Create the version of T used for virtual bases. We do not use
4795 make_aggr_type for this version; this is an artificial type. For
4796 a POD type, we just reuse T. */
14786872 4797 if (CLASSTYPE_NON_POD_P (t) || CLASSTYPE_EMPTY_P (t))
b278476e 4798 {
23ed74d8 4799 base_t = make_node (TREE_CODE (t));
9031d10b 4800
14786872 4801 /* Set the size and alignment for the new type. In G++ 3.2, all
4802 empty classes were considered to have size zero when used as
4803 base classes. */
4804 if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
4805 {
4806 TYPE_SIZE (base_t) = bitsize_zero_node;
4807 TYPE_SIZE_UNIT (base_t) = size_zero_node;
4808 if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
c0d4a023 4809 warning (OPT_Wabi,
074ab442 4810 "layout of classes derived from empty class %qT "
14786872 4811 "may change in a future version of GCC",
4812 t);
4813 }
4814 else
4815 {
94e4bc9f 4816 tree eoc;
4817
4818 /* If the ABI version is not at least two, and the last
4819 field was a bit-field, RLI may not be on a byte
4820 boundary. In particular, rli_size_unit_so_far might
4821 indicate the last complete byte, while rli_size_so_far
4822 indicates the total number of bits used. Therefore,
4823 rli_size_so_far, rather than rli_size_unit_so_far, is
4824 used to compute TYPE_SIZE_UNIT. */
4825 eoc = end_of_class (t, /*include_virtuals_p=*/0);
9031d10b 4826 TYPE_SIZE_UNIT (base_t)
9833f238 4827 = size_binop (MAX_EXPR,
94e4bc9f 4828 convert (sizetype,
4829 size_binop (CEIL_DIV_EXPR,
4830 rli_size_so_far (rli),
4831 bitsize_int (BITS_PER_UNIT))),
4832 eoc);
9031d10b 4833 TYPE_SIZE (base_t)
9833f238 4834 = size_binop (MAX_EXPR,
4835 rli_size_so_far (rli),
4836 size_binop (MULT_EXPR,
94e4bc9f 4837 convert (bitsizetype, eoc),
9833f238 4838 bitsize_int (BITS_PER_UNIT)));
14786872 4839 }
23ed74d8 4840 TYPE_ALIGN (base_t) = rli->record_align;
4841 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
4842
4843 /* Copy the fields from T. */
4844 next_field = &TYPE_FIELDS (base_t);
4845 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4846 if (TREE_CODE (field) == FIELD_DECL)
4847 {
4848 *next_field = build_decl (FIELD_DECL,
9031d10b 4849 DECL_NAME (field),
23ed74d8 4850 TREE_TYPE (field));
4851 DECL_CONTEXT (*next_field) = base_t;
4852 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
4853 DECL_FIELD_BIT_OFFSET (*next_field)
4854 = DECL_FIELD_BIT_OFFSET (field);
0db4e267 4855 DECL_SIZE (*next_field) = DECL_SIZE (field);
4856 DECL_MODE (*next_field) = DECL_MODE (field);
23ed74d8 4857 next_field = &TREE_CHAIN (*next_field);
4858 }
4859
4860 /* Record the base version of the type. */
4861 CLASSTYPE_AS_BASE (t) = base_t;
4b09de30 4862 TYPE_CONTEXT (base_t) = t;
33927c59 4863 }
606b494c 4864 else
23ed74d8 4865 CLASSTYPE_AS_BASE (t) = t;
745f5bd2 4866
5671723d 4867 /* Every empty class contains an empty class. */
4868 if (CLASSTYPE_EMPTY_P (t))
4869 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
4870
471086d6 4871 /* Set the TYPE_DECL for this type to contain the right
4872 value for DECL_OFFSET, so that we can use it as part
4873 of a COMPONENT_REF for multiple inheritance. */
b0df6589 4874 layout_decl (TYPE_MAIN_DECL (t), 0);
471086d6 4875
b0722fac 4876 /* Now fix up any virtual base class types that we left lying
4877 around. We must get these done before we try to lay out the
23c5f505 4878 virtual function table. As a side-effect, this will remove the
4879 base subobject fields. */
23ed74d8 4880 layout_virtual_bases (rli, empty_base_offsets);
4881
9031d10b 4882 /* Make sure that empty classes are reflected in RLI at this
23ed74d8 4883 point. */
4884 include_empty_classes(rli);
4885
4886 /* Make sure not to create any structures with zero size. */
14786872 4887 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
9031d10b 4888 place_field (rli,
23ed74d8 4889 build_decl (FIELD_DECL, NULL_TREE, char_type_node));
4890
4891 /* Let the back-end lay out the type. */
4892 finish_record_layout (rli, /*free_p=*/true);
32c93c4e 4893
23ed74d8 4894 /* Warn about bases that can't be talked about due to ambiguity. */
4895 warn_about_ambiguous_bases (t);
cca3a714 4896
da7e5851 4897 /* Now that we're done with layout, give the base fields the real types. */
4898 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4899 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
4900 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
4901
32c93c4e 4902 /* Clean up. */
08549945 4903 splay_tree_delete (empty_base_offsets);
776a1f2d 4904
4905 if (CLASSTYPE_EMPTY_P (t)
074ab442 4906 && tree_int_cst_lt (sizeof_biggest_empty_class,
cc016fcb 4907 TYPE_SIZE_UNIT (t)))
4908 sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t);
8d3a02b8 4909}
59751e6c 4910
219626ad 4911/* Determine the "key method" for the class type indicated by TYPE,
4912 and set CLASSTYPE_KEY_METHOD accordingly. */
9bacae7e 4913
219626ad 4914void
4915determine_key_method (tree type)
9bacae7e 4916{
4917 tree method;
4918
4919 if (TYPE_FOR_JAVA (type)
4920 || processing_template_decl
4921 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
4922 || CLASSTYPE_INTERFACE_KNOWN (type))
219626ad 4923 return;
9bacae7e 4924
219626ad 4925 /* The key method is the first non-pure virtual function that is not
4926 inline at the point of class definition. On some targets the
4927 key function may not be inline; those targets should not call
4928 this function until the end of the translation unit. */
9bacae7e 4929 for (method = TYPE_METHODS (type); method != NULL_TREE;
4930 method = TREE_CHAIN (method))
4931 if (DECL_VINDEX (method) != NULL_TREE
4932 && ! DECL_DECLARED_INLINE_P (method)
4933 && ! DECL_PURE_VIRTUAL_P (method))
219626ad 4934 {
4935 CLASSTYPE_KEY_METHOD (type) = method;
4936 break;
4937 }
9bacae7e 4938
219626ad 4939 return;
9bacae7e 4940}
4941
6fc7a923 4942/* Perform processing required when the definition of T (a class type)
4943 is complete. */
8d3a02b8 4944
4945void
45baea8b 4946finish_struct_1 (tree t)
8d3a02b8 4947{
4948 tree x;
c0af329c 4949 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
b746c8da 4950 tree virtuals = NULL_TREE;
8d3a02b8 4951 int n_fields = 0;
8d3a02b8 4952
4b72716d 4953 if (COMPLETE_TYPE_P (t))
8d3a02b8 4954 {
092b1d6f 4955 gcc_assert (IS_AGGR_TYPE (t));
8a443577 4956 error ("redefinition of %q#T", t);
8d3a02b8 4957 popclass ();
4958 return;
4959 }
4960
8d3a02b8 4961 /* If this type was previously laid out as a forward reference,
4962 make sure we lay it out again. */
8d3a02b8 4963 TYPE_SIZE (t) = NULL_TREE;
d0ceae4d 4964 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
8d3a02b8 4965
8cbe13ee 4966 fixup_inline_methods (t);
9031d10b 4967
5671723d 4968 /* Make assumptions about the class; we'll reset the flags if
4969 necessary. */
14786872 4970 CLASSTYPE_EMPTY_P (t) = 1;
4971 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
5671723d 4972 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
14786872 4973
8d3a02b8 4974 /* Do end-of-class semantic processing: checking the validity of the
02d7bfe2 4975 bases and members and add implicitly generated methods. */
14786872 4976 check_bases_and_members (t);
8d3a02b8 4977
331bc0ad 4978 /* Find the key method. */
f7f3238d 4979 if (TYPE_CONTAINS_VPTR_P (t))
9bacae7e 4980 {
219626ad 4981 /* The Itanium C++ ABI permits the key method to be chosen when
4982 the class is defined -- even though the key method so
4983 selected may later turn out to be an inline function. On
4984 some systems (such as ARM Symbian OS) the key method cannot
4985 be determined until the end of the translation unit. On such
4986 systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
4987 will cause the class to be added to KEYED_CLASSES. Then, in
4988 finish_file we will determine the key method. */
4989 if (targetm.cxx.key_method_may_be_inline ())
4990 determine_key_method (t);
9bacae7e 4991
4992 /* If a polymorphic class has no key method, we may emit the vtable
6beb3f76 4993 in every translation unit where the class definition appears. */
9bacae7e 4994 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
4995 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
4996 }
4997
8d3a02b8 4998 /* Layout the class itself. */
c83788c9 4999 layout_class_type (t, &virtuals);
37ea1c3f 5000 if (CLASSTYPE_AS_BASE (t) != t)
5001 /* We use the base type for trivial assignments, and hence it
5002 needs a mode. */
5003 compute_record_mode (CLASSTYPE_AS_BASE (t));
6b0303ff 5004
c83788c9 5005 virtuals = modify_all_vtables (t, nreverse (virtuals));
c25194fd 5006
fc475736 5007 /* If necessary, create the primary vtable for this class. */
b746c8da 5008 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
471086d6 5009 {
471086d6 5010 /* We must enter these virtuals into the table. */
4446df62 5011 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5d634e85 5012 build_primary_vtable (NULL_TREE, t);
95f3173a 5013 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
05a817bb 5014 /* Here we know enough to change the type of our virtual
5015 function table, but we will wait until later this function. */
566d2052 5016 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
471086d6 5017 }
5018
b53fb33d 5019 if (TYPE_CONTAINS_VPTR_P (t))
471086d6 5020 {
c83788c9 5021 int vindex;
5022 tree fn;
5023
2cfde4f3 5024 if (BINFO_VTABLE (TYPE_BINFO (t)))
b4df430b 5025 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
3a271128 5026 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
b4df430b 5027 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
3a271128 5028
b746c8da 5029 /* Add entries for virtual functions introduced by this class. */
2cfde4f3 5030 BINFO_VIRTUALS (TYPE_BINFO (t))
5031 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
c83788c9 5032
5033 /* Set DECL_VINDEX for all functions declared in this class. */
9031d10b 5034 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
5035 fn;
5036 fn = TREE_CHAIN (fn),
c83788c9 5037 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
5038 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
805e22b2 5039 {
5040 tree fndecl = BV_FN (fn);
5041
5042 if (DECL_THUNK_P (fndecl))
5043 /* A thunk. We should never be calling this entry directly
5044 from this vtable -- we'd use the entry for the non
5045 thunk base function. */
5046 DECL_VINDEX (fndecl) = NULL_TREE;
5047 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
7016c612 5048 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
805e22b2 5049 }
471086d6 5050 }
5051
50e67742 5052 finish_struct_bits (t);
471086d6 5053
ce28ee2e 5054 /* Complete the rtl for any static member objects of the type we're
5055 working on. */
9f6e8c5e 5056 for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
0e8e37b2 5057 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
779e287a 5058 && TREE_TYPE (x) != error_mark_node
f1f65c22 5059 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
0e8e37b2 5060 DECL_MODE (x) = TYPE_MODE (t);
471086d6 5061
15eb8b2d 5062 /* Done with FIELDS...now decide whether to sort these for
9f6e8c5e 5063 faster lookups later.
15eb8b2d 5064
5f81c5db 5065 We use a small number because most searches fail (succeeding
15eb8b2d 5066 ultimately as the search bores through the inheritance
5067 hierarchy), and we want this failure to occur quickly. */
5068
9f6e8c5e 5069 n_fields = count_fields (TYPE_FIELDS (t));
5070 if (n_fields > 7)
15eb8b2d 5071 {
a33db04a 5072 struct sorted_fields_type *field_vec = GGC_NEWVAR
653e5405 5073 (struct sorted_fields_type,
5074 sizeof (struct sorted_fields_type) + n_fields * sizeof (tree));
860251be 5075 field_vec->len = n_fields;
5076 add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
5077 qsort (field_vec->elts, n_fields, sizeof (tree),
573aba85 5078 field_decl_cmp);
15eb8b2d 5079 if (! DECL_LANG_SPECIFIC (TYPE_MAIN_DECL (t)))
5080 retrofit_lang_decl (TYPE_MAIN_DECL (t));
5081 DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec;
5082 }
5083
4a2849cb 5084 /* Complain if one of the field types requires lower visibility. */
5085 constrain_class_visibility (t);
5086
d8febc9d 5087 /* Make the rtl for any new vtables we have created, and unmark
5088 the base types we marked. */
5089 finish_vtbls (t);
9031d10b 5090
bd5edd91 5091 /* Build the VTT for T. */
5092 build_vtt (t);
d8febc9d 5093
8f057ebd 5094 /* This warning does not make sense for Java classes, since they
5095 cannot have destructors. */
5096 if (!TYPE_FOR_JAVA (t) && warn_nonvdtor && TYPE_POLYMORPHIC_P (t))
c49006bc 5097 {
ed36f1cf 5098 tree dtor;
5099
5100 dtor = CLASSTYPE_DESTRUCTORS (t);
5101 /* Warn only if the dtor is non-private or the class has
5102 friends. */
5103 if (/* An implicitly declared destructor is always public. And,
5104 if it were virtual, we would have created it by now. */
5105 !dtor
5106 || (!DECL_VINDEX (dtor)
9031d10b 5107 && (!TREE_PRIVATE (dtor)
5108 || CLASSTYPE_FRIEND_CLASSES (t)
ed36f1cf 5109 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))))
9031d10b 5110 warning (0, "%q#T has virtual functions but non-virtual destructor",
ed36f1cf 5111 t);
c49006bc 5112 }
471086d6 5113
242fc35c 5114 complete_vars (t);
471086d6 5115
63b1d638 5116 if (warn_overloaded_virtual)
5117 warn_hidden (t);
471086d6 5118
6c1e551f 5119 /* Class layout, assignment of virtual table slots, etc., is now
5120 complete. Give the back end a chance to tweak the visibility of
5121 the class or perform any other required target modifications. */
5122 targetm.cxx.adjust_class_at_definition (t);
5123
b3908271 5124 maybe_suppress_debug_info (t);
471086d6 5125
364c0b82 5126 dump_class_hierarchy (t);
9031d10b 5127
b0df6589 5128 /* Finish debugging output for this type. */
19f716e5 5129 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
471086d6 5130}
ce28ee2e 5131
0f2952a1 5132/* When T was built up, the member declarations were added in reverse
5133 order. Rearrange them to declaration order. */
5134
5135void
45baea8b 5136unreverse_member_declarations (tree t)
0f2952a1 5137{
5138 tree next;
5139 tree prev;
5140 tree x;
5141
7a40f9b7 5142 /* The following lists are all in reverse order. Put them in
5143 declaration order now. */
0f2952a1 5144 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
7a40f9b7 5145 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
0f2952a1 5146
5147 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5148 reverse order, so we can't just use nreverse. */
5149 prev = NULL_TREE;
9031d10b 5150 for (x = TYPE_FIELDS (t);
5151 x && TREE_CODE (x) != TYPE_DECL;
0f2952a1 5152 x = next)
5153 {
5154 next = TREE_CHAIN (x);
5155 TREE_CHAIN (x) = prev;
5156 prev = x;
5157 }
5158 if (prev)
5159 {
5160 TREE_CHAIN (TYPE_FIELDS (t)) = x;
5161 if (prev)
5162 TYPE_FIELDS (t) = prev;
5163 }
5164}
5165
ce28ee2e 5166tree
45baea8b 5167finish_struct (tree t, tree attributes)
ce28ee2e 5168{
6a86d77b 5169 location_t saved_loc = input_location;
1ec03860 5170
0f2952a1 5171 /* Now that we've got all the field declarations, reverse everything
5172 as necessary. */
5173 unreverse_member_declarations (t);
ce28ee2e 5174
e3c541f0 5175 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
596c0ae6 5176
1ec03860 5177 /* Nadger the current location so that diagnostics point to the start of
5178 the struct, not the end. */
346064d9 5179 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
1ec03860 5180
e857e9c7 5181 if (processing_template_decl)
ce28ee2e 5182 {
d97a7640 5183 tree x;
5184
45b83a06 5185 finish_struct_methods (t);
e3ade982 5186 TYPE_SIZE (t) = bitsize_zero_node;
17189887 5187 TYPE_SIZE_UNIT (t) = size_zero_node;
d97a7640 5188
5189 /* We need to emit an error message if this type was used as a parameter
5190 and it is an abstract type, even if it is a template. We construct
5191 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
5192 account and we call complete_vars with this type, which will check
5193 the PARM_DECLS. Note that while the type is being defined,
5194 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
5195 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
03106e7d 5196 CLASSTYPE_PURE_VIRTUALS (t) = NULL;
d97a7640 5197 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
5198 if (DECL_PURE_VIRTUAL_P (x))
046bfc77 5199 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
d97a7640 5200 complete_vars (t);
8036fa43 5201 }
ce28ee2e 5202 else
175a96e8 5203 finish_struct_1 (t);
e857e9c7 5204
6a86d77b 5205 input_location = saved_loc;
1ec03860 5206
e857e9c7 5207 TYPE_BEING_DEFINED (t) = 0;
1eaf178d 5208
e857e9c7 5209 if (current_class_type)
8fc54128 5210 popclass ();
e857e9c7 5211 else
ebae5c09 5212 error ("trying to finish struct, but kicked out due to previous parse errors");
e857e9c7 5213
334ec926 5214 if (processing_template_decl && at_function_scope_p ())
5215 add_stmt (build_min (TAG_DEFN, t));
b3908271 5216
e857e9c7 5217 return t;
ce28ee2e 5218}
471086d6 5219\f
3428ae0a 5220/* Return the dynamic type of INSTANCE, if known.
471086d6 5221 Used to determine whether the virtual function table is needed
5222 or not.
5223
5224 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
87019dfb 5225 of our knowledge of its type. *NONNULL should be initialized
5226 before this function is called. */
96624a9e 5227
e1721763 5228static tree
45baea8b 5229fixed_type_or_null (tree instance, int* nonnull, int* cdtorp)
471086d6 5230{
5231 switch (TREE_CODE (instance))
5232 {
5233 case INDIRECT_REF:
92a9ee24 5234 if (POINTER_TYPE_P (TREE_TYPE (instance)))
fb75f6dc 5235 return NULL_TREE;
5236 else
5237 return fixed_type_or_null (TREE_OPERAND (instance, 0),
5238 nonnull, cdtorp);
5239
471086d6 5240 case CALL_EXPR:
5241 /* This is a call to a constructor, hence it's never zero. */
5242 if (TREE_HAS_CONSTRUCTOR (instance))
5243 {
5244 if (nonnull)
5245 *nonnull = 1;
3428ae0a 5246 return TREE_TYPE (instance);
471086d6 5247 }
3428ae0a 5248 return NULL_TREE;
471086d6 5249
5250 case SAVE_EXPR:
5251 /* This is a call to a constructor, hence it's never zero. */
5252 if (TREE_HAS_CONSTRUCTOR (instance))
5253 {
5254 if (nonnull)
5255 *nonnull = 1;
3428ae0a 5256 return TREE_TYPE (instance);
471086d6 5257 }
a7957883 5258 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
471086d6 5259
471086d6 5260 case PLUS_EXPR:
5261 case MINUS_EXPR:
a7957883 5262 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5263 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
471086d6 5264 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5265 /* Propagate nonnull. */
8bfe5753 5266 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
3428ae0a 5267 return NULL_TREE;
471086d6 5268
5269 case NOP_EXPR:
5270 case CONVERT_EXPR:
a7957883 5271 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
471086d6 5272
5273 case ADDR_EXPR:
3d1c55e6 5274 instance = TREE_OPERAND (instance, 0);
471086d6 5275 if (nonnull)
3d1c55e6 5276 {
5277 /* Just because we see an ADDR_EXPR doesn't mean we're dealing
5278 with a real object -- given &p->f, p can still be null. */
5279 tree t = get_base_address (instance);
5280 /* ??? Probably should check DECL_WEAK here. */
5281 if (t && DECL_P (t))
5282 *nonnull = 1;
5283 }
5284 return fixed_type_or_null (instance, nonnull, cdtorp);
471086d6 5285
5286 case COMPONENT_REF:
6078f68f 5287 /* If this component is really a base class reference, then the field
5288 itself isn't definitive. */
5289 if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
653e5405 5290 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
a7957883 5291 return fixed_type_or_null (TREE_OPERAND (instance, 1), nonnull, cdtorp);
471086d6 5292
471086d6 5293 case VAR_DECL:
5294 case FIELD_DECL:
5295 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5296 && IS_AGGR_TYPE (TREE_TYPE (TREE_TYPE (instance))))
5297 {
5298 if (nonnull)
5299 *nonnull = 1;
3428ae0a 5300 return TREE_TYPE (TREE_TYPE (instance));
471086d6 5301 }
96624a9e 5302 /* fall through... */
471086d6 5303 case TARGET_EXPR:
5304 case PARM_DECL:
8bfe5753 5305 case RESULT_DECL:
471086d6 5306 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
5307 {
5308 if (nonnull)
5309 *nonnull = 1;
3428ae0a 5310 return TREE_TYPE (instance);
471086d6 5311 }
a7957883 5312 else if (instance == current_class_ptr)
653e5405 5313 {
5314 if (nonnull)
5315 *nonnull = 1;
5316
5317 /* if we're in a ctor or dtor, we know our type. */
5318 if (DECL_LANG_SPECIFIC (current_function_decl)
5319 && (DECL_CONSTRUCTOR_P (current_function_decl)
5320 || DECL_DESTRUCTOR_P (current_function_decl)))
5321 {
5322 if (cdtorp)
5323 *cdtorp = 1;
5324 return TREE_TYPE (TREE_TYPE (instance));
5325 }
5326 }
a7957883 5327 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
653e5405 5328 {
5329 /* Reference variables should be references to objects. */
5330 if (nonnull)
471086d6 5331 *nonnull = 1;
9031d10b 5332
0cbb2e67 5333 /* DECL_VAR_MARKED_P is used to prevent recursion; a
5334 variable's initializer may refer to the variable
5335 itself. */
9031d10b 5336 if (TREE_CODE (instance) == VAR_DECL
0cbb2e67 5337 && DECL_INITIAL (instance)
5338 && !DECL_VAR_MARKED_P (instance))
5339 {
5340 tree type;
5341 DECL_VAR_MARKED_P (instance) = 1;
5342 type = fixed_type_or_null (DECL_INITIAL (instance),
5343 nonnull, cdtorp);
5344 DECL_VAR_MARKED_P (instance) = 0;
5345 return type;
5346 }
471086d6 5347 }
3428ae0a 5348 return NULL_TREE;
471086d6 5349
5350 default:
3428ae0a 5351 return NULL_TREE;
471086d6 5352 }
5353}
3428ae0a 5354
3160db1d 5355/* Return nonzero if the dynamic type of INSTANCE is known, and
4a2680fc 5356 equivalent to the static type. We also handle the case where
5357 INSTANCE is really a pointer. Return negative if this is a
5358 ctor/dtor. There the dynamic type is known, but this might not be
5359 the most derived base of the original object, and hence virtual
5360 bases may not be layed out according to this type.
3428ae0a 5361
5362 Used to determine whether the virtual function table is needed
5363 or not.
5364
5365 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
87019dfb 5366 of our knowledge of its type. *NONNULL should be initialized
5367 before this function is called. */
3428ae0a 5368
5369int
45baea8b 5370resolves_to_fixed_type_p (tree instance, int* nonnull)
3428ae0a 5371{
5372 tree t = TREE_TYPE (instance);
a7957883 5373 int cdtorp = 0;
9031d10b 5374
a7957883 5375 tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
3428ae0a 5376 if (fixed == NULL_TREE)
5377 return 0;
5378 if (POINTER_TYPE_P (t))
5379 t = TREE_TYPE (t);
a7957883 5380 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
5381 return 0;
5382 return cdtorp ? -1 : 1;
3428ae0a 5383}
5384
471086d6 5385\f
5386void
45baea8b 5387init_class_processing (void)
471086d6 5388{
5389 current_class_depth = 0;
0f2952a1 5390 current_class_stack_size = 10;
9031d10b 5391 current_class_stack
56e60747 5392 = XNEWVEC (struct class_stack_node, current_class_stack_size);
836c0125 5393 local_classes = VEC_alloc (tree, gc, 8);
776a1f2d 5394 sizeof_biggest_empty_class = size_zero_node;
471086d6 5395
518796ad 5396 ridpointers[(int) RID_PUBLIC] = access_public_node;
5397 ridpointers[(int) RID_PRIVATE] = access_private_node;
5398 ridpointers[(int) RID_PROTECTED] = access_protected_node;
471086d6 5399}
5400
fa26c7a9 5401/* Restore the cached PREVIOUS_CLASS_LEVEL. */
5402
5403static void
5404restore_class_cache (void)
5405{
fa26c7a9 5406 tree type;
fa26c7a9 5407
5408 /* We are re-entering the same class we just left, so we don't
5409 have to search the whole inheritance matrix to find all the
5410 decls to bind again. Instead, we install the cached
5411 class_shadowed list and walk through it binding names. */
5412 push_binding_level (previous_class_level);
5413 class_binding_level = previous_class_level;
fa26c7a9 5414 /* Restore IDENTIFIER_TYPE_VALUE. */
9031d10b 5415 for (type = class_binding_level->type_shadowed;
5416 type;
fa26c7a9 5417 type = TREE_CHAIN (type))
5418 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
5419}
5420
0a3b29ad 5421/* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
5422 appropriate for TYPE.
471086d6 5423
471086d6 5424 So that we may avoid calls to lookup_name, we cache the _TYPE
5425 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5426
5427 For multiple inheritance, we perform a two-pass depth-first search
fa26c7a9 5428 of the type lattice. */
471086d6 5429
5430void
f815eb0f 5431pushclass (tree type)
471086d6 5432{
637441cf 5433 class_stack_node_t csn;
5434
0c15230e 5435 type = TYPE_MAIN_VARIANT (type);
471086d6 5436
0f2952a1 5437 /* Make sure there is enough room for the new entry on the stack. */
9031d10b 5438 if (current_class_depth + 1 >= current_class_stack_size)
471086d6 5439 {
0f2952a1 5440 current_class_stack_size *= 2;
5441 current_class_stack
7ea410eb 5442 = XRESIZEVEC (struct class_stack_node, current_class_stack,
074ab442 5443 current_class_stack_size);
471086d6 5444 }
5445
0f2952a1 5446 /* Insert a new entry on the class stack. */
637441cf 5447 csn = current_class_stack + current_class_depth;
5448 csn->name = current_class_name;
5449 csn->type = current_class_type;
5450 csn->access = current_access_specifier;
5451 csn->names_used = 0;
5452 csn->hidden = 0;
0f2952a1 5453 current_class_depth++;
5454
5455 /* Now set up the new type. */
471086d6 5456 current_class_name = TYPE_NAME (type);
5457 if (TREE_CODE (current_class_name) == TYPE_DECL)
5458 current_class_name = DECL_NAME (current_class_name);
5459 current_class_type = type;
5460
0f2952a1 5461 /* By default, things in classes are private, while things in
5462 structures or unions are public. */
9031d10b 5463 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
5464 ? access_private_node
0f2952a1 5465 : access_public_node);
5466
598057ec 5467 if (previous_class_level
5468 && type != previous_class_level->this_entity
471086d6 5469 && current_class_depth == 1)
5470 {
5471 /* Forcibly remove any old class remnants. */
1eaf178d 5472 invalidate_class_lookup_cache ();
471086d6 5473 }
5474
9031d10b 5475 if (!previous_class_level
598057ec 5476 || type != previous_class_level->this_entity
5477 || current_class_depth > 1)
d09ae6d5 5478 pushlevel_class ();
f815eb0f 5479 else
fa26c7a9 5480 restore_class_cache ();
1eaf178d 5481}
5482
fa26c7a9 5483/* When we exit a toplevel class scope, we save its binding level so
5484 that we can restore it quickly. Here, we've entered some other
5485 class, so we must invalidate our cache. */
471086d6 5486
1eaf178d 5487void
45baea8b 5488invalidate_class_lookup_cache (void)
1eaf178d 5489{
598057ec 5490 previous_class_level = NULL;
471086d6 5491}
9031d10b 5492
471086d6 5493/* Get out of the current class scope. If we were in a class scope
8fc54128 5494 previously, that is the one popped to. */
96624a9e 5495
471086d6 5496void
45baea8b 5497popclass (void)
471086d6 5498{
656a7ba0 5499 poplevel_class ();
471086d6 5500
5501 current_class_depth--;
0f2952a1 5502 current_class_name = current_class_stack[current_class_depth].name;
5503 current_class_type = current_class_stack[current_class_depth].type;
5504 current_access_specifier = current_class_stack[current_class_depth].access;
1eaf178d 5505 if (current_class_stack[current_class_depth].names_used)
5506 splay_tree_delete (current_class_stack[current_class_depth].names_used);
471086d6 5507}
5508
637441cf 5509/* Mark the top of the class stack as hidden. */
5510
5511void
5512push_class_stack (void)
5513{
5514 if (current_class_depth)
5515 ++current_class_stack[current_class_depth - 1].hidden;
5516}
5517
5518/* Mark the top of the class stack as un-hidden. */
5519
5520void
5521pop_class_stack (void)
5522{
5523 if (current_class_depth)
5524 --current_class_stack[current_class_depth - 1].hidden;
5525}
5526
197c9df7 5527/* Returns 1 if the class type currently being defined is either T or
5528 a nested type of T. */
7fe9a727 5529
197c9df7 5530bool
45baea8b 5531currently_open_class (tree t)
7fe9a727 5532{
5533 int i;
197c9df7 5534
5535 /* We start looking from 1 because entry 0 is from global scope,
5536 and has no type. */
5537 for (i = current_class_depth; i > 0; --i)
637441cf 5538 {
197c9df7 5539 tree c;
5540 if (i == current_class_depth)
5541 c = current_class_type;
5542 else
5543 {
5544 if (current_class_stack[i].hidden)
5545 break;
5546 c = current_class_stack[i].type;
5547 }
5548 if (!c)
5549 continue;
5550 if (same_type_p (c, t))
5551 return true;
637441cf 5552 }
197c9df7 5553 return false;
7fe9a727 5554}
5555
fd8d6049 5556/* If either current_class_type or one of its enclosing classes are derived
5557 from T, return the appropriate type. Used to determine how we found
5558 something via unqualified lookup. */
5559
5560tree
45baea8b 5561currently_open_derived_class (tree t)
fd8d6049 5562{
5563 int i;
5564
6beb3f76 5565 /* The bases of a dependent type are unknown. */
7e9a6a16 5566 if (dependent_type_p (t))
5567 return NULL_TREE;
5568
3b91e7e7 5569 if (!current_class_type)
5570 return NULL_TREE;
5571
fd8d6049 5572 if (DERIVED_FROM_P (t, current_class_type))
5573 return current_class_type;
5574
5575 for (i = current_class_depth - 1; i > 0; --i)
637441cf 5576 {
5577 if (current_class_stack[i].hidden)
5578 break;
5579 if (DERIVED_FROM_P (t, current_class_stack[i].type))
5580 return current_class_stack[i].type;
5581 }
fd8d6049 5582
5583 return NULL_TREE;
5584}
5585
471086d6 5586/* When entering a class scope, all enclosing class scopes' names with
5f6526e1 5587 static meaning (static variables, static functions, types and
5588 enumerators) have to be visible. This recursive function calls
5589 pushclass for all enclosing class contexts until global or a local
5590 scope is reached. TYPE is the enclosed class. */
471086d6 5591
5592void
5f6526e1 5593push_nested_class (tree type)
471086d6 5594{
e581f478 5595 tree context;
5596
ce82f1c3 5597 /* A namespace might be passed in error cases, like A::B:C. */
9031d10b 5598 if (type == NULL_TREE
5599 || type == error_mark_node
ce82f1c3 5600 || TREE_CODE (type) == NAMESPACE_DECL
3d411d73 5601 || ! IS_AGGR_TYPE (type)
cd5dd2d8 5602 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
1e93ca27 5603 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
e581f478 5604 return;
9031d10b 5605
b0df6589 5606 context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
471086d6 5607
b2b68b19 5608 if (context && CLASS_TYPE_P (context))
5f6526e1 5609 push_nested_class (context);
f815eb0f 5610 pushclass (type);
471086d6 5611}
5612
0a3b29ad 5613/* Undoes a push_nested_class call. */
471086d6 5614
5615void
45baea8b 5616pop_nested_class (void)
471086d6 5617{
b0df6589 5618 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
471086d6 5619
8fc54128 5620 popclass ();
b2b68b19 5621 if (context && CLASS_TYPE_P (context))
8fc54128 5622 pop_nested_class ();
471086d6 5623}
5624
b53db2b0 5625/* Returns the number of extern "LANG" blocks we are nested within. */
5626
5627int
45baea8b 5628current_lang_depth (void)
b53db2b0 5629{
b943ebc0 5630 return VEC_length (tree, current_lang_base);
b53db2b0 5631}
5632
471086d6 5633/* Set global variables CURRENT_LANG_NAME to appropriate value
5634 so that behavior of name-mangling machinery is correct. */
5635
5636void
45baea8b 5637push_lang_context (tree name)
471086d6 5638{
b943ebc0 5639 VEC_safe_push (tree, gc, current_lang_base, current_lang_name);
471086d6 5640
47b15141 5641 if (name == lang_name_cplusplus)
471086d6 5642 {
471086d6 5643 current_lang_name = name;
5644 }
47b15141 5645 else if (name == lang_name_java)
5646 {
47b15141 5647 current_lang_name = name;
5648 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5649 (See record_builtin_java_type in decl.c.) However, that causes
5650 incorrect debug entries if these types are actually used.
c0af329c 5651 So we re-enable debug output after extern "Java". */
5ba7b7e9 5652 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
5653 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
5654 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
5655 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
5656 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
5657 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
5658 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
5659 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
47b15141 5660 }
471086d6 5661 else if (name == lang_name_c)
5662 {
471086d6 5663 current_lang_name = name;
5664 }
5665 else
1e5fcbe2 5666 error ("language string %<\"%E\"%> not recognized", name);
471086d6 5667}
9031d10b 5668
471086d6 5669/* Get out of the current language scope. */
96624a9e 5670
471086d6 5671void
45baea8b 5672pop_lang_context (void)
471086d6 5673{
b943ebc0 5674 current_lang_name = VEC_pop (tree, current_lang_base);
471086d6 5675}
471086d6 5676\f
5677/* Type instantiation routines. */
5678
3effa7a7 5679/* Given an OVERLOAD and a TARGET_TYPE, return the function that
5680 matches the TARGET_TYPE. If there is no satisfactory match, return
0e5cde0c 5681 error_mark_node, and issue an error & warning messages under
5682 control of FLAGS. Permit pointers to member function if FLAGS
5683 permits. If TEMPLATE_ONLY, the name of the overloaded function was
5684 a template-id, and EXPLICIT_TARGS are the explicitly provided
5685 template arguments. If OVERLOAD is for one or more member
5686 functions, then ACCESS_PATH is the base path used to reference
5687 those member functions. */
3effa7a7 5688
8417823c 5689static tree
9031d10b 5690resolve_address_of_overloaded_function (tree target_type,
45baea8b 5691 tree overload,
e608f30c 5692 tsubst_flags_t flags,
5693 bool template_only,
0e5cde0c 5694 tree explicit_targs,
5695 tree access_path)
8417823c 5696{
3effa7a7 5697 /* Here's what the standard says:
9031d10b 5698
3effa7a7 5699 [over.over]
5700
5701 If the name is a function template, template argument deduction
5702 is done, and if the argument deduction succeeds, the deduced
5703 arguments are used to generate a single template function, which
5704 is added to the set of overloaded functions considered.
5705
5706 Non-member functions and static member functions match targets of
5707 type "pointer-to-function" or "reference-to-function." Nonstatic
5708 member functions match targets of type "pointer-to-member
5709 function;" the function type of the pointer to member is used to
5710 select the member function from the set of overloaded member
5711 functions. If a nonstatic member function is selected, the
5712 reference to the overloaded function name is required to have the
5713 form of a pointer to member as described in 5.3.1.
5714
5715 If more than one function is selected, any template functions in
5716 the set are eliminated if the set also contains a non-template
5717 function, and any given template function is eliminated if the
5718 set contains a second template function that is more specialized
5719 than the first according to the partial ordering rules 14.5.5.2.
5720 After such eliminations, if any, there shall remain exactly one
5721 selected function. */
5722
5723 int is_ptrmem = 0;
5724 int is_reference = 0;
5725 /* We store the matches in a TREE_LIST rooted here. The functions
5726 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
5727 interoperability with most_specialized_instantiation. */
5728 tree matches = NULL_TREE;
6219a7c1 5729 tree fn;
3effa7a7 5730
2b77484d 5731 /* By the time we get here, we should be seeing only real
5732 pointer-to-member types, not the internal POINTER_TYPE to
5733 METHOD_TYPE representation. */
b4df430b 5734 gcc_assert (TREE_CODE (target_type) != POINTER_TYPE
5735 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
3effa7a7 5736
b4df430b 5737 gcc_assert (is_overloaded_fn (overload));
9031d10b 5738
3effa7a7 5739 /* Check that the TARGET_TYPE is reasonable. */
5740 if (TYPE_PTRFN_P (target_type))
ac601334 5741 /* This is OK. */;
3effa7a7 5742 else if (TYPE_PTRMEMFUNC_P (target_type))
5743 /* This is OK, too. */
5744 is_ptrmem = 1;
5745 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
5746 {
5747 /* This is OK, too. This comes from a conversion to reference
5748 type. */
5749 target_type = build_reference_type (target_type);
5750 is_reference = 1;
5751 }
9031d10b 5752 else
3effa7a7 5753 {
e608f30c 5754 if (flags & tf_error)
44ed1032 5755 error ("cannot resolve overloaded function %qD based on"
653e5405 5756 " conversion to type %qT",
5757 DECL_NAME (OVL_FUNCTION (overload)), target_type);
3effa7a7 5758 return error_mark_node;
5759 }
9031d10b 5760
3effa7a7 5761 /* If we can find a non-template function that matches, we can just
5762 use it. There's no point in generating template instantiations
5763 if we're just going to throw them out anyhow. But, of course, we
5764 can only do this when we don't *need* a template function. */
5765 if (!template_only)
5766 {
5767 tree fns;
5768
0a3b29ad 5769 for (fns = overload; fns; fns = OVL_NEXT (fns))
3effa7a7 5770 {
0a3b29ad 5771 tree fn = OVL_CURRENT (fns);
3effa7a7 5772 tree fntype;
8417823c 5773
3effa7a7 5774 if (TREE_CODE (fn) == TEMPLATE_DECL)
5775 /* We're not looking for templates just yet. */
5776 continue;
5777
5778 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5779 != is_ptrmem)
5780 /* We're looking for a non-static member, and this isn't
5781 one, or vice versa. */
5782 continue;
dd411876 5783
c1d4295f 5784 /* Ignore functions which haven't been explicitly
5785 declared. */
dd411876 5786 if (DECL_ANTICIPATED (fn))
5787 continue;
5788
3effa7a7 5789 /* See if there's a match. */
5790 fntype = TREE_TYPE (fn);
5791 if (is_ptrmem)
5792 fntype = build_ptrmemfunc_type (build_pointer_type (fntype));
5793 else if (!is_reference)
5794 fntype = build_pointer_type (fntype);
5795
db3bf8f6 5796 if (can_convert_arg (target_type, fntype, fn, LOOKUP_NORMAL))
b0652a4f 5797 matches = tree_cons (fn, NULL_TREE, matches);
3effa7a7 5798 }
5799 }
5800
5801 /* Now, if we've already got a match (or matches), there's no need
5802 to proceed to the template functions. But, if we don't have a
5803 match we need to look at them, too. */
9031d10b 5804 if (!matches)
8417823c 5805 {
3effa7a7 5806 tree target_fn_type;
5807 tree target_arg_types;
1b5e8868 5808 tree target_ret_type;
3effa7a7 5809 tree fns;
5810
5811 if (is_ptrmem)
6d158f4d 5812 target_fn_type
5813 = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (target_type));
8417823c 5814 else
6d158f4d 5815 target_fn_type = TREE_TYPE (target_type);
5816 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
1b5e8868 5817 target_ret_type = TREE_TYPE (target_fn_type);
2db0e9b3 5818
5819 /* Never do unification on the 'this' parameter. */
5820 if (TREE_CODE (target_fn_type) == METHOD_TYPE)
5821 target_arg_types = TREE_CHAIN (target_arg_types);
9031d10b 5822
0a3b29ad 5823 for (fns = overload; fns; fns = OVL_NEXT (fns))
3effa7a7 5824 {
0a3b29ad 5825 tree fn = OVL_CURRENT (fns);
3effa7a7 5826 tree instantiation;
5827 tree instantiation_type;
5828 tree targs;
5829
5830 if (TREE_CODE (fn) != TEMPLATE_DECL)
5831 /* We're only looking for templates. */
5832 continue;
5833
5834 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5835 != is_ptrmem)
6d158f4d 5836 /* We're not looking for a non-static member, and this is
3effa7a7 5837 one, or vice versa. */
5838 continue;
5839
3effa7a7 5840 /* Try to do argument deduction. */
19c3b3a6 5841 targs = make_tree_vec (DECL_NTPARMS (fn));
6d158f4d 5842 if (fn_type_unification (fn, explicit_targs, targs,
1b5e8868 5843 target_arg_types, target_ret_type,
db3bf8f6 5844 DEDUCE_EXACT, LOOKUP_NORMAL))
3effa7a7 5845 /* Argument deduction failed. */
5846 continue;
5847
5848 /* Instantiate the template. */
e608f30c 5849 instantiation = instantiate_template (fn, targs, flags);
3effa7a7 5850 if (instantiation == error_mark_node)
5851 /* Instantiation failed. */
5852 continue;
5853
5854 /* See if there's a match. */
5855 instantiation_type = TREE_TYPE (instantiation);
5856 if (is_ptrmem)
9031d10b 5857 instantiation_type =
3effa7a7 5858 build_ptrmemfunc_type (build_pointer_type (instantiation_type));
5859 else if (!is_reference)
5860 instantiation_type = build_pointer_type (instantiation_type);
074ab442 5861 if (can_convert_arg (target_type, instantiation_type, instantiation,
db3bf8f6 5862 LOOKUP_NORMAL))
b0652a4f 5863 matches = tree_cons (instantiation, fn, matches);
3effa7a7 5864 }
5865
5866 /* Now, remove all but the most specialized of the matches. */
5867 if (matches)
5868 {
2db0e9b3 5869 tree match = most_specialized_instantiation (matches);
3effa7a7 5870
5871 if (match != error_mark_node)
074ab442 5872 matches = tree_cons (TREE_PURPOSE (match),
5873 NULL_TREE,
d9db88e1 5874 NULL_TREE);
3effa7a7 5875 }
5876 }
5877
5878 /* Now we should have exactly one function in MATCHES. */
5879 if (matches == NULL_TREE)
5880 {
5881 /* There were *no* matches. */
e608f30c 5882 if (flags & tf_error)
3effa7a7 5883 {
653e5405 5884 error ("no matches converting function %qD to type %q#T",
5885 DECL_NAME (OVL_FUNCTION (overload)),
5886 target_type);
49df3f58 5887
5888 /* print_candidates expects a chain with the functions in
653e5405 5889 TREE_VALUE slots, so we cons one up here (we're losing anyway,
5890 so why be clever?). */
5891 for (; overload; overload = OVL_NEXT (overload))
5892 matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
b0652a4f 5893 matches);
9031d10b 5894
49df3f58 5895 print_candidates (matches);
3effa7a7 5896 }
5897 return error_mark_node;
8417823c 5898 }
3effa7a7 5899 else if (TREE_CHAIN (matches))
5900 {
5901 /* There were too many matches. */
5902
e608f30c 5903 if (flags & tf_error)
3effa7a7 5904 {
5905 tree match;
5906
653e5405 5907 error ("converting overloaded function %qD to type %q#T is ambiguous",
3effa7a7 5908 DECL_NAME (OVL_FUNCTION (overload)),
5909 target_type);
5910
5911 /* Since print_candidates expects the functions in the
5912 TREE_VALUE slot, we flip them here. */
5913 for (match = matches; match; match = TREE_CHAIN (match))
5914 TREE_VALUE (match) = TREE_PURPOSE (match);
5915
5916 print_candidates (matches);
5917 }
9031d10b 5918
3effa7a7 5919 return error_mark_node;
5920 }
5921
6219a7c1 5922 /* Good, exactly one match. Now, convert it to the correct type. */
5923 fn = TREE_PURPOSE (matches);
5924
d247bc42 5925 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
e608f30c 5926 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
30efa7ed 5927 {
d247bc42 5928 static int explained;
9031d10b 5929
e608f30c 5930 if (!(flags & tf_error))
653e5405 5931 return error_mark_node;
30efa7ed 5932
8a443577 5933 pedwarn ("assuming pointer to member %qD", fn);
d247bc42 5934 if (!explained)
653e5405 5935 {
5936 pedwarn ("(a pointer to member can only be formed with %<&%E%>)", fn);
5937 explained = 1;
5938 }
30efa7ed 5939 }
4d1539d1 5940
5941 /* If we're doing overload resolution purely for the purpose of
5942 determining conversion sequences, we should not consider the
5943 function used. If this conversion sequence is selected, the
5944 function will be marked as used at this point. */
5945 if (!(flags & tf_conv))
0e5cde0c 5946 {
5947 mark_used (fn);
5948 /* We could not check access when this expression was originally
5949 created since we did not know at that time to which function
5950 the expression referred. */
5951 if (DECL_FUNCTION_MEMBER_P (fn))
5952 {
5953 gcc_assert (access_path);
579bb663 5954 perform_or_defer_access_check (access_path, fn, fn);
0e5cde0c 5955 }
5956 }
bc935550 5957
6219a7c1 5958 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
5959 return build_unary_op (ADDR_EXPR, fn, 0);
5960 else
5961 {
5962 /* The target must be a REFERENCE_TYPE. Above, build_unary_op
5963 will mark the function as addressed, but here we must do it
5964 explicitly. */
9b86eec0 5965 cxx_mark_addressable (fn);
6219a7c1 5966
5967 return fn;
5968 }
8417823c 5969}
5970
dbdf67c6 5971/* This function will instantiate the type of the expression given in
5972 RHS to match the type of LHSTYPE. If errors exist, then return
e608f30c 5973 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
ffe5bd74 5974 we complain on errors. If we are not complaining, never modify rhs,
5975 as overload resolution wants to try many possible instantiations, in
5976 the hope that at least one will work.
9031d10b 5977
cc4d0855 5978 For non-recursive calls, LHSTYPE should be a function, pointer to
5979 function, or a pointer to member function. */
96624a9e 5980
471086d6 5981tree
45baea8b 5982instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
471086d6 5983{
e608f30c 5984 tsubst_flags_t flags_in = flags;
0e5cde0c 5985 tree access_path = NULL_TREE;
9031d10b 5986
4b471722 5987 flags &= ~tf_ptrmem_ok;
9031d10b 5988
471086d6 5989 if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
5990 {
e608f30c 5991 if (flags & tf_error)
905d4035 5992 error ("not enough type information");
471086d6 5993 return error_mark_node;
5994 }
5995
5996 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
dd53deb4 5997 {
56f8f075 5998 if (same_type_p (lhstype, TREE_TYPE (rhs)))
dd53deb4 5999 return rhs;
9031d10b 6000 if (flag_ms_extensions
0a3b29ad 6001 && TYPE_PTRMEMFUNC_P (lhstype)
6002 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
6003 /* Microsoft allows `A::f' to be resolved to a
6004 pointer-to-member. */
6005 ;
6006 else
6007 {
e608f30c 6008 if (flags & tf_error)
8a443577 6009 error ("argument of type %qT does not match %qT",
0a3b29ad 6010 TREE_TYPE (rhs), lhstype);
6011 return error_mark_node;
6012 }
dd53deb4 6013 }
471086d6 6014
4ac852cb 6015 if (TREE_CODE (rhs) == BASELINK)
0e5cde0c 6016 {
6017 access_path = BASELINK_ACCESS_BINFO (rhs);
6018 rhs = BASELINK_FUNCTIONS (rhs);
6019 }
4ac852cb 6020
ab6bb714 6021 /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
6022 deduce any type information. */
6023 if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
6024 {
6025 if (flags & tf_error)
6026 error ("not enough type information");
6027 return error_mark_node;
6028 }
6029
0e5cde0c 6030 /* There only a few kinds of expressions that may have a type
6031 dependent on overload resolution. */
6032 gcc_assert (TREE_CODE (rhs) == ADDR_EXPR
6033 || TREE_CODE (rhs) == COMPONENT_REF
6034 || TREE_CODE (rhs) == COMPOUND_EXPR
6035 || really_overloaded_fn (rhs));
6036
8417823c 6037 /* We don't overwrite rhs if it is an overloaded function.
6038 Copying it would destroy the tree link. */
6039 if (TREE_CODE (rhs) != OVERLOAD)
6040 rhs = copy_node (rhs);
ec10e4ad 6041
471086d6 6042 /* This should really only be used when attempting to distinguish
6043 what sort of a pointer to function we have. For now, any
6044 arithmetic operation which is not supported on pointers
6045 is rejected as an error. */
6046
6047 switch (TREE_CODE (rhs))
6048 {
471086d6 6049 case COMPONENT_REF:
e608f30c 6050 {
ab6bb714 6051 tree member = TREE_OPERAND (rhs, 1);
e608f30c 6052
ab6bb714 6053 member = instantiate_type (lhstype, member, flags);
6054 if (member != error_mark_node
e608f30c 6055 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
bd8962d5 6056 /* Do not lose object's side effects. */
ab6bb714 6057 return build2 (COMPOUND_EXPR, TREE_TYPE (member),
6058 TREE_OPERAND (rhs, 0), member);
6059 return member;
e608f30c 6060 }
471086d6 6061
f3da3176 6062 case OFFSET_REF:
42b9ec6a 6063 rhs = TREE_OPERAND (rhs, 1);
6064 if (BASELINK_P (rhs))
0e5cde0c 6065 return instantiate_type (lhstype, rhs, flags_in);
42b9ec6a 6066
f3da3176 6067 /* This can happen if we are forming a pointer-to-member for a
6068 member template. */
b4df430b 6069 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
42b9ec6a 6070
f3da3176 6071 /* Fall through. */
40eb0915 6072
b1cfe2be 6073 case TEMPLATE_ID_EXPR:
d9f88785 6074 {
6075 tree fns = TREE_OPERAND (rhs, 0);
6076 tree args = TREE_OPERAND (rhs, 1);
6077
30efa7ed 6078 return
e608f30c 6079 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
6080 /*template_only=*/true,
0e5cde0c 6081 args, access_path);
d9f88785 6082 }
b1cfe2be 6083
8417823c 6084 case OVERLOAD:
0a3b29ad 6085 case FUNCTION_DECL:
9031d10b 6086 return
e608f30c 6087 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
6088 /*template_only=*/false,
0e5cde0c 6089 /*explicit_targs=*/NULL_TREE,
6090 access_path);
8417823c 6091
471086d6 6092 case COMPOUND_EXPR:
ddb9bca7 6093 TREE_OPERAND (rhs, 0)
f267e809 6094 = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
471086d6 6095 if (TREE_OPERAND (rhs, 0) == error_mark_node)
6096 return error_mark_node;
ddb9bca7 6097 TREE_OPERAND (rhs, 1)
f267e809 6098 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
471086d6 6099 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6100 return error_mark_node;
6101
6102 TREE_TYPE (rhs) = lhstype;
6103 return rhs;
6104
f0b48940 6105 case ADDR_EXPR:
30efa7ed 6106 {
6107 if (PTRMEM_OK_P (rhs))
653e5405 6108 flags |= tf_ptrmem_ok;
9031d10b 6109
f0b48940 6110 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
30efa7ed 6111 }
f0b48940 6112
6113 case ERROR_MARK:
6114 return error_mark_node;
6115
6116 default:
092b1d6f 6117 gcc_unreachable ();
f0b48940 6118 }
092b1d6f 6119 return error_mark_node;
f0b48940 6120}
6121\f
6122/* Return the name of the virtual function pointer field
6123 (as an IDENTIFIER_NODE) for the given TYPE. Note that
6124 this may have to look back through base types to find the
6125 ultimate field name. (For single inheritance, these could
6126 all be the same name. Who knows for multiple inheritance). */
6127
6128static tree
45baea8b 6129get_vfield_name (tree type)
f0b48940 6130{
d9a369a2 6131 tree binfo, base_binfo;
f0b48940 6132 char *buf;
6133
d9a369a2 6134 for (binfo = TYPE_BINFO (type);
f6cc6a08 6135 BINFO_N_BASE_BINFOS (binfo);
d9a369a2 6136 binfo = base_binfo)
6137 {
6138 base_binfo = BINFO_BASE_BINFO (binfo, 0);
f0b48940 6139
d9a369a2 6140 if (BINFO_VIRTUAL_P (base_binfo)
6141 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
6142 break;
6143 }
9031d10b 6144
f0b48940 6145 type = BINFO_TYPE (binfo);
cc52f165 6146 buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
074ab442 6147 + TYPE_NAME_LENGTH (type) + 2);
e384b4be 6148 sprintf (buf, VFIELD_NAME_FORMAT,
6149 IDENTIFIER_POINTER (constructor_name (type)));
f0b48940 6150 return get_identifier (buf);
6151}
6152
6153void
45baea8b 6154print_class_statistics (void)
f0b48940 6155{
6156#ifdef GATHER_STATISTICS
6157 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6158 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
f0b48940 6159 if (n_vtables)
6160 {
6161 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6162 n_vtables, n_vtable_searches);
6163 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6164 n_vtable_entries, n_vtable_elems);
6165 }
6166#endif
6167}
6168
6169/* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6170 according to [class]:
653e5405 6171 The class-name is also inserted
f0b48940 6172 into the scope of the class itself. For purposes of access checking,
6173 the inserted class name is treated as if it were a public member name. */
6174
6175void
45baea8b 6176build_self_reference (void)
f0b48940 6177{
6178 tree name = constructor_name (current_class_type);
6179 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6180 tree saved_cas;
6181
6182 DECL_NONLOCAL (value) = 1;
6183 DECL_CONTEXT (value) = current_class_type;
6184 DECL_ARTIFICIAL (value) = 1;
56e75739 6185 SET_DECL_SELF_REFERENCE_P (value);
f0b48940 6186
6187 if (processing_template_decl)
6188 value = push_template_decl (value);
6189
6190 saved_cas = current_access_specifier;
6191 current_access_specifier = access_public_node;
6192 finish_member_declaration (value);
6193 current_access_specifier = saved_cas;
6194}
6195
6196/* Returns 1 if TYPE contains only padding bytes. */
6197
6198int
45baea8b 6199is_empty_class (tree type)
f0b48940 6200{
f0b48940 6201 if (type == error_mark_node)
6202 return 0;
6203
6204 if (! IS_AGGR_TYPE (type))
6205 return 0;
6206
14786872 6207 /* In G++ 3.2, whether or not a class was empty was determined by
6208 looking at its size. */
6209 if (abi_version_at_least (2))
6210 return CLASSTYPE_EMPTY_P (type);
6211 else
6212 return integer_zerop (CLASSTYPE_SIZE (type));
f0b48940 6213}
6214
d99a5b29 6215/* Returns true if TYPE contains an empty class. */
6216
6217static bool
6218contains_empty_class_p (tree type)
6219{
6220 if (is_empty_class (type))
6221 return true;
6222 if (CLASS_TYPE_P (type))
6223 {
6224 tree field;
f6cc6a08 6225 tree binfo;
6226 tree base_binfo;
d99a5b29 6227 int i;
6228
f6cc6a08 6229 for (binfo = TYPE_BINFO (type), i = 0;
6230 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6231 if (contains_empty_class_p (BINFO_TYPE (base_binfo)))
d99a5b29 6232 return true;
6233 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
23ed74d8 6234 if (TREE_CODE (field) == FIELD_DECL
6235 && !DECL_ARTIFICIAL (field)
6236 && is_empty_class (TREE_TYPE (field)))
d99a5b29 6237 return true;
6238 }
6239 else if (TREE_CODE (type) == ARRAY_TYPE)
6240 return contains_empty_class_p (TREE_TYPE (type));
6241 return false;
6242}
6243
f0b48940 6244/* Note that NAME was looked up while the current class was being
6245 defined and that the result of that lookup was DECL. */
6246
6247void
45baea8b 6248maybe_note_name_used_in_class (tree name, tree decl)
f0b48940 6249{
6250 splay_tree names_used;
6251
6252 /* If we're not defining a class, there's nothing to do. */
fa26c7a9 6253 if (!(innermost_scope_kind() == sk_class
6254 && TYPE_BEING_DEFINED (current_class_type)))
f0b48940 6255 return;
9031d10b 6256
f0b48940 6257 /* If there's already a binding for this NAME, then we don't have
6258 anything to worry about. */
9031d10b 6259 if (lookup_member (current_class_type, name,
fa26c7a9 6260 /*protect=*/0, /*want_type=*/false))
f0b48940 6261 return;
6262
6263 if (!current_class_stack[current_class_depth - 1].names_used)
6264 current_class_stack[current_class_depth - 1].names_used
6265 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6266 names_used = current_class_stack[current_class_depth - 1].names_used;
6267
6268 splay_tree_insert (names_used,
9031d10b 6269 (splay_tree_key) name,
f0b48940 6270 (splay_tree_value) decl);
6271}
6272
6273/* Note that NAME was declared (as DECL) in the current class. Check
6c0cc2cd 6274 to see that the declaration is valid. */
f0b48940 6275
6276void
45baea8b 6277note_name_declared_in_class (tree name, tree decl)
f0b48940 6278{
6279 splay_tree names_used;
6280 splay_tree_node n;
6281
6282 /* Look to see if we ever used this name. */
9031d10b 6283 names_used
f0b48940 6284 = current_class_stack[current_class_depth - 1].names_used;
6285 if (!names_used)
6286 return;
6287
6288 n = splay_tree_lookup (names_used, (splay_tree_key) name);
6289 if (n)
6290 {
6291 /* [basic.scope.class]
9031d10b 6292
f0b48940 6293 A name N used in a class S shall refer to the same declaration
6294 in its context and when re-evaluated in the completed scope of
6295 S. */
8a443577 6296 error ("declaration of %q#D", decl);
3cf8b391 6297 error ("changes meaning of %qD from %q+#D",
6298 DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
f0b48940 6299 }
6300}
6301
5ad590ad 6302/* Returns the VAR_DECL for the complete vtable associated with BINFO.
6303 Secondary vtables are merged with primary vtables; this function
6304 will return the VAR_DECL for the primary vtable. */
f0b48940 6305
59751e6c 6306tree
45baea8b 6307get_vtbl_decl_for_binfo (tree binfo)
59751e6c 6308{
6309 tree decl;
6310
6311 decl = BINFO_VTABLE (binfo);
6312 if (decl && TREE_CODE (decl) == PLUS_EXPR)
6313 {
b4df430b 6314 gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
59751e6c 6315 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
6316 }
6317 if (decl)
b4df430b 6318 gcc_assert (TREE_CODE (decl) == VAR_DECL);
59751e6c 6319 return decl;
6320}
6321
d0ceae4d 6322
95f3173a 6323/* Returns the binfo for the primary base of BINFO. If the resulting
6324 BINFO is a virtual base, and it is inherited elsewhere in the
6325 hierarchy, then the returned binfo might not be the primary base of
6326 BINFO in the complete object. Check BINFO_PRIMARY_P or
6327 BINFO_LOST_PRIMARY_P to be sure. */
d0ceae4d 6328
e75bce43 6329static tree
45baea8b 6330get_primary_binfo (tree binfo)
d0ceae4d 6331{
6332 tree primary_base;
9031d10b 6333
d0ceae4d 6334 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
6335 if (!primary_base)
6336 return NULL_TREE;
6337
e75bce43 6338 return copied_binfo (primary_base, binfo);
d0ceae4d 6339}
6340
3160db1d 6341/* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
364c0b82 6342
6343static int
45baea8b 6344maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
364c0b82 6345{
6346 if (!indented_p)
6347 fprintf (stream, "%*s", indent, "");
6348 return 1;
6349}
6350
95f3173a 6351/* Dump the offsets of all the bases rooted at BINFO to STREAM.
6352 INDENT should be zero when called from the top level; it is
6353 incremented recursively. IGO indicates the next expected BINFO in
6beb3f76 6354 inheritance graph ordering. */
59751e6c 6355
95f3173a 6356static tree
6357dump_class_hierarchy_r (FILE *stream,
653e5405 6358 int flags,
6359 tree binfo,
6360 tree igo,
6361 int indent)
f0b48940 6362{
364c0b82 6363 int indented = 0;
f6cc6a08 6364 tree base_binfo;
6365 int i;
9031d10b 6366
364c0b82 6367 indented = maybe_indent_hierarchy (stream, indent, 0);
6368 fprintf (stream, "%s (0x%lx) ",
eea75c62 6369 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
364c0b82 6370 (unsigned long) binfo);
95f3173a 6371 if (binfo != igo)
6372 {
6373 fprintf (stream, "alternative-path\n");
6374 return igo;
6375 }
6376 igo = TREE_CHAIN (binfo);
9031d10b 6377
f235209b 6378 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
f0b48940 6379 tree_low_cst (BINFO_OFFSET (binfo), 0));
f235209b 6380 if (is_empty_class (BINFO_TYPE (binfo)))
6381 fprintf (stream, " empty");
6382 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
6383 fprintf (stream, " nearly-empty");
57c28194 6384 if (BINFO_VIRTUAL_P (binfo))
95f3173a 6385 fprintf (stream, " virtual");
f235209b 6386 fprintf (stream, "\n");
f0b48940 6387
364c0b82 6388 indented = 0;
eea75c62 6389 if (BINFO_PRIMARY_P (binfo))
364c0b82 6390 {
6391 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6392 fprintf (stream, " primary-for %s (0x%lx)",
eea75c62 6393 type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
364c0b82 6394 TFF_PLAIN_IDENTIFIER),
eea75c62 6395 (unsigned long)BINFO_INHERITANCE_CHAIN (binfo));
364c0b82 6396 }
6397 if (BINFO_LOST_PRIMARY_P (binfo))
6398 {
6399 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6400 fprintf (stream, " lost-primary");
6401 }
6402 if (indented)
6403 fprintf (stream, "\n");
6404
6405 if (!(flags & TDF_SLIM))
6406 {
6407 int indented = 0;
9031d10b 6408
364c0b82 6409 if (BINFO_SUBVTT_INDEX (binfo))
6410 {
6411 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6412 fprintf (stream, " subvttidx=%s",
6413 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
6414 TFF_PLAIN_IDENTIFIER));
6415 }
6416 if (BINFO_VPTR_INDEX (binfo))
6417 {
6418 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6419 fprintf (stream, " vptridx=%s",
6420 expr_as_string (BINFO_VPTR_INDEX (binfo),
6421 TFF_PLAIN_IDENTIFIER));
6422 }
6423 if (BINFO_VPTR_FIELD (binfo))
6424 {
6425 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6426 fprintf (stream, " vbaseoffset=%s",
6427 expr_as_string (BINFO_VPTR_FIELD (binfo),
6428 TFF_PLAIN_IDENTIFIER));
6429 }
6430 if (BINFO_VTABLE (binfo))
6431 {
6432 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6433 fprintf (stream, " vptr=%s",
6434 expr_as_string (BINFO_VTABLE (binfo),
6435 TFF_PLAIN_IDENTIFIER));
6436 }
9031d10b 6437
364c0b82 6438 if (indented)
6439 fprintf (stream, "\n");
6440 }
95f3173a 6441
f6cc6a08 6442 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
6443 igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
9031d10b 6444
95f3173a 6445 return igo;
59751e6c 6446}
6447
6448/* Dump the BINFO hierarchy for T. */
6449
364c0b82 6450static void
4880ab99 6451dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
59751e6c 6452{
364c0b82 6453 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6454 fprintf (stream, " size=%lu align=%lu\n",
6455 (unsigned long)(tree_low_cst (TYPE_SIZE (t), 0) / BITS_PER_UNIT),
6456 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
95f3173a 6457 fprintf (stream, " base size=%lu base align=%lu\n",
6458 (unsigned long)(tree_low_cst (TYPE_SIZE (CLASSTYPE_AS_BASE (t)), 0)
6459 / BITS_PER_UNIT),
6460 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
6461 / BITS_PER_UNIT));
6462 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
364c0b82 6463 fprintf (stream, "\n");
4880ab99 6464}
6465
a5268b2f 6466/* Debug interface to hierarchy dumping. */
4880ab99 6467
674106a4 6468void
4880ab99 6469debug_class (tree t)
6470{
6471 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
6472}
6473
6474static void
6475dump_class_hierarchy (tree t)
6476{
6477 int flags;
6478 FILE *stream = dump_begin (TDI_class, &flags);
6479
6480 if (stream)
6481 {
6482 dump_class_hierarchy_1 (stream, flags, t);
6483 dump_end (TDI_class, stream);
6484 }
364c0b82 6485}
6486
6487static void
45baea8b 6488dump_array (FILE * stream, tree decl)
364c0b82 6489{
c75b4594 6490 tree value;
6491 unsigned HOST_WIDE_INT ix;
364c0b82 6492 HOST_WIDE_INT elt;
6493 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
6494
6495 elt = (tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))), 0)
6496 / BITS_PER_UNIT);
6497 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
6498 fprintf (stream, " %s entries",
6499 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
6500 TFF_PLAIN_IDENTIFIER));
6501 fprintf (stream, "\n");
6502
c75b4594 6503 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
6504 ix, value)
cfec814e 6505 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
c75b4594 6506 expr_as_string (value, TFF_PLAIN_IDENTIFIER));
364c0b82 6507}
6508
6509static void
45baea8b 6510dump_vtable (tree t, tree binfo, tree vtable)
364c0b82 6511{
6512 int flags;
6513 FILE *stream = dump_begin (TDI_class, &flags);
6514
6515 if (!stream)
6516 return;
6517
6518 if (!(flags & TDF_SLIM))
f235209b 6519 {
364c0b82 6520 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
9031d10b 6521
364c0b82 6522 fprintf (stream, "%s for %s",
6523 ctor_vtbl_p ? "Construction vtable" : "Vtable",
eea75c62 6524 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
364c0b82 6525 if (ctor_vtbl_p)
6526 {
57c28194 6527 if (!BINFO_VIRTUAL_P (binfo))
364c0b82 6528 fprintf (stream, " (0x%lx instance)", (unsigned long)binfo);
6529 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6530 }
6531 fprintf (stream, "\n");
6532 dump_array (stream, vtable);
6533 fprintf (stream, "\n");
f235209b 6534 }
9031d10b 6535
364c0b82 6536 dump_end (TDI_class, stream);
6537}
6538
6539static void
45baea8b 6540dump_vtt (tree t, tree vtt)
364c0b82 6541{
6542 int flags;
6543 FILE *stream = dump_begin (TDI_class, &flags);
6544
6545 if (!stream)
6546 return;
6547
6548 if (!(flags & TDF_SLIM))
6549 {
6550 fprintf (stream, "VTT for %s\n",
6551 type_as_string (t, TFF_PLAIN_IDENTIFIER));
6552 dump_array (stream, vtt);
6553 fprintf (stream, "\n");
6554 }
9031d10b 6555
364c0b82 6556 dump_end (TDI_class, stream);
f0b48940 6557}
6558
4880ab99 6559/* Dump a function or thunk and its thunkees. */
6560
6561static void
6562dump_thunk (FILE *stream, int indent, tree thunk)
6563{
6564 static const char spaces[] = " ";
6565 tree name = DECL_NAME (thunk);
6566 tree thunks;
9031d10b 6567
4880ab99 6568 fprintf (stream, "%.*s%p %s %s", indent, spaces,
6569 (void *)thunk,
6570 !DECL_THUNK_P (thunk) ? "function"
6571 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
6572 name ? IDENTIFIER_POINTER (name) : "<unset>");
6709b660 6573 if (DECL_THUNK_P (thunk))
4880ab99 6574 {
6575 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
6576 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
6577
6578 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
6579 if (!virtual_adjust)
6580 /*NOP*/;
6581 else if (DECL_THIS_THUNK_P (thunk))
6582 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
6583 tree_low_cst (virtual_adjust, 0));
6584 else
6585 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
6586 tree_low_cst (BINFO_VPTR_FIELD (virtual_adjust), 0),
6587 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
6709b660 6588 if (THUNK_ALIAS (thunk))
6589 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
4880ab99 6590 }
6591 fprintf (stream, "\n");
6592 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
6593 dump_thunk (stream, indent + 2, thunks);
6594}
6595
6596/* Dump the thunks for FN. */
6597
674106a4 6598void
4880ab99 6599debug_thunks (tree fn)
6600{
6601 dump_thunk (stderr, 0, fn);
6602}
6603
f0b48940 6604/* Virtual function table initialization. */
6605
6606/* Create all the necessary vtables for T and its base classes. */
6607
6608static void
45baea8b 6609finish_vtbls (tree t)
f0b48940 6610{
5ad590ad 6611 tree list;
6612 tree vbase;
f0b48940 6613
5ad590ad 6614 /* We lay out the primary and secondary vtables in one contiguous
6615 vtable. The primary vtable is first, followed by the non-virtual
6616 secondary vtables in inheritance graph order. */
2cfde4f3 6617 list = build_tree_list (BINFO_VTABLE (TYPE_BINFO (t)), NULL_TREE);
5ad590ad 6618 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t),
6619 TYPE_BINFO (t), t, list);
9031d10b 6620
5ad590ad 6621 /* Then come the virtual bases, also in inheritance graph order. */
6622 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
6623 {
57c28194 6624 if (!BINFO_VIRTUAL_P (vbase))
5ad590ad 6625 continue;
95f3173a 6626 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), t, list);
e52a7ff3 6627 }
6628
2cfde4f3 6629 if (BINFO_VTABLE (TYPE_BINFO (t)))
5ad590ad 6630 initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list));
f0b48940 6631}
6632
6633/* Initialize the vtable for BINFO with the INITS. */
6634
6635static void
45baea8b 6636initialize_vtable (tree binfo, tree inits)
f0b48940 6637{
f0b48940 6638 tree decl;
6639
6640 layout_vtable_decl (binfo, list_length (inits));
59751e6c 6641 decl = get_vtbl_decl_for_binfo (binfo);
aff47ac3 6642 initialize_artificial_var (decl, inits);
364c0b82 6643 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
bd5edd91 6644}
6645
f235209b 6646/* Build the VTT (virtual table table) for T.
6647 A class requires a VTT if it has virtual bases.
9031d10b 6648
f235209b 6649 This holds
6650 1 - primary virtual pointer for complete object T
8458d888 6651 2 - secondary VTTs for each direct non-virtual base of T which requires a
6652 VTT
f235209b 6653 3 - secondary virtual pointers for each direct or indirect base of T which
6654 has virtual bases or is reachable via a virtual path from T.
6655 4 - secondary VTTs for each direct or indirect virtual base of T.
9031d10b 6656
f235209b 6657 Secondary VTTs look like complete object VTTs without part 4. */
bd5edd91 6658
6659static void
45baea8b 6660build_vtt (tree t)
bd5edd91 6661{
6662 tree inits;
6663 tree type;
6664 tree vtt;
0ce25b06 6665 tree index;
bd5edd91 6666
bd5edd91 6667 /* Build up the initializers for the VTT. */
6668 inits = NULL_TREE;
0ce25b06 6669 index = size_zero_node;
f235209b 6670 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
bd5edd91 6671
6672 /* If we didn't need a VTT, we're done. */
6673 if (!inits)
6674 return;
6675
6676 /* Figure out the type of the VTT. */
82ef7cb5 6677 type = build_index_type (size_int (list_length (inits) - 1));
bd5edd91 6678 type = build_cplus_array_type (const_ptr_type_node, type);
9031d10b 6679
bd5edd91 6680 /* Now, build the VTT object itself. */
b5ae5c89 6681 vtt = build_vtable (t, mangle_vtt_for_type (t), type);
aff47ac3 6682 initialize_artificial_var (vtt, inits);
6fc7a923 6683 /* Add the VTT to the vtables list. */
6684 TREE_CHAIN (vtt) = TREE_CHAIN (CLASSTYPE_VTABLES (t));
6685 TREE_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
364c0b82 6686
6687 dump_vtt (t, vtt);
bd5edd91 6688}
6689
edb5aec9 6690/* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
6691 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
6692 and CHAIN the vtable pointer for this binfo after construction is
c0af329c 6693 complete. VALUE can also be another BINFO, in which case we recurse. */
edb5aec9 6694
6695static tree
45baea8b 6696binfo_ctor_vtable (tree binfo)
edb5aec9 6697{
6698 tree vt;
6699
6700 while (1)
6701 {
6702 vt = BINFO_VTABLE (binfo);
6703 if (TREE_CODE (vt) == TREE_LIST)
6704 vt = TREE_VALUE (vt);
3cb98335 6705 if (TREE_CODE (vt) == TREE_BINFO)
edb5aec9 6706 binfo = vt;
6707 else
6708 break;
6709 }
6710
6711 return vt;
6712}
6713
98dc77cd 6714/* Data for secondary VTT initialization. */
6715typedef struct secondary_vptr_vtt_init_data_s
6716{
6717 /* Is this the primary VTT? */
6718 bool top_level_p;
6719
6720 /* Current index into the VTT. */
6721 tree index;
6722
6723 /* TREE_LIST of initializers built up. */
6724 tree inits;
6725
6726 /* The type being constructed by this secondary VTT. */
6727 tree type_being_constructed;
6728} secondary_vptr_vtt_init_data;
6729
bd5edd91 6730/* Recursively build the VTT-initializer for BINFO (which is in the
f235209b 6731 hierarchy dominated by T). INITS points to the end of the initializer
6732 list to date. INDEX is the VTT index where the next element will be
6733 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
6734 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
6735 for virtual bases of T. When it is not so, we build the constructor
6736 vtables for the BINFO-in-T variant. */
bd5edd91 6737
6738static tree *
98dc77cd 6739build_vtt_inits (tree binfo, tree t, tree *inits, tree *index)
bd5edd91 6740{
6741 int i;
6742 tree b;
6743 tree init;
6744 tree secondary_vptrs;
98dc77cd 6745 secondary_vptr_vtt_init_data data;
5e8d5ca1 6746 int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
bd5edd91 6747
6748 /* We only need VTTs for subobjects with virtual bases. */
1f0b839e 6749 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
bd5edd91 6750 return inits;
6751
6752 /* We need to use a construction vtable if this is not the primary
6753 VTT. */
f235209b 6754 if (!top_level_p)
0ce25b06 6755 {
6756 build_ctor_vtbl_group (binfo, t);
6757
6758 /* Record the offset in the VTT where this sub-VTT can be found. */
6759 BINFO_SUBVTT_INDEX (binfo) = *index;
6760 }
bd5edd91 6761
6762 /* Add the address of the primary vtable for the complete object. */
edb5aec9 6763 init = binfo_ctor_vtable (binfo);
bd5edd91 6764 *inits = build_tree_list (NULL_TREE, init);
6765 inits = &TREE_CHAIN (*inits);
f235209b 6766 if (top_level_p)
6767 {
b4df430b 6768 gcc_assert (!BINFO_VPTR_INDEX (binfo));
f235209b 6769 BINFO_VPTR_INDEX (binfo) = *index;
6770 }
0ce25b06 6771 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
9031d10b 6772
bd5edd91 6773 /* Recursively add the secondary VTTs for non-virtual bases. */
f6cc6a08 6774 for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
6775 if (!BINFO_VIRTUAL_P (b))
398b91ef 6776 inits = build_vtt_inits (b, t, inits, index);
9031d10b 6777
bd5edd91 6778 /* Add secondary virtual pointers for all subobjects of BINFO with
f235209b 6779 either virtual bases or reachable along a virtual path, except
6780 subobjects that are non-virtual primary bases. */
98dc77cd 6781 data.top_level_p = top_level_p;
6782 data.index = *index;
6783 data.inits = NULL;
6784 data.type_being_constructed = BINFO_TYPE (binfo);
9031d10b 6785
398b91ef 6786 dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
f235209b 6787
98dc77cd 6788 *index = data.index;
bd5edd91 6789
6790 /* The secondary vptrs come back in reverse order. After we reverse
6791 them, and add the INITS, the last init will be the first element
6792 of the chain. */
98dc77cd 6793 secondary_vptrs = data.inits;
bd5edd91 6794 if (secondary_vptrs)
6795 {
6796 *inits = nreverse (secondary_vptrs);
6797 inits = &TREE_CHAIN (secondary_vptrs);
b4df430b 6798 gcc_assert (*inits == NULL_TREE);
bd5edd91 6799 }
6800
f235209b 6801 if (top_level_p)
98dc77cd 6802 /* Add the secondary VTTs for virtual bases in inheritance graph
6803 order. */
6c6e3d32 6804 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
6805 {
57c28194 6806 if (!BINFO_VIRTUAL_P (b))
6c6e3d32 6807 continue;
9031d10b 6808
95f3173a 6809 inits = build_vtt_inits (b, t, inits, index);
6c6e3d32 6810 }
98dc77cd 6811 else
6812 /* Remove the ctor vtables we created. */
398b91ef 6813 dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
bd5edd91 6814
6815 return inits;
6816}
6817
78a8ed03 6818/* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
98dc77cd 6819 in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure. */
bd5edd91 6820
6821static tree
98dc77cd 6822dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
bd5edd91 6823{
98dc77cd 6824 secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
bd5edd91 6825
bd5edd91 6826 /* We don't care about bases that don't have vtables. */
6827 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
398b91ef 6828 return dfs_skip_bases;
bd5edd91 6829
98dc77cd 6830 /* We're only interested in proper subobjects of the type being
6831 constructed. */
5e8d5ca1 6832 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
bd5edd91 6833 return NULL_TREE;
6834
98dc77cd 6835 /* We're only interested in bases with virtual bases or reachable
6836 via a virtual path from the type being constructed. */
398b91ef 6837 if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
6838 || binfo_via_virtual (binfo, data->type_being_constructed)))
6839 return dfs_skip_bases;
9031d10b 6840
398b91ef 6841 /* We're not interested in non-virtual primary bases. */
6842 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
04a332ef 6843 return NULL_TREE;
9031d10b 6844
0ce25b06 6845 /* Record the index where this secondary vptr can be found. */
98dc77cd 6846 if (data->top_level_p)
f235209b 6847 {
b4df430b 6848 gcc_assert (!BINFO_VPTR_INDEX (binfo));
98dc77cd 6849 BINFO_VPTR_INDEX (binfo) = data->index;
0ce25b06 6850
98dc77cd 6851 if (BINFO_VIRTUAL_P (binfo))
6852 {
653e5405 6853 /* It's a primary virtual base, and this is not a
6854 construction vtable. Find the base this is primary of in
6855 the inheritance graph, and use that base's vtable
6856 now. */
98dc77cd 6857 while (BINFO_PRIMARY_P (binfo))
6858 binfo = BINFO_INHERITANCE_CHAIN (binfo);
6859 }
f235209b 6860 }
9031d10b 6861
98dc77cd 6862 /* Add the initializer for the secondary vptr itself. */
6863 data->inits = tree_cons (NULL_TREE, binfo_ctor_vtable (binfo), data->inits);
bd5edd91 6864
98dc77cd 6865 /* Advance the vtt index. */
6866 data->index = size_binop (PLUS_EXPR, data->index,
6867 TYPE_SIZE_UNIT (ptr_type_node));
f235209b 6868
98dc77cd 6869 return NULL_TREE;
f235209b 6870}
6871
98dc77cd 6872/* Called from build_vtt_inits via dfs_walk. After building
6873 constructor vtables and generating the sub-vtt from them, we need
6874 to restore the BINFO_VTABLES that were scribbled on. DATA is the
6875 binfo of the base whose sub vtt was generated. */
bd5edd91 6876
6877static tree
45baea8b 6878dfs_fixup_binfo_vtbls (tree binfo, void* data)
bd5edd91 6879{
98dc77cd 6880 tree vtable = BINFO_VTABLE (binfo);
bd5edd91 6881
398b91ef 6882 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
6883 /* If this class has no vtable, none of its bases do. */
6884 return dfs_skip_bases;
9031d10b 6885
398b91ef 6886 if (!vtable)
6887 /* This might be a primary base, so have no vtable in this
6888 hierarchy. */
6889 return NULL_TREE;
9031d10b 6890
bd5edd91 6891 /* If we scribbled the construction vtable vptr into BINFO, clear it
6892 out now. */
398b91ef 6893 if (TREE_CODE (vtable) == TREE_LIST
98dc77cd 6894 && (TREE_PURPOSE (vtable) == (tree) data))
6895 BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
bd5edd91 6896
6897 return NULL_TREE;
6898}
6899
6900/* Build the construction vtable group for BINFO which is in the
6901 hierarchy dominated by T. */
6902
6903static void
45baea8b 6904build_ctor_vtbl_group (tree binfo, tree t)
bd5edd91 6905{
6906 tree list;
6907 tree type;
6908 tree vtbl;
6909 tree inits;
6910 tree id;
6c6e3d32 6911 tree vbase;
bd5edd91 6912
1bea8da8 6913 /* See if we've already created this construction vtable group. */
606b494c 6914 id = mangle_ctor_vtbl_for_type (t, binfo);
bd5edd91 6915 if (IDENTIFIER_GLOBAL_VALUE (id))
6916 return;
6917
5e8d5ca1 6918 gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
bd5edd91 6919 /* Build a version of VTBL (with the wrong type) for use in
6920 constructing the addresses of secondary vtables in the
6921 construction vtable group. */
f753592a 6922 vtbl = build_vtable (t, id, ptr_type_node);
4fc9a8ec 6923 DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
bd5edd91 6924 list = build_tree_list (vtbl, NULL_TREE);
6925 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
6926 binfo, t, list);
f235209b 6927
6928 /* Add the vtables for each of our virtual bases using the vbase in T
6929 binfo. */
9031d10b 6930 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
6931 vbase;
6c6e3d32 6932 vbase = TREE_CHAIN (vbase))
6933 {
6934 tree b;
6935
57c28194 6936 if (!BINFO_VIRTUAL_P (vbase))
6c6e3d32 6937 continue;
95f3173a 6938 b = copied_binfo (vbase, binfo);
9031d10b 6939
95f3173a 6940 accumulate_vtbl_inits (b, vbase, binfo, t, list);
6c6e3d32 6941 }
4e033a3b 6942 inits = TREE_VALUE (list);
bd5edd91 6943
6944 /* Figure out the type of the construction vtable. */
82ef7cb5 6945 type = build_index_type (size_int (list_length (inits) - 1));
bd5edd91 6946 type = build_cplus_array_type (vtable_entry_type, type);
6947 TREE_TYPE (vtbl) = type;
6948
6949 /* Initialize the construction vtable. */
6fc7a923 6950 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
aff47ac3 6951 initialize_artificial_var (vtbl, inits);
364c0b82 6952 dump_vtable (t, binfo, vtbl);
bd5edd91 6953}
6954
f235209b 6955/* Add the vtbl initializers for BINFO (and its bases other than
6956 non-virtual primaries) to the list of INITS. BINFO is in the
6957 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
6958 the constructor the vtbl inits should be accumulated for. (If this
6959 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
6960 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
6961 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
6962 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
6963 but are not necessarily the same in terms of layout. */
f0b48940 6964
6965static void
45baea8b 6966accumulate_vtbl_inits (tree binfo,
653e5405 6967 tree orig_binfo,
6968 tree rtti_binfo,
6969 tree t,
6970 tree inits)
f0b48940 6971{
bd5edd91 6972 int i;
f6cc6a08 6973 tree base_binfo;
5e8d5ca1 6974 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
bd5edd91 6975
5e8d5ca1 6976 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
bd5edd91 6977
c0af329c 6978 /* If it doesn't have a vptr, we don't do anything. */
f1b15480 6979 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
6980 return;
9031d10b 6981
bd5edd91 6982 /* If we're building a construction vtable, we're not interested in
6983 subobjects that don't require construction vtables. */
9031d10b 6984 if (ctor_vtbl_p
1f0b839e 6985 && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
f235209b 6986 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
bd5edd91 6987 return;
6988
6989 /* Build the initializers for the BINFO-in-T vtable. */
9031d10b 6990 TREE_VALUE (inits)
bd5edd91 6991 = chainon (TREE_VALUE (inits),
6992 dfs_accumulate_vtbl_inits (binfo, orig_binfo,
6993 rtti_binfo, t, inits));
9031d10b 6994
59751e6c 6995 /* Walk the BINFO and its bases. We walk in preorder so that as we
6996 initialize each vtable we can figure out at what offset the
bd5edd91 6997 secondary vtable lies from the primary vtable. We can't use
6998 dfs_walk here because we need to iterate through bases of BINFO
6999 and RTTI_BINFO simultaneously. */
f6cc6a08 7000 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
bd5edd91 7001 {
bd5edd91 7002 /* Skip virtual bases. */
57c28194 7003 if (BINFO_VIRTUAL_P (base_binfo))
bd5edd91 7004 continue;
7005 accumulate_vtbl_inits (base_binfo,
2cfde4f3 7006 BINFO_BASE_BINFO (orig_binfo, i),
f235209b 7007 rtti_binfo, t,
bd5edd91 7008 inits);
7009 }
f0b48940 7010}
7011
5ad590ad 7012/* Called from accumulate_vtbl_inits. Returns the initializers for
7013 the BINFO vtable. */
f0b48940 7014
7015static tree
45baea8b 7016dfs_accumulate_vtbl_inits (tree binfo,
653e5405 7017 tree orig_binfo,
7018 tree rtti_binfo,
7019 tree t,
7020 tree l)
f0b48940 7021{
bd5edd91 7022 tree inits = NULL_TREE;
f235209b 7023 tree vtbl = NULL_TREE;
5e8d5ca1 7024 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
f235209b 7025
edb5aec9 7026 if (ctor_vtbl_p
57c28194 7027 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
f235209b 7028 {
edb5aec9 7029 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
7030 primary virtual base. If it is not the same primary in
7031 the hierarchy of T, we'll need to generate a ctor vtable
7032 for it, to place at its location in T. If it is the same
7033 primary, we still need a VTT entry for the vtable, but it
7034 should point to the ctor vtable for the base it is a
7035 primary for within the sub-hierarchy of RTTI_BINFO.
9031d10b 7036
edb5aec9 7037 There are three possible cases:
9031d10b 7038
edb5aec9 7039 1) We are in the same place.
7040 2) We are a primary base within a lost primary virtual base of
7041 RTTI_BINFO.
55af5e57 7042 3) We are primary to something not a base of RTTI_BINFO. */
9031d10b 7043
eea75c62 7044 tree b;
edb5aec9 7045 tree last = NULL_TREE;
0f82ebf2 7046
edb5aec9 7047 /* First, look through the bases we are primary to for RTTI_BINFO
7048 or a virtual base. */
eea75c62 7049 b = binfo;
7050 while (BINFO_PRIMARY_P (b))
1bea8da8 7051 {
eea75c62 7052 b = BINFO_INHERITANCE_CHAIN (b);
edb5aec9 7053 last = b;
57c28194 7054 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
eea75c62 7055 goto found;
1bea8da8 7056 }
edb5aec9 7057 /* If we run out of primary links, keep looking down our
7058 inheritance chain; we might be an indirect primary. */
eea75c62 7059 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
7060 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7061 break;
7062 found:
9031d10b 7063
edb5aec9 7064 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
7065 base B and it is a base of RTTI_BINFO, this is case 2. In
7066 either case, we share our vtable with LAST, i.e. the
7067 derived-most base within B of which we are a primary. */
7068 if (b == rtti_binfo
97c118b9 7069 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
55af5e57 7070 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
7071 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
7072 binfo_ctor_vtable after everything's been set up. */
7073 vtbl = last;
edb5aec9 7074
55af5e57 7075 /* Otherwise, this is case 3 and we get our own. */
f235209b 7076 }
95f3173a 7077 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
f235209b 7078 return inits;
1bea8da8 7079
f235209b 7080 if (!vtbl)
f0b48940 7081 {
59751e6c 7082 tree index;
7083 int non_fn_entries;
7084
7085 /* Compute the initializer for this vtable. */
bd5edd91 7086 inits = build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
3c4a383e 7087 &non_fn_entries);
59751e6c 7088
bd5edd91 7089 /* Figure out the position to which the VPTR should point. */
59751e6c 7090 vtbl = TREE_PURPOSE (l);
4ee9c684 7091 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, vtbl);
59751e6c 7092 index = size_binop (PLUS_EXPR,
7093 size_int (non_fn_entries),
7094 size_int (list_length (TREE_VALUE (l))));
bd5edd91 7095 index = size_binop (MULT_EXPR,
7096 TYPE_SIZE_UNIT (vtable_entry_type),
7097 index);
831d52a2 7098 vtbl = build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, index);
f235209b 7099 }
bd5edd91 7100
1bea8da8 7101 if (ctor_vtbl_p)
f235209b 7102 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
7103 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
7104 straighten this out. */
7105 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
57c28194 7106 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
1bea8da8 7107 inits = NULL_TREE;
7108 else
7109 /* For an ordinary vtable, set BINFO_VTABLE. */
7110 BINFO_VTABLE (binfo) = vtbl;
f0b48940 7111
bd5edd91 7112 return inits;
f0b48940 7113}
7114
96efc79d 7115static GTY(()) tree abort_fndecl_addr;
7116
8458d888 7117/* Construct the initializer for BINFO's virtual function table. BINFO
3c4a383e 7118 is part of the hierarchy dominated by T. If we're building a
bd5edd91 7119 construction vtable, the ORIG_BINFO is the binfo we should use to
f235209b 7120 find the actual function pointers to put in the vtable - but they
7121 can be overridden on the path to most-derived in the graph that
7122 ORIG_BINFO belongs. Otherwise,
d0ceae4d 7123 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
bd5edd91 7124 BINFO that should be indicated by the RTTI information in the
7125 vtable; it will be a base class of T, rather than T itself, if we
7126 are building a construction vtable.
3c4a383e 7127
7128 The value returned is a TREE_LIST suitable for wrapping in a
7129 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
7130 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
9031d10b 7131 number of non-function entries in the vtable.
d0ceae4d 7132
7133 It might seem that this function should never be called with a
f235209b 7134 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
d0ceae4d 7135 base is always subsumed by a derived class vtable. However, when
f235209b 7136 we are building construction vtables, we do build vtables for
d0ceae4d 7137 primary bases; we need these while the primary base is being
7138 constructed. */
f0b48940 7139
7140static tree
45baea8b 7141build_vtbl_initializer (tree binfo,
653e5405 7142 tree orig_binfo,
7143 tree t,
7144 tree rtti_binfo,
7145 int* non_fn_entries_p)
f0b48940 7146{
70050b43 7147 tree v, b;
d0ceae4d 7148 tree vfun_inits;
d0ceae4d 7149 vtbl_init_data vid;
97c118b9 7150 unsigned ix;
7151 tree vbinfo;
046bfc77 7152 VEC(tree,gc) *vbases;
9031d10b 7153
d0ceae4d 7154 /* Initialize VID. */
93d3b7de 7155 memset (&vid, 0, sizeof (vid));
d0ceae4d 7156 vid.binfo = binfo;
7157 vid.derived = t;
f8f03982 7158 vid.rtti_binfo = rtti_binfo;
d0ceae4d 7159 vid.last_init = &vid.inits;
5e8d5ca1 7160 vid.primary_vtbl_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
7161 vid.ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
6fc7a923 7162 vid.generate_vcall_entries = true;
59751e6c 7163 /* The first vbase or vcall offset is at index -3 in the vtable. */
85390276 7164 vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
59751e6c 7165
cc1fb265 7166 /* Add entries to the vtable for RTTI. */
f8f03982 7167 build_rtti_vtbl_entries (binfo, &vid);
cc1fb265 7168
dff07cdd 7169 /* Create an array for keeping track of the functions we've
7170 processed. When we see multiple functions with the same
7171 signature, we share the vcall offsets. */
cc331293 7172 vid.fns = VEC_alloc (tree, gc, 32);
59751e6c 7173 /* Add the vcall and vbase offset entries. */
d0ceae4d 7174 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
9031d10b 7175
fc8794bd 7176 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
59751e6c 7177 build_vbase_offset_vtbl_entries. */
930bdacf 7178 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
7179 VEC_iterate (tree, vbases, ix, vbinfo); ix++)
97c118b9 7180 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
f0b48940 7181
5c43f650 7182 /* If the target requires padding between data entries, add that now. */
7183 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
7184 {
7185 tree cur, *prev;
7186
7187 for (prev = &vid.inits; (cur = *prev); prev = &TREE_CHAIN (cur))
7188 {
7189 tree add = cur;
7190 int i;
7191
7192 for (i = 1; i < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++i)
0d1ce60d 7193 add = tree_cons (NULL_TREE,
52028068 7194 build1 (NOP_EXPR, vtable_entry_type,
7195 null_pointer_node),
0d1ce60d 7196 add);
5c43f650 7197 *prev = add;
7198 }
7199 }
7200
59751e6c 7201 if (non_fn_entries_p)
d0ceae4d 7202 *non_fn_entries_p = list_length (vid.inits);
f0b48940 7203
7204 /* Go through all the ordinary virtual functions, building up
7205 initializers. */
59751e6c 7206 vfun_inits = NULL_TREE;
bd5edd91 7207 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
f0b48940 7208 {
7209 tree delta;
7210 tree vcall_index;
805e22b2 7211 tree fn, fn_original;
45d4608f 7212 tree init = NULL_TREE;
9031d10b 7213
f0b48940 7214 fn = BV_FN (v);
71b1859a 7215 fn_original = fn;
7216 if (DECL_THUNK_P (fn))
805e22b2 7217 {
71b1859a 7218 if (!DECL_NAME (fn))
7219 finish_thunk (fn);
6709b660 7220 if (THUNK_ALIAS (fn))
4880ab99 7221 {
7222 fn = THUNK_ALIAS (fn);
7223 BV_FN (v) = fn;
7224 }
71b1859a 7225 fn_original = THUNK_TARGET (fn);
805e22b2 7226 }
9031d10b 7227
70050b43 7228 /* If the only definition of this function signature along our
7229 primary base chain is from a lost primary, this vtable slot will
7230 never be used, so just zero it out. This is important to avoid
7231 requiring extra thunks which cannot be generated with the function.
7232
45d4608f 7233 We first check this in update_vtable_entry_for_fn, so we handle
7234 restored primary bases properly; we also need to do it here so we
7235 zero out unused slots in ctor vtables, rather than filling themff
7236 with erroneous values (though harmless, apart from relocation
7237 costs). */
7238 for (b = binfo; ; b = get_primary_binfo (b))
7239 {
7240 /* We found a defn before a lost primary; go ahead as normal. */
805e22b2 7241 if (look_for_overrides_here (BINFO_TYPE (b), fn_original))
45d4608f 7242 break;
7243
7244 /* The nearest definition is from a lost primary; clear the
7245 slot. */
7246 if (BINFO_LOST_PRIMARY_P (b))
7247 {
7248 init = size_zero_node;
70050b43 7249 break;
45d4608f 7250 }
7251 }
70050b43 7252
45d4608f 7253 if (! init)
7254 {
7255 /* Pull the offset for `this', and the function to call, out of
7256 the list. */
7257 delta = BV_DELTA (v);
6fc7a923 7258 vcall_index = BV_VCALL_INDEX (v);
45d4608f 7259
b4df430b 7260 gcc_assert (TREE_CODE (delta) == INTEGER_CST);
7261 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
45d4608f 7262
7263 /* You can't call an abstract virtual function; it's abstract.
7264 So, we replace these functions with __pure_virtual. */
805e22b2 7265 if (DECL_PURE_VIRTUAL_P (fn_original))
805e22b2 7266 {
96efc79d 7267 fn = abort_fndecl;
7268 if (abort_fndecl_addr == NULL)
7269 abort_fndecl_addr = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7270 init = abort_fndecl_addr;
7271 }
7272 else
7273 {
7274 if (!integer_zerop (delta) || vcall_index)
7275 {
7276 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
7277 if (!DECL_NAME (fn))
7278 finish_thunk (fn);
7279 }
7280 /* Take the address of the function, considering it to be of an
7281 appropriate generic type. */
7282 init = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
805e22b2 7283 }
45d4608f 7284 }
70050b43 7285
f0b48940 7286 /* And add it to the chain of initializers. */
6bfa2cc1 7287 if (TARGET_VTABLE_USES_DESCRIPTORS)
7288 {
7289 int i;
7290 if (init == size_zero_node)
7291 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7292 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7293 else
7294 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7295 {
831d52a2 7296 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
7297 TREE_OPERAND (init, 0),
7016c612 7298 build_int_cst (NULL_TREE, i));
6bfa2cc1 7299 TREE_CONSTANT (fdesc) = 1;
4ee9c684 7300 TREE_INVARIANT (fdesc) = 1;
6bfa2cc1 7301
7302 vfun_inits = tree_cons (NULL_TREE, fdesc, vfun_inits);
7303 }
7304 }
7305 else
653e5405 7306 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
f0b48940 7307 }
7308
59751e6c 7309 /* The initializers for virtual functions were built up in reverse
7310 order; straighten them out now. */
7311 vfun_inits = nreverse (vfun_inits);
9031d10b 7312
cc1fb265 7313 /* The negative offset initializers are also in reverse order. */
d0ceae4d 7314 vid.inits = nreverse (vid.inits);
cc1fb265 7315
7316 /* Chain the two together. */
d0ceae4d 7317 return chainon (vid.inits, vfun_inits);
f0b48940 7318}
7319
70050b43 7320/* Adds to vid->inits the initializers for the vbase and vcall
59751e6c 7321 offsets in BINFO, which is in the hierarchy dominated by T. */
f0b48940 7322
59751e6c 7323static void
45baea8b 7324build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
f0b48940 7325{
59751e6c 7326 tree b;
471086d6 7327
59751e6c 7328 /* If this is a derived class, we must first create entries
cc1fb265 7329 corresponding to the primary base class. */
d0ceae4d 7330 b = get_primary_binfo (binfo);
59751e6c 7331 if (b)
d0ceae4d 7332 build_vcall_and_vbase_vtbl_entries (b, vid);
59751e6c 7333
7334 /* Add the vbase entries for this base. */
d0ceae4d 7335 build_vbase_offset_vtbl_entries (binfo, vid);
59751e6c 7336 /* Add the vcall entries for this base. */
d0ceae4d 7337 build_vcall_offset_vtbl_entries (binfo, vid);
f0b48940 7338}
471086d6 7339
f0b48940 7340/* Returns the initializers for the vbase offset entries in the vtable
7341 for BINFO (which is part of the class hierarchy dominated by T), in
59751e6c 7342 reverse order. VBASE_OFFSET_INDEX gives the vtable index
7343 where the next vbase offset will go. */
471086d6 7344
59751e6c 7345static void
45baea8b 7346build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
f0b48940 7347{
59751e6c 7348 tree vbase;
7349 tree t;
8558201d 7350 tree non_primary_binfo;
471086d6 7351
f0b48940 7352 /* If there are no virtual baseclasses, then there is nothing to
7353 do. */
1f0b839e 7354 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
59751e6c 7355 return;
f0b48940 7356
d0ceae4d 7357 t = vid->derived;
9031d10b 7358
8558201d 7359 /* We might be a primary base class. Go up the inheritance hierarchy
7360 until we find the most derived class of which we are a primary base:
7361 it is the offset of that which we need to use. */
7362 non_primary_binfo = binfo;
7363 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7364 {
7365 tree b;
7366
7367 /* If we have reached a virtual base, then it must be a primary
7368 base (possibly multi-level) of vid->binfo, or we wouldn't
7369 have called build_vcall_and_vbase_vtbl_entries for it. But it
7370 might be a lost primary, so just skip down to vid->binfo. */
57c28194 7371 if (BINFO_VIRTUAL_P (non_primary_binfo))
8558201d 7372 {
7373 non_primary_binfo = vid->binfo;
7374 break;
7375 }
7376
7377 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7378 if (get_primary_binfo (b) != non_primary_binfo)
7379 break;
7380 non_primary_binfo = b;
7381 }
f0b48940 7382
59751e6c 7383 /* Go through the virtual bases, adding the offsets. */
7384 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7385 vbase;
7386 vbase = TREE_CHAIN (vbase))
7387 {
7388 tree b;
7389 tree delta;
9031d10b 7390
57c28194 7391 if (!BINFO_VIRTUAL_P (vbase))
59751e6c 7392 continue;
f0b48940 7393
59751e6c 7394 /* Find the instance of this virtual base in the complete
7395 object. */
95f3173a 7396 b = copied_binfo (vbase, binfo);
59751e6c 7397
7398 /* If we've already got an offset for this virtual base, we
7399 don't need another one. */
7400 if (BINFO_VTABLE_PATH_MARKED (b))
7401 continue;
95f3173a 7402 BINFO_VTABLE_PATH_MARKED (b) = 1;
59751e6c 7403
7404 /* Figure out where we can find this vbase offset. */
9031d10b 7405 delta = size_binop (MULT_EXPR,
d0ceae4d 7406 vid->index,
59751e6c 7407 convert (ssizetype,
7408 TYPE_SIZE_UNIT (vtable_entry_type)));
d0ceae4d 7409 if (vid->primary_vtbl_p)
59751e6c 7410 BINFO_VPTR_FIELD (b) = delta;
7411
7412 if (binfo != TYPE_BINFO (t))
b4df430b 7413 /* The vbase offset had better be the same. */
7414 gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
59751e6c 7415
7416 /* The next vbase will come at a more negative offset. */
5c43f650 7417 vid->index = size_binop (MINUS_EXPR, vid->index,
7418 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
59751e6c 7419
7420 /* The initializer is the delta from BINFO to this virtual base.
f8732e3f 7421 The vbase offsets go in reverse inheritance-graph order, and
7422 we are walking in inheritance graph order so these end up in
7423 the right order. */
8558201d 7424 delta = size_diffop (BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
9031d10b 7425
7426 *vid->last_init
cc1fb265 7427 = build_tree_list (NULL_TREE,
9031d10b 7428 fold_build1 (NOP_EXPR,
b7837065 7429 vtable_entry_type,
7430 delta));
d0ceae4d 7431 vid->last_init = &TREE_CHAIN (*vid->last_init);
59751e6c 7432 }
471086d6 7433}
f0b48940 7434
dff07cdd 7435/* Adds the initializers for the vcall offset entries in the vtable
70050b43 7436 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
7437 to VID->INITS. */
dff07cdd 7438
7439static void
45baea8b 7440build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
dff07cdd 7441{
6fc7a923 7442 /* We only need these entries if this base is a virtual base. We
7443 compute the indices -- but do not add to the vtable -- when
7444 building the main vtable for a class. */
cb3b26d4 7445 if (binfo == TYPE_BINFO (vid->derived)
7446 || (BINFO_VIRTUAL_P (binfo)
7447 /* If BINFO is RTTI_BINFO, then (since BINFO does not
7448 correspond to VID->DERIVED), we are building a primary
7449 construction virtual table. Since this is a primary
7450 virtual table, we do not need the vcall offsets for
7451 BINFO. */
7452 && binfo != vid->rtti_binfo))
6fc7a923 7453 {
7454 /* We need a vcall offset for each of the virtual functions in this
7455 vtable. For example:
dff07cdd 7456
6fc7a923 7457 class A { virtual void f (); };
7458 class B1 : virtual public A { virtual void f (); };
7459 class B2 : virtual public A { virtual void f (); };
7460 class C: public B1, public B2 { virtual void f (); };
70050b43 7461
6fc7a923 7462 A C object has a primary base of B1, which has a primary base of A. A
7463 C also has a secondary base of B2, which no longer has a primary base
7464 of A. So the B2-in-C construction vtable needs a secondary vtable for
7465 A, which will adjust the A* to a B2* to call f. We have no way of
7466 knowing what (or even whether) this offset will be when we define B2,
7467 so we store this "vcall offset" in the A sub-vtable and look it up in
7468 a "virtual thunk" for B2::f.
dff07cdd 7469
6fc7a923 7470 We need entries for all the functions in our primary vtable and
7471 in our non-virtual bases' secondary vtables. */
7472 vid->vbase = binfo;
7473 /* If we are just computing the vcall indices -- but do not need
7474 the actual entries -- not that. */
57c28194 7475 if (!BINFO_VIRTUAL_P (binfo))
6fc7a923 7476 vid->generate_vcall_entries = false;
7477 /* Now, walk through the non-virtual bases, adding vcall offsets. */
7478 add_vcall_offset_vtbl_entries_r (binfo, vid);
7479 }
dff07cdd 7480}
7481
7482/* Build vcall offsets, starting with those for BINFO. */
7483
7484static void
45baea8b 7485add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
dff07cdd 7486{
7487 int i;
7488 tree primary_binfo;
f6cc6a08 7489 tree base_binfo;
dff07cdd 7490
7491 /* Don't walk into virtual bases -- except, of course, for the
70050b43 7492 virtual base for which we are building vcall offsets. Any
7493 primary virtual base will have already had its offsets generated
7494 through the recursion in build_vcall_and_vbase_vtbl_entries. */
57c28194 7495 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
dff07cdd 7496 return;
9031d10b 7497
dff07cdd 7498 /* If BINFO has a primary base, process it first. */
7499 primary_binfo = get_primary_binfo (binfo);
7500 if (primary_binfo)
7501 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
7502
7503 /* Add BINFO itself to the list. */
7504 add_vcall_offset_vtbl_entries_1 (binfo, vid);
7505
7506 /* Scan the non-primary bases of BINFO. */
f6cc6a08 7507 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7508 if (base_binfo != primary_binfo)
7509 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
dff07cdd 7510}
7511
f235209b 7512/* Called from build_vcall_offset_vtbl_entries_r. */
96624a9e 7513
dff07cdd 7514static void
45baea8b 7515add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
471086d6 7516{
a1dbcdb9 7517 /* Make entries for the rest of the virtuals. */
7518 if (abi_version_at_least (2))
2b82dde2 7519 {
a1dbcdb9 7520 tree orig_fn;
d0ceae4d 7521
a1dbcdb9 7522 /* The ABI requires that the methods be processed in declaration
7523 order. G++ 3.2 used the order in the vtable. */
7524 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
7525 orig_fn;
7526 orig_fn = TREE_CHAIN (orig_fn))
7527 if (DECL_VINDEX (orig_fn))
e880f776 7528 add_vcall_offset (orig_fn, binfo, vid);
a1dbcdb9 7529 }
7530 else
7531 {
7532 tree derived_virtuals;
7533 tree base_virtuals;
7534 tree orig_virtuals;
7535 /* If BINFO is a primary base, the most derived class which has
7536 BINFO as a primary base; otherwise, just BINFO. */
7537 tree non_primary_binfo;
7538
7539 /* We might be a primary base class. Go up the inheritance hierarchy
7540 until we find the most derived class of which we are a primary base:
7541 it is the BINFO_VIRTUALS there that we need to consider. */
7542 non_primary_binfo = binfo;
7543 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
d0ceae4d 7544 {
a1dbcdb9 7545 tree b;
7546
7547 /* If we have reached a virtual base, then it must be vid->vbase,
7548 because we ignore other virtual bases in
7549 add_vcall_offset_vtbl_entries_r. In turn, it must be a primary
7550 base (possibly multi-level) of vid->binfo, or we wouldn't
7551 have called build_vcall_and_vbase_vtbl_entries for it. But it
7552 might be a lost primary, so just skip down to vid->binfo. */
57c28194 7553 if (BINFO_VIRTUAL_P (non_primary_binfo))
a1dbcdb9 7554 {
092b1d6f 7555 gcc_assert (non_primary_binfo == vid->vbase);
a1dbcdb9 7556 non_primary_binfo = vid->binfo;
7557 break;
7558 }
d0ceae4d 7559
a1dbcdb9 7560 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7561 if (get_primary_binfo (b) != non_primary_binfo)
7562 break;
7563 non_primary_binfo = b;
7564 }
f8732e3f 7565
a1dbcdb9 7566 if (vid->ctor_vtbl_p)
7567 /* For a ctor vtable we need the equivalent binfo within the hierarchy
7568 where rtti_binfo is the most derived type. */
95f3173a 7569 non_primary_binfo
7570 = original_binfo (non_primary_binfo, vid->rtti_binfo);
9031d10b 7571
a1dbcdb9 7572 for (base_virtuals = BINFO_VIRTUALS (binfo),
7573 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
7574 orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
7575 base_virtuals;
7576 base_virtuals = TREE_CHAIN (base_virtuals),
7577 derived_virtuals = TREE_CHAIN (derived_virtuals),
7578 orig_virtuals = TREE_CHAIN (orig_virtuals))
7579 {
7580 tree orig_fn;
f8f03982 7581
a1dbcdb9 7582 /* Find the declaration that originally caused this function to
7583 be present in BINFO_TYPE (binfo). */
7584 orig_fn = BV_FN (orig_virtuals);
cc1fb265 7585
a1dbcdb9 7586 /* When processing BINFO, we only want to generate vcall slots for
7587 function slots introduced in BINFO. So don't try to generate
7588 one if the function isn't even defined in BINFO. */
5e8d5ca1 7589 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), DECL_CONTEXT (orig_fn)))
a1dbcdb9 7590 continue;
dff07cdd 7591
e880f776 7592 add_vcall_offset (orig_fn, binfo, vid);
a1dbcdb9 7593 }
7594 }
7595}
dff07cdd 7596
e880f776 7597/* Add a vcall offset entry for ORIG_FN to the vtable. */
dff07cdd 7598
a1dbcdb9 7599static void
e880f776 7600add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
a1dbcdb9 7601{
7602 size_t i;
7603 tree vcall_offset;
cc331293 7604 tree derived_entry;
cc1fb265 7605
a1dbcdb9 7606 /* If there is already an entry for a function with the same
7607 signature as FN, then we do not need a second vcall offset.
7608 Check the list of functions already present in the derived
7609 class vtable. */
9031d10b 7610 for (i = 0; VEC_iterate (tree, vid->fns, i, derived_entry); ++i)
a1dbcdb9 7611 {
a1dbcdb9 7612 if (same_signature_p (derived_entry, orig_fn)
7613 /* We only use one vcall offset for virtual destructors,
7614 even though there are two virtual table entries. */
7615 || (DECL_DESTRUCTOR_P (derived_entry)
7616 && DECL_DESTRUCTOR_P (orig_fn)))
7617 return;
7618 }
f8732e3f 7619
a1dbcdb9 7620 /* If we are building these vcall offsets as part of building
7621 the vtable for the most derived class, remember the vcall
7622 offset. */
7623 if (vid->binfo == TYPE_BINFO (vid->derived))
26cbb959 7624 {
046bfc77 7625 tree_pair_p elt = VEC_safe_push (tree_pair_s, gc,
26cbb959 7626 CLASSTYPE_VCALL_INDICES (vid->derived),
7627 NULL);
7628 elt->purpose = orig_fn;
7629 elt->value = vid->index;
7630 }
9031d10b 7631
a1dbcdb9 7632 /* The next vcall offset will be found at a more negative
7633 offset. */
7634 vid->index = size_binop (MINUS_EXPR, vid->index,
7635 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7636
7637 /* Keep track of this function. */
cc331293 7638 VEC_safe_push (tree, gc, vid->fns, orig_fn);
a1dbcdb9 7639
7640 if (vid->generate_vcall_entries)
7641 {
7642 tree base;
a1dbcdb9 7643 tree fn;
6fc7a923 7644
a1dbcdb9 7645 /* Find the overriding function. */
e880f776 7646 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
a1dbcdb9 7647 if (fn == error_mark_node)
7648 vcall_offset = build1 (NOP_EXPR, vtable_entry_type,
7649 integer_zero_node);
7650 else
7651 {
e880f776 7652 base = TREE_VALUE (fn);
7653
7654 /* The vbase we're working on is a primary base of
7655 vid->binfo. But it might be a lost primary, so its
7656 BINFO_OFFSET might be wrong, so we just use the
7657 BINFO_OFFSET from vid->binfo. */
7658 vcall_offset = size_diffop (BINFO_OFFSET (base),
7659 BINFO_OFFSET (vid->binfo));
b7837065 7660 vcall_offset = fold_build1 (NOP_EXPR, vtable_entry_type,
7661 vcall_offset);
6fc7a923 7662 }
755edffd 7663 /* Add the initializer to the vtable. */
a1dbcdb9 7664 *vid->last_init = build_tree_list (NULL_TREE, vcall_offset);
7665 vid->last_init = &TREE_CHAIN (*vid->last_init);
59751e6c 7666 }
3fd9acd7 7667}
f378e02a 7668
755edffd 7669/* Return vtbl initializers for the RTTI entries corresponding to the
3c4a383e 7670 BINFO's vtable. The RTTI entries should indicate the object given
f8f03982 7671 by VID->rtti_binfo. */
f378e02a 7672
cc1fb265 7673static void
45baea8b 7674build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
f378e02a 7675{
f0b48940 7676 tree b;
3c4a383e 7677 tree t;
f0b48940 7678 tree basetype;
f0b48940 7679 tree offset;
7680 tree decl;
7681 tree init;
f378e02a 7682
f0b48940 7683 basetype = BINFO_TYPE (binfo);
f8f03982 7684 t = BINFO_TYPE (vid->rtti_binfo);
f378e02a 7685
f0b48940 7686 /* To find the complete object, we will first convert to our most
7687 primary base, and then add the offset in the vtbl to that value. */
7688 b = binfo;
f235209b 7689 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
653e5405 7690 && !BINFO_LOST_PRIMARY_P (b))
f378e02a 7691 {
59751e6c 7692 tree primary_base;
7693
d0ceae4d 7694 primary_base = get_primary_binfo (b);
eea75c62 7695 gcc_assert (BINFO_PRIMARY_P (primary_base)
7696 && BINFO_INHERITANCE_CHAIN (primary_base) == b);
59751e6c 7697 b = primary_base;
f378e02a 7698 }
f8f03982 7699 offset = size_diffop (BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
1eaf178d 7700
1631c87f 7701 /* The second entry is the address of the typeinfo object. */
7702 if (flag_rtti)
8999978b 7703 decl = build_address (get_tinfo_decl (t));
f0b48940 7704 else
1631c87f 7705 decl = integer_zero_node;
9031d10b 7706
1631c87f 7707 /* Convert the declaration to a type that can be stored in the
7708 vtable. */
8999978b 7709 init = build_nop (vfunc_ptr_type_node, decl);
d0ceae4d 7710 *vid->last_init = build_tree_list (NULL_TREE, init);
7711 vid->last_init = &TREE_CHAIN (*vid->last_init);
1eaf178d 7712
dfea972c 7713 /* Add the offset-to-top entry. It comes earlier in the vtable than
7714 the typeinfo entry. Convert the offset to look like a
dc9b5a48 7715 function pointer, so that we can put it in the vtable. */
8999978b 7716 init = build_nop (vfunc_ptr_type_node, offset);
dc9b5a48 7717 *vid->last_init = build_tree_list (NULL_TREE, init);
7718 vid->last_init = &TREE_CHAIN (*vid->last_init);
1eaf178d 7719}
215e2f1d 7720
7721/* Fold a OBJ_TYPE_REF expression to the address of a function.
7722 KNOWN_TYPE carries the true type of OBJ_TYPE_REF_OBJECT(REF). */
7723
7724tree
7725cp_fold_obj_type_ref (tree ref, tree known_type)
7726{
7727 HOST_WIDE_INT index = tree_low_cst (OBJ_TYPE_REF_TOKEN (ref), 1);
7728 HOST_WIDE_INT i = 0;
2cfde4f3 7729 tree v = BINFO_VIRTUALS (TYPE_BINFO (known_type));
215e2f1d 7730 tree fndecl;
7731
7732 while (i != index)
7733 {
7734 i += (TARGET_VTABLE_USES_DESCRIPTORS
7735 ? TARGET_VTABLE_USES_DESCRIPTORS : 1);
7736 v = TREE_CHAIN (v);
7737 }
7738
7739 fndecl = BV_FN (v);
7740
7741#ifdef ENABLE_CHECKING
092b1d6f 7742 gcc_assert (tree_int_cst_equal (OBJ_TYPE_REF_TOKEN (ref),
7743 DECL_VINDEX (fndecl)));
215e2f1d 7744#endif
7745
880afb80 7746 cgraph_node (fndecl)->local.vtable_method = true;
7747
215e2f1d 7748 return build_address (fndecl);
7749}
b212f378 7750
96efc79d 7751#include "gt-cp-class.h"