aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Froyd <froydnj@codesourcery.com>2010-06-16 18:07:09 +0000
committerNathan Froyd <froydnj@gcc.gnu.org>2010-06-16 18:07:09 +0000
commit25d8a217d2b437481e45954e4412c29c073ba1c4 (patch)
tree462465a6ecf27f01c0f90b36c3dc45ab946d9aa5
parent616c557d021bb4815dee130df06b1bdd9b651e03 (diff)
downloadgcc-25d8a217d2b437481e45954e4412c29c073ba1c4.zip
gcc-25d8a217d2b437481e45954e4412c29c073ba1c4.tar.gz
gcc-25d8a217d2b437481e45954e4412c29c073ba1c4.tar.bz2
class.c (build_vtbl_initializer): Adjust computation of new_position and which entry to add padding for.
* class.c (build_vtbl_initializer): Adjust computation of new_position and which entry to add padding for. From-SVN: r160856
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/class.c7
2 files changed, 9 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8402afd..7456c82 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2010-06-16 Nathan Froyd <froydnj@codesourcery.com>
+
+ * class.c (build_vtbl_initializer): Adjust computation of new_position
+ and which entry to add padding for.
+
2010-06-16 Jason Merrill <jason@redhat.com>
* except.c (check_noexcept_r): Return the problematic function.
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 60908ff..f945923 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -7607,14 +7607,15 @@ build_vtbl_initializer (tree binfo,
ix--)
{
int j;
- int new_position = TARGET_VTABLE_DATA_ENTRY_DISTANCE * ix;
+ int new_position = (TARGET_VTABLE_DATA_ENTRY_DISTANCE * ix
+ + (TARGET_VTABLE_DATA_ENTRY_DISTANCE - 1));
VEC_replace (constructor_elt, vid.inits, new_position, e);
for (j = 1; j < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++j)
{
- constructor_elt *f = VEC_index (constructor_elt, *inits,
- new_position + j);
+ constructor_elt *f = VEC_index (constructor_elt, vid.inits,
+ new_position - j);
f->index = NULL_TREE;
f->value = build1 (NOP_EXPR, vtable_entry_type,
null_pointer_node);