RFR: 8236490: Compiler bug relating to @NonNull annotation
Guoxiong Li
github.com+13688759+lgxbslgx at openjdk.java.net
Tue Jan 26 09:00:42 UTC 2021
On Tue, 26 Jan 2021 08:49:51 GMT, Joel Borggrén-Franck <jfranck at openjdk.org> wrote:
>> Hi all,
>>
>> If the exception class index in constant pool exceeds 256, the `exception_index` in `TypeAnnotationPosition` will not work as expected. Please see the following code:
>>
>> public void setCatchInfo(final int catchType, final int startPos) {
>> Assert.check(!hasExceptionIndex(),
>> "exception_index is already set");
>> Assert.check(catchType >= 0, "Expected a valid catch type");
>> this.exception_index = -((catchType | startPos << 8) + 1); // <------------------------------
>> }
>>
>> If `catchType` > 256, which means the 8-15 bits is useful, the ` -((catchType | startPos << 8) + 1);` would override these bits.
>>
>> This patch separates the `startPos` into a new field `exceptionStartPos` to solve the bug. And a test case is added.
>>
>> Thank you for taking the time to review.
>>
>> Best Regards.
>
> I think is still trying to be way to clever with compressing the different states into previously 1 int and now 2 ints. However this is an improvement and fixes an issue we have.
@jbf Thank you. The patch can be integrated directly because the robot doesn't remind of conflict.
-------------
PR: https://git.openjdk.java.net/jdk/pull/2060
More information about the compiler-dev
mailing list