RFR: change verifier for withfield to check that value types match instead of doing an is_assignable check
David Simms
david.simms at oracle.com
Tue Mar 27 14:50:06 UTC 2018
Looks good Harold, thanks for the comments in the tests (helps with the
raw bytecode)
On 27/03/18 15:59, harold seigel wrote:
> Hi,
>
> Please review this small verifier change for the withfield opcode to
> check that the reference on the stack is the same as the class pointed
> to by withfield's constant pool fieldref. Previously, the verifier
> did an is_assignable_from() check, but this potentially caused some
> class loads and returned true if the fieldref's class was
> java.lang.Object.
>
> Open Webrev:
> http://cr.openjdk.java.net/~hseigel/valueTypes_lworld.wfield.jlo/webrev/index.html
>
> Here's a sample error message emitted when the two references are not
> the same:
>
> Exception in thread "main" java.lang.VerifyError: Bad value type on
> operand stack in withfield
> Exception Details:
> Location:
> wthFldBadFldRef2.makeValue(I)LwthFldBadFldRef2; @6: withfield
> Reason:
> Type 'otherVT' (current frame, stack[0]) and type
> 'wthFldBadFldRef2' (constant pool 2) must be identical value types.
> Current Frame:
> bci: @6
> flags: { }
> locals: { integer, 'otherVT' }
> stack: { 'otherVT', integer }
> Bytecode:
> 0000000: cb00 1b4c 2b1a cc00 024c 2bb0
>
> This webrev was tested with hotspot JTReg tests and multiple JDK JTReg
> tests.
>
> Thanks, Harold
>
>
More information about the valhalla-dev
mailing list