< prev index next >

test/hotspot/jtreg/runtime/FieldLayout/OldLayoutCheck.java

Print this page
*** 23,45 ***
  
  /*
   * @test
   * @bug 8239014
   * @summary -XX:-UseEmptySlotsInSupers sometime fails to reproduce the layout of the old code
!  * @library /test/lib
   * @modules java.base/jdk.internal.misc
   *          java.management
   * @requires vm.bits == "64" & vm.opt.final.UseCompressedOops == true & vm.gc != "Z"
!  * @run main/othervm -XX:+UseCompressedClassPointers -XX:-UseEmptySlotsInSupers OldLayoutCheck
   */
  
  /*
   * @test
   * @requires vm.bits == "32"
!  * @library /test/lib
   * @modules java.base/jdk.internal.misc
   *          java.management
!  * @run main/othervm -XX:-UseEmptySlotsInSupers OldLayoutCheck
   */
  
  import java.lang.reflect.Field;
  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;
      }
  
!     // 32-bit VMs: @0:  8 byte header,  @8: long field, @16:  int field
!     // 64-bit VMs: @0: 12 byte header, @12:  int field, @16: long field
!     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();
--- 23,61 ---
  
  /*
   * @test
   * @bug 8239014
   * @summary -XX:-UseEmptySlotsInSupers sometime fails to reproduce the layout of the old code
!  * @library /test/lib /
   * @modules java.base/jdk.internal.misc
   *          java.management
   * @requires vm.bits == "64" & vm.opt.final.UseCompressedOops == true & vm.gc != "Z"
!  * @build jdk.test.whitebox.WhiteBox
+  * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
+  * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:+UseCompressedClassPointers -XX:-UseEmptySlotsInSupers OldLayoutCheck
   */
  
  /*
   * @test
   * @requires vm.bits == "32"
!  * @library /test/lib /
   * @modules java.base/jdk.internal.misc
   *          java.management
!  * @build jdk.test.whitebox.WhiteBox
+  * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
+  * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:-UseEmptySlotsInSupers OldLayoutCheck
   */
  
  import java.lang.reflect.Field;
  import java.util.Arrays;
  import java.util.Comparator;
  import jdk.internal.misc.Unsafe;
  
  import jdk.test.lib.Asserts;
  import jdk.test.lib.Platform;
+ import jdk.test.whitebox.WhiteBox;
  
  public class OldLayoutCheck {
  
      static class LIClass {
          public long l;
          public int i;
      }
  
!     public static final WhiteBox WB = WhiteBox.getWhiteBox();
! 
!     // 32-bit VMs/compact headers: @0:  8 byte header,  @8: long field, @16:  int field
!     // 64-bit VMs:                 @0: 12 byte header, @12:  int field, @16: long field
+     static final long INT_OFFSET;
+     static final long LONG_OFFSET;
+     static {
+       if (!Platform.is64bit() || WB.getBooleanVMFlag("UseCompactObjectHeaders")) {
+         INT_OFFSET = 16L;
+         LONG_OFFSET = 8L;
+       } else {
+         INT_OFFSET = 12L;
+         LONG_OFFSET = 16L;
+       }
+     }
  
      static public void main(String[] args) {
          Unsafe unsafe = Unsafe.getUnsafe();
          Class c = LIClass.class;
          Field[] fields = c.getFields();
< prev index next >