On Tue, 2 Dec 2025 10:30:46 GMT, Quan Anh Mai <[email protected]> wrote:
> Hi,
>
> This PR fixes the issue of the compiler crashing with "not enough operands
> for reexecution". The issue here is that during
> `Parse::catch_inline_exceptions`, the old stack is gone, and we cannot
> reexecute the current bytecode anymore. However, there are some places where
> we try to insert safepoints into the graph, such as if the handler is a
> backward jump, or if one of the exceptions in the handlers is not loaded.
> Since the `_reexecute` state of the current jvms is "undefined", it is
> inferred automatically that it should reexecute for some bytecodes such as
> `putfield`. The solution then is to explicitly set `_reexecute` to false.
>
> I can manage to write a unit test for the case of a backward handler, for the
> other cases, since the exceptions that can be thrown for a bytecode that is
> inferred to reexecute are `NullPointerException`,
> `ArrayIndexOutOfBoundsException`, and `ArrayStoreException`. I find it hard
> to construct such a test in which one of them is not loaded.
>
> Please kindly review, thanks a lot.
test/hotspot/jtreg/compiler/exceptions/TestDebugDuringExceptionCatching.java
line 45:
> 43: * @build test.java.lang.invoke.lib.InstructionHelper
> 44: *
> 45: * @run main/othervm compiler.exceptions.TestDebugDuringExceptionCatching
Suggestion:
* @run main/othervm ${test.main.class}
Drive-by comment.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/28597#discussion_r2606588199