RFR: 8347426: Invalid value used for enum Cell in iTypeFlow::StateVector::meet_exception
Dean Long
dlong at openjdk.org
Wed Feb 26 01:32:55 UTC 2025
On Tue, 25 Feb 2025 10:11:54 GMT, Marc Chevalier <duke at openjdk.org> wrote:
> 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
This seems fine. One alternative would be to introduce a new helper:
Cell local_limit_cell() const {
return (Cell)(outer()->max_locals());
}
similar to the existing `limit_cell`. A 2nd alternative would be something like:
for (int i = 0; i < _outer->max_locals(); ++i)) {
Cell c = local(i);
[....]
-------------
Marked as reviewed by dlong (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/23772#pullrequestreview-2642815317
More information about the hotspot-compiler-dev
mailing list