RFR: 8340710: Optimize DirectClassBuilder::build
Shaojin Wen
swen at openjdk.org
Tue Sep 24 01:15:16 UTC 2024
On Sun, 22 Sep 2024 20:48:08 GMT, Chen Liang <liach at openjdk.org> wrote:
>> src/java.base/share/classes/jdk/internal/classfile/impl/DirectClassBuilder.java line 207:
>>
>>> 205:
>>> 206: // Now we can make the head
>>> 207: head.writeLong(((long) ClassFile.MAGIC_NUMBER) << 32 | minorVersion << 16 | majorVersion);
>>
>> `minorVersion` needs to be cast to a `long` first, as otherwise when the MSB is set after the shift, then it’ll overwrite the magic number with all 1s.
>>
>> Suggestion:
>>
>> head.writeLong(((long) ClassFile.MAGIC_NUMBER) << 32 | ((long) minorVersion) << 16 | majorVersion);
>
> For clarity, I think using Integer.toUnsignedLong on the shift result is better
If minorVersion > 0xFFFF, the result of using Integer.toUnsignedLong will be wrong. I guess this is the reason why the previous version build failed
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21118#discussion_r1770667423
More information about the core-libs-dev
mailing list