On Fri, 9 Apr 2021 09:41:19 GMT, Aleksey Shipilev <sh...@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