RFR: 8214936: assert(_needs_refill == 0) failed: Forgot to handle a failed IC transition requiring IC stubs

Erik Osterlund erik.osterlund at oracle.com
Thu Dec 6 20:50:57 UTC 2018

Hi Vladimir,

Thanks for the review.


> On 6 Dec 2018, at 20:32, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:
> Nice verification code. Changes are good.
> Thanks,
> Vladimir
>> On 12/6/18 5:46 AM, Erik Österlund wrote:
>> Hi,
>> 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.
>> Bug:
>> https://bugs.openjdk.java.net/browse/JDK-8214936
>> Webrev:
>> http://cr.openjdk.java.net/~eosterlund/8214936/webrev.00/
>> Thanks,
>> /Erik

More information about the hotspot-compiler-dev mailing list