aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2002-11-27 20:44:16 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2002-11-27 20:44:16 +0000
commit21b3d0ba2b0f3871a2c889d91b187ae9ab13cca9 (patch)
tree847dbd41e3fb6bfc15da94367585836a25b0919e
parent249e6b636b649387f0e0a537d2c2615c6d36d56f (diff)
downloadgcc-21b3d0ba2b0f3871a2c889d91b187ae9ab13cca9.zip
gcc-21b3d0ba2b0f3871a2c889d91b187ae9ab13cca9.tar.gz
gcc-21b3d0ba2b0f3871a2c889d91b187ae9ab13cca9.tar.bz2
class.c (build_base_field): Make sure we get the canonical base when descending through primary bases.
* class.c (build_base_field): Make sure we get the canonical base when descending through primary bases. From-SVN: r59582
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/class.c5
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 42ae0dd..677a6bb 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2002-11-27 Mark Mitchell <mark@codesourcery.com>
+
+ * class.c (build_base_field): Make sure we get the canonical base
+ when descending through primary bases.
+
2002-11-26 Geoffrey Keating <geoffk@apple.com>
* decl.c (check_initializer): Don't error on initialisation of
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index fdd9c47..0d93334 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -3863,7 +3863,10 @@ build_base_field (record_layout_info rli, tree binfo,
tree b;
b = get_primary_binfo (binfo);
- if (!b || BINFO_PRIMARY_BASE_OF (b) != binfo)
+ if (!b)
+ break;
+ b = CANONICAL_BINFO (b, rli->t);
+ if (BINFO_PRIMARY_BASE_OF (b) != binfo)
break;
if (TREE_VIA_VIRTUAL (b))
record_subobject_offsets (BINFO_TYPE (b),