RFR: 8214936: assert(_needs_refill == 0) failed: Forgot to handle a failed IC transition requiring IC stubs
erik.osterlund at oracle.com
Fri Dec 7 14:17:47 UTC 2018
Thanks for confirming.
On 2018-12-07 13:41, Tobias Hartmann wrote:
> Hi Erik,
> still looks good to me.
> Best regards,
> On 07.12.18 13:03, Erik Österlund wrote:
>> Per requested a trivial change that the verifier types be available as dummies doing nothing in
>> product builds so that we don't need to wrap their uses in DEBUG_ONLY, as Per dislikes using
>> On 2018-12-06 14:46, Erik Österlund wrote:
>>> 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