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.

@merykitty , I tried solution 1) and it seems to work, but I think I prefer 
solution 2) because it aligns better with my idea from JDK-8372846 of 
canonicalized exception states.  If you like, I can take over this bug.

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

PR Comment: https://git.openjdk.org/jdk/pull/28597#issuecomment-3639722831

Reply via email to