--- old/src/java.base/share/classes/jdk/experimental/value/ValueType.java 2017-06-22 17:00:07.000000000 -0700 +++ new/src/java.base/share/classes/jdk/experimental/value/ValueType.java 2017-06-22 17:00:07.000000000 -0700 @@ -279,10 +279,15 @@ C -> C.vload(0).load(1).vwithfield(valueClass(), name, fieldType).vreturn()); handleMap.put(key, result); } - // @@@ special access check for read/write access - //force access-check - lookup.findGetter(boxClass(), name, type); - return result; + + // Allow access if the lookup class is the VCC or DVT and the lookup + // has private access + Class lc = lookup.lookupClass(); + if (lookup.hasPrivateAccess() && (valueClass() == lc || boxClass() == lc)) { + return result; + } + throw new IllegalAccessException(String.format("Class %s does not have vwithfield access to field %s.%s", + lc.getName(), boxClass().getName(), name)); } public MethodHandle unbox() {