RFR: 8214936: assert(_needs_refill == 0) failed: Forgot to handle a failed IC transition requiring IC stubs
erik.osterlund at oracle.com
Thu Dec 6 13:46:21 UTC 2018
In 8214338 I moved IC stub refilling out from IC stub transitions,
making it the responsibility of the caller. To make sure we don't
accidentally forget calling IC stub refill and retrying at the call
site, I added some verification code that complains if the caller failed
to do so.
I have tracked down that what can happen is that we try to make an IC
megamorphic, but fail due to requiring IC stubs to do so. In such a
failure, we try setting the IC to clean, expecting that would also fail,
due to still not having refilled the buffers yet, but actually succeeding.
As a result of this, the assert fails because we did not refill the IC
stubs and retry after the transition to megamorphic failed, due to
subsequently succeeding to clean the IC.
In this patch, I made sure we refill and retry instead as intended. I
have also improved the verification to use a thread-local verification
RAII object that makes it easier to not just see that something
unexpected happened, but also where it happened.
More information about the hotspot-compiler-dev