--- old/hotspot/test/runtime/valhalla/valuetypes/DeriveValueTypeCreation.java 2017-06-28 16:02:01.000000000 +0800 +++ new/hotspot/test/runtime/valhalla/valuetypes/DeriveValueTypeCreation.java 2017-06-28 16:02:01.000000000 +0800 @@ -44,7 +44,9 @@ * @modules java.base/jdk.internal.org.objectweb.asm * @build runtime.valhalla.valuetypes.ValueCapableClass * @run main/othervm -Xint -noverify -XX:+EnableMVT runtime.valhalla.valuetypes.DeriveValueTypeCreation - * @run main/othervm -Xcomp -noverify -XX:+EnableMVT runtime.valhalla.valuetypes.DeriveValueTypeCreation + * @run main/othervm -Xcomp -noverify -XX:+EnableMVT + * -XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_isAssignableFrom + * runtime.valhalla.valuetypes.DeriveValueTypeCreation */ public class DeriveValueTypeCreation { --- old/hotspot/test/runtime/valhalla/valuetypes/MVTComboTier1.java 2017-06-28 16:02:02.000000000 +0800 +++ new/hotspot/test/runtime/valhalla/valuetypes/MVTComboTier1.java 2017-06-28 16:02:02.000000000 +0800 @@ -38,7 +38,9 @@ * @build jdk.test.lib.combo.ComboTestHelper * @run main/othervm -noverify -Xint -XX:+EnableMVT runtime.valhalla.valuetypes.MVTComboTier1 3 * @run main/othervm -noverify -Xint -XX:+EnableMVT runtime.valhalla.valuetypes.MVTComboTier1 -reducetypes 6 - * @run main/othervm -noverify -Xcomp -XX:+EnableMVT runtime.valhalla.valuetypes.MVTComboTier1 -reducetypes 5 + * @run main/othervm -noverify -Xcomp -XX:+EnableMVT + * -XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_isAssignableFrom + * runtime.valhalla.valuetypes.MVTComboTier1 -reducetypes 5 */ public class MVTComboTier1 { --- old/hotspot/test/runtime/valhalla/valuetypes/ValueOops.java 2017-06-28 16:02:02.000000000 +0800 +++ new/hotspot/test/runtime/valhalla/valuetypes/ValueOops.java 2017-06-28 16:02:02.000000000 +0800 @@ -55,15 +55,19 @@ * -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * runtime.valhalla.valuetypes.ValueOops * @run main/othervm -Xcomp -noverify -XX:+UseSerialGC -Xmx128m -XX:+EnableMVT + * -XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_isAssignableFrom * -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * runtime.valhalla.valuetypes.ValueOops * @run main/othervm -Xcomp -noverify -XX:+UseG1GC -Xmx128m -XX:+EnableMVT + * -XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_isAssignableFrom * -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * runtime.valhalla.valuetypes.ValueOops * @run main/othervm -Xcomp -noverify -XX:+UseParallelGC -Xmx128m -XX:+EnableMVT + * -XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_isAssignableFrom * -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * runtime.valhalla.valuetypes.ValueOops * @run main/othervm -Xcomp -noverify -XX:+UseConcMarkSweepGC -Xmx128m -XX:+EnableMVT + * -XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_isAssignableFrom * -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * runtime.valhalla.valuetypes.ValueOops */ --- old/hotspot/test/runtime/valhalla/valuetypes/VboxUnbox.java 2017-06-28 16:02:03.000000000 +0800 +++ new/hotspot/test/runtime/valhalla/valuetypes/VboxUnbox.java 2017-06-28 16:02:03.000000000 +0800 @@ -33,7 +33,9 @@ * @library /test/lib * @build runtime.valhalla.valuetypes.ValueCapableClass * @run main/othervm -Xint -noverify -XX:+EnableMVT runtime.valhalla.valuetypes.VboxUnbox - * @run main/othervm -Xcomp -noverify -XX:+EnableMVT runtime.valhalla.valuetypes.VboxUnbox + * @run main/othervm -Xcomp -noverify -XX:+EnableMVT + * -XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_isAssignableFrom + * runtime.valhalla.valuetypes.VboxUnbox */ public class VboxUnbox { --- old/jdk/src/java.base/share/classes/java/lang/Class.java 2017-06-28 16:02:03.000000000 +0800 +++ new/jdk/src/java.base/share/classes/java/lang/Class.java 2017-06-28 16:02:03.000000000 +0800 @@ -468,9 +468,8 @@ c = c.getComponentType(); } - // Check ACC_VALUE for now to workaround the issue in C2 intrinsic - // for isAssignableFrom that does not work with value type - return (c.getModifiers() & ACC_VALUE) != 0 && c != __Value.class; + // For now, check if it is a subtype of __Value + return __Value.class.isAssignableFrom(c) && c != __Value.class; } private void ensureNotValueClass() {