diff options
author | Roman Zippel <zippel@linux-m68k.org> | 2007-09-06 23:00:01 +0000 |
---|---|---|
committer | Roman Zippel <zippel@gcc.gnu.org> | 2007-09-06 23:00:01 +0000 |
commit | bdeb2c963f0df89b440bcb103ff7e48d83f19d0d (patch) | |
tree | ccbc349cc13f7fd295ce205e7e9613249e16e037 /gcc | |
parent | bc211e05e3379205a808c2f2fa050ba6cc03cf22 (diff) | |
download | gcc-bdeb2c963f0df89b440bcb103ff7e48d83f19d0d.zip gcc-bdeb2c963f0df89b440bcb103ff7e48d83f19d0d.tar.gz gcc-bdeb2c963f0df89b440bcb103ff7e48d83f19d0d.tar.bz2 |
boehm.c (mark_reference_fields): Move misaligned pointer check
after JREFERENCE_TYPE_P test
From-SVN: r128208
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/java/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/java/boehm.c | 14 |
2 files changed, 12 insertions, 7 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 3572271..9b637bc 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,8 @@ +2007-09-07 Roman Zippel <zippel@linux-m68k.org> + + boehm.c (mark_reference_fields): Move misaligned pointer check + after JREFERENCE_TYPE_P test + 2007-09-06 Roman Zippel <zippel@linux-m68k.org> * boehm.c (mark_reference_fields): Don't use bitmap as gc_descr diff --git a/gcc/java/boehm.c b/gcc/java/boehm.c index c44c620..5c65c8b 100644 --- a/gcc/java/boehm.c +++ b/gcc/java/boehm.c @@ -98,13 +98,6 @@ mark_reference_fields (tree field, offset = int_byte_position (field); size_bytes = int_size_in_bytes (TREE_TYPE (field)); - if (offset % (POINTER_SIZE / BITS_PER_UNIT)) - { - *all_bits_set = -1; - *pointer_after_end = 1; - break; - } - if (JREFERENCE_TYPE_P (TREE_TYPE (field)) /* An `object' of type gnu.gcj.RawData is actually non-Java data. */ @@ -118,6 +111,13 @@ mark_reference_fields (tree field, we already covered, then we are doomed. */ gcc_assert (offset > *last_view_index); + if (offset % (POINTER_SIZE / BITS_PER_UNIT)) + { + *all_bits_set = -1; + *pointer_after_end = 1; + break; + } + count = offset * BITS_PER_UNIT / POINTER_SIZE; size_words = size_bytes * BITS_PER_UNIT / POINTER_SIZE; |