--- old/jdk/src/java.base/share/classes/java/lang/Class.java 2017-07-27 21:46:56.000000000 -0700 +++ new/jdk/src/java.base/share/classes/java/lang/Class.java 2017-07-27 21:46:56.000000000 -0700 @@ -80,6 +80,8 @@ import sun.security.util.SecurityConstants; import sun.reflect.annotation.*; import sun.reflect.misc.ReflectUtil; +import valhalla.shady.MinimalValueTypes_1_0; + import static valhalla.shady.MinimalValueTypes_1_0.ACC_VALUE; /** @@ -463,13 +465,18 @@ } boolean isValueClass() { + // ensure that system properties have been initialized. + if (VM.initLevel() < 1) + return false; + Class c = this; while (c.isArray()) { c = c.getComponentType(); } // For now, check if it is a subtype of __Value - return __Value.class.isAssignableFrom(c) && c != __Value.class; + Class valueBaseClass = MinimalValueTypes_1_0.getValueClass(); + return valueBaseClass != null && c != valueBaseClass && valueBaseClass.isAssignableFrom(c); } private void ensureNotValueClass() {