PR c++/3130, c++/3131, c++/3132
authorNathan Sidwell <nathan@codesourcery.com>
Tue, 12 Jun 2001 18:08:05 +0000 (18:08 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Tue, 12 Jun 2001 18:08:05 +0000 (18:08 +0000)
commit623fe76a4c9035ec908db4c6f61e9f191dd657aa
tree008913fbee6bdbb7652317a0c709f6c3927127f2
parent205a5b45503be8a8e165b0876082801917f7c240
PR c++/3130, c++/3131, c++/3132

cp:
PR c++/3130, c++/3131, c++/3132
* cp-tree.h (BINFO_UNSHARED_MARKED): New #define.
* class.c (force_canonical_binfo_r): Move
BINFO_UNSHARED_MARKED, BINFO_LOST_PRIMARY_P. Don't move
virtual bases unless they're primary and what they're primary
too has been moved.
(dfs_unshared_virtual_bases): Use BINFO_UNSHARED_MARKED. Cope
with morally virtual bases. Duplicate BINFO_LOST_PRIMARY_P and
BINFO_PRIMARY_BASE_OF. Clear BINFO_VTABLE for all but the most
derived binfo.
(mark_primary_bases): Use BINFO_UNSHARED_MARKED.
(layout_nonempty_base_or_field): Add most derived type
parameter. Adjust.
(layout_empty_base): Likewise.
(build_base_field): Likewise.
(build_base_fields): Likewise.
(propagate_binfo_offsets): Add most derived type
parameter. Skip non canonical virtual bases too.
(dfs_set_offset_for_unshared_vbases): Don't skip primary
bases. Do skip canonical bases.
(layout_virtual_bases): Adjust.
(layout_class_type): Adjust.
(dfs_get_primary_binfo): Build list of virtual primary base
candidates.
(get_primary_binfo): Check that the shared virtual primary
base candidate was found first.
(accumulate_vtbl_inits): Don't do anything for non-vptr
containing binfos. For case 1 primary virtual bases, keep
checking that we've not emerged from the hierarchy of RTTI_BINFO.
testsuite:
* g++.old-deja/g++.abi/vbase5.C: New test.
* g++.old-deja/g++.abi/vbase6.C: New test.
* g++.old-deja/g++.abi/vbase7.C: New test.

From-SVN: r43266
gcc/cp/ChangeLog
gcc/cp/class.c
gcc/cp/cp-tree.h
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.abi/vbase5.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.abi/vbase6.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.abi/vbase7.C [new file with mode: 0644]