RFR: 8262368: wrong verifier message for bogus return type [v2]
Coleen Phillimore
coleenp at openjdk.java.net
Tue Mar 2 17:05:41 UTC 2021
On Mon, 1 Mar 2021 16:04:17 GMT, Harold Seigel <hseigel at openjdk.org> wrote:
>> Please review this small change to fix some verifier error messages. If a method's descriptor has a void return signature, but contains a bytecode such as 'ireturn' or 'areturn'. then it will get a VerifyError exception with the message "Method descriptor has a void return type". Conversely, if a method's descriptor has a non-void return signature, but contains a 'return' bytecode then it will get a VerifyError exception with the message "Method descriptor has a non-void return type".
>>
>> A sample error message looks like:
>> Error: Unable to initialize main class Hi
>> Caused by: java.lang.VerifyError: Method descriptor has a void return type
>> Exception Details:
>> Location:
>> Hi.noRet(I)V @1: ireturn
>> Reason:
>> Type integer (current frame, stack[0]) is not assignable to top (from method signature)
>> Current Frame:
>> bci: @1
>> flags: { }
>> locals: { integer }
>> stack: { integer }
>> Bytecode:
>> 0000000: 08ac
>>
>> The fix was tested with Mach5 tiers 1 and 2 on Linux, Mac OS, and Windows, tiers 3-5 on Linux x64. and the JCK Lang and VM tests on Linux x64.
>>
>> Thanks, Harold
>
> Harold Seigel has updated the pull request incrementally with one additional commit since the last revision:
>
> changed error message text
src/hotspot/share/classfile/verifier.cpp line 3149:
> 3147: VerificationType return_type, VerificationType type, u2 bci,
> 3148: StackMapFrame* current_frame, TRAPS) {
> 3149: if (return_type == VerificationType::bogus_type()) {
return_type is the type expected from the function, which here is void (I guess void == bogus_type, but ok).
So the message is correct.
-------------
PR: https://git.openjdk.java.net/jdk/pull/2757
More information about the hotspot-runtime-dev
mailing list