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

Reply via email to