RFR (XS) 8241500: FieldLayout/OldLayoutCheck.java fails in 32-bit VMs
Frederic Parain
frederic.parain at oracle.com
Tue Mar 24 13:19:17 UTC 2020
Aleksey,
Looks good to me, thank you for fixing this.
Fred
> On Mar 24, 2020, at 06:54, Aleksey Shipilev <shade at redhat.com> wrote:
>
> Test bug:
> https://bugs.openjdk.java.net/browse/JDK-8241500
>
> See the brief discussion and JOL dump in the bug.
>
> Fix:
>
> diff -r cc739b0abc44 test/hotspot/jtreg/runtime/FieldLayout/OldLayoutCheck.java
> --- a/test/hotspot/jtreg/runtime/FieldLayout/OldLayoutCheck.java Tue Mar 24 06:13:39 2020 +0100
> +++ b/test/hotspot/jtreg/runtime/FieldLayout/OldLayoutCheck.java Tue Mar 24 11:52:36 2020 +0100
> @@ -45,28 +45,32 @@
> import java.util.Arrays;
> import java.util.Comparator;
> import jdk.internal.misc.Unsafe;
>
> import jdk.test.lib.Asserts;
> +import jdk.test.lib.Platform;
>
> public class OldLayoutCheck {
>
> static class LIClass {
> public long l;
> public int i;
> }
>
> + static final long INT_OFFSET = Platform.is64bit() ? 12L : 16L;
> + static final long LONG_OFFSET = Platform.is64bit() ? 16L : 8L;
> +
> static public void main(String[] args) {
> Unsafe unsafe = Unsafe.getUnsafe();
> Class c = LIClass.class;
> Field[] fields = c.getFields();
> for (int i = 0; i < fields.length; i++) {
> long offset = unsafe.objectFieldOffset(fields[i]);
> if (fields[i].getType() == int.class) {
> - Asserts.assertEquals(offset, 12L, "Misplaced int field");
> + Asserts.assertEquals(offset, INT_OFFSET, "Misplaced int field");
> } else if (fields[i].getType() == long.class) {
> - Asserts.assertEquals(offset, 16L, "Misplaced long field");
> + Asserts.assertEquals(offset, LONG_OFFSET, "Misplaced long field");
> } else {
> Asserts.fail("Unexpected field type");
> }
> }
> }
>
> Testing: affected test on Linux {x86_64, x86_32}
>
> --
> Thanks,
> -Aleksey
>
More information about the hotspot-runtime-dev
mailing list