Hi David,

On 27.04.2018 00:04, David Holmes wrote:

>> src/hotspot/share/c1/c1_Canonicalizer.cpp
>> ...
>>   void Canonicalizer::do_CheckCast      (CheckCast*       x) {
>> -  if (x->klass()->is_loaded()) {
>> +  if (x->klass()->is_loaded() && !x->is_invokespecial_receiver_check())
>>
>> It seems like it's not something specific to invokespecial, but a generic 
>> problem in how interface
>> casts are handled in C1: it's not correct to eliminate the cast if 
>> obj->declared_type() is an
>> interface. I assume that's what happens in your case. FTR I'm fine with 
>> handling it separately.
> 
> The above came from Tobias. If you think there is a more general issue here 
> then we should file a
> separate bug and formulate a test case.

To clarify, I've quickly debugged this problem before going on vacation and 
rather than a full fix,
the intention of the above change was to quickly verify that the problem is 
indeed an incorrectly
eliminated receiver cast.

I'm also fine with handling this in a separate bug or to push this as a quick 
fix and file a follow
up bug for further investigation if other changes are necessary.

Thanks,
Tobias

Reply via email to