RFR: 8347426: Invalid value used for enum Cell in iTypeFlow::StateVector::meet_exception

Marc Chevalier duke at openjdk.org
Tue Feb 25 10:16:03 UTC 2025


As guess on the JBS ticket, we have a UB when `_outer->max_locals() == 0`, because then we try to do `(Cell)(-1)` which is out of range since Cell's range is [0, `INT_MAX`].

The obvious fix that is

Cell limit = local(_outer->max_locals());
for (Cell c = start_cell(); c < limit; c = next_cell(c)) {

since `local` asserts its argument to be in [0, `outer->max_locals()`). Of course

Cell limit = (Cell)(_outer->max_locals());

would work, but it seems to break (the very light) abstraction.

I've also added an assert to transform the UB into a clear failure.

This fix makes the UB warning go away on Mac with arm64.

Thanks,
Marc

-------------

Commit messages:
 - Add a fix and an assert

Changes: https://git.openjdk.org/jdk/pull/23772/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=23772&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8347426
  Stats: 12 lines in 2 files changed: 3 ins; 0 del; 9 mod
  Patch: https://git.openjdk.org/jdk/pull/23772.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/23772/head:pull/23772

PR: https://git.openjdk.org/jdk/pull/23772


More information about the hotspot-compiler-dev mailing list