RFR: 8306933: C2: "assert(false) failed: infinite loop" failure
Roland Westrelin
roland at openjdk.org
Wed Apr 26 15:54:00 UTC 2023
The assert fires because an infinite loop appears in the graph after
loop opts are over.
After loop opts, the `for(;;)` loop contains a null check and a range
check for `array[i]`. So it's not considered an infinite loop (it has
exits to uncommon traps). The null check and range check are redundant
with the one right before the loop: `int v = array2[k];` IGVN can
optimize it but it doesn't happen until after loop opts when a
`ConvI2L` for the `array[i]` access is processed as part of post loop
opts IGVN. The `for(;;)` loop is then emptied and only contains a
`Loop` and a `Safepoint` nodes.
I propose removing the assert (at least for now) as I don't see a way
to guarantee no infinite loop can appear after loop opts.
-------------
Commit messages:
- test & fix
Changes: https://git.openjdk.org/jdk/pull/13672/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=13672&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8306933
Stats: 64 lines in 2 files changed: 61 ins; 3 del; 0 mod
Patch: https://git.openjdk.org/jdk/pull/13672.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/13672/head:pull/13672
PR: https://git.openjdk.org/jdk/pull/13672
More information about the hotspot-compiler-dev
mailing list