RFR: 8264976: Minor numeric bug in AbstractSplittableWithBrineGenerator.makeSplitsSpliterator
Aleksey Shipilev
shade at openjdk.java.net
Wed Apr 14 06:06:06 UTC 2021
On Fri, 9 Apr 2021 09:41:19 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
> SonarCloud reports:
> Cast one of the operands of this subtraction operation to a "long".
>
> Here:
>
> Spliterator<SplittableGenerator> makeSplitsSpliterator(long index, long fence, SplittableGenerator source) {
> ...
> long multiplier = (1 << SALT_SHIFT) - 1; // <---- here
>
>
> The shift is integer, and the implicit cast to `long` happens too late. `SALT_SHIFT` is currently 4, so this is not the problem yet. But it would become a problem if `SALT_SHIFT` ever becomes 32 or larger. The shift operand should be `1L` for safety. Observe:
>
>
> jshell> Long.toHexString((1 << 31) - 1)
> $2 ==> "7fffffff"
>
> jshell> Long.toHexString((1 << 32) - 1)
> $3 ==> "0"
>
> jshell> Long.toHexString((1L << 32) - 1)
> $4 ==> "ffffffff"
>
>
> Additional testing:
> - [x] Linux x86_64 fastdebug, `jdk/utils/Random`
Anyone? :)
-------------
PR: https://git.openjdk.java.net/jdk/pull/3409
More information about the core-libs-dev
mailing list