RFR(S): 8054224: Recursive method that was compiled by C1 is unable to catch StackOverflowError
roland.westrelin at oracle.com
Tue Aug 12 08:40:58 UTC 2014
When processing a StackOverflowError, a call to SharedRuntime::compute_compiled_exc_handler() triggers another StackOverflowError which replaces the current exception and causes the frame to be unwounded. The exception cache is wrongly updated to record that a StackOverflowError at this pc should be handled by unwinding the stack. When the StackOverflowError propagates to the caller (same method at same pc), the caller unwinds when it should jump to the exception handler. Fixed by setting the exception cache only when the exception wasn’t replaced using the same check opto/runtime.cpp does.
More information about the hotspot-compiler-dev