aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRoman Zippel <zippel@linux-m68k.org>2007-09-06 23:00:01 +0000
committerRoman Zippel <zippel@gcc.gnu.org>2007-09-06 23:00:01 +0000
commitbdeb2c963f0df89b440bcb103ff7e48d83f19d0d (patch)
treeccbc349cc13f7fd295ce205e7e9613249e16e037 /gcc
parentbc211e05e3379205a808c2f2fa050ba6cc03cf22 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/java/boehm.c14
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;