--- old/src/java.base/share/classes/java/lang/invoke/MethodHandles.java 2018-03-06 15:23:21.000000000 -0800 +++ new/src/java.base/share/classes/java/lang/invoke/MethodHandles.java 2018-03-06 15:23:20.000000000 -0800 @@ -2401,7 +2401,9 @@ } refc = lookupClass(); } - return VarHandles.makeFieldHandle(getField, refc, getField.getFieldType(), this.allowedModes == TRUSTED); + // don't allow writing on value type + boolean isWriteAllowedOnFinalFields = this.allowedModes == TRUSTED && !putField.isValue(); + return VarHandles.makeFieldHandle(getField, refc, getField.getFieldType(), isWriteAllowedOnFinalFields); } /** Check access and get the requested constructor. */ private MethodHandle getDirectConstructor(Class refc, MemberName ctor) throws IllegalAccessException {