[Nestmates] RFR (XS) 8193112: [Nestmates] Remove nestmate access check from invokespecial interface invocation check
    David Holmes 
    david.holmes at oracle.com
       
    Wed Dec  6 20:46:13 UTC 2017
    
    
  
Thanks Karen!
David
On 7/12/2017 12:17 AM, Karen Kinnear wrote:
> Thanks David.
> 
> To the best of my understanding this reverts linktime_special_method to pre-nestmates which
> is correct.
> 
> Good catch,
> Karen
>> On Dec 5, 2017, at 11:37 PM, David Holmes <david.holmes at oracle.com> wrote:
>>
>> bug: https://bugs.openjdk.java.net/browse/JDK-8193112
>> webrev: http://cr.openjdk.java.net/~dholmes/8193112/webrev/
>>
>> While working on test coverage I discovered this leftover code fragment from the initial invokespecial changes. The nestmate access check is not reachable in this context, with correctly verified code, and so the change is reverted to the original code.
>>
>> Thanks,
>> David
>>
>> -- old/src/hotspot/share/interpreter/linkResolver.cpp	2017-12-05 23:33:03.756495932 -0500
>> +++ new/src/hotspot/share/interpreter/linkResolver.cpp	2017-12-05 23:33:01.616373994 -0500
>> @@ -1146,8 +1146,7 @@
>>      return NULL;
>>    }
>>
>> -  // check that invokespecial's interface method reference is in a direct superinterface,
>> -  // unless we are dealing with nestmates.
>> +  // check that invokespecial's interface method reference is in an indirect superinterface
>>    Klass* current_klass = link_info.current_klass();
>>    if (current_klass != NULL && resolved_klass->is_interface()) {
>>      InstanceKlass* ck = InstanceKlass::cast(current_klass);
>> @@ -1159,13 +1158,11 @@
>> SystemDictionary::reflect_MagicAccessorImpl_klass());
>>
>>      if (!is_reflect &&
>> -        !klass_to_check->is_same_or_direct_interface(resolved_klass) &&
>> -        (ck == klass_to_check && // don't check nestmate access for anonymous classes
>> - !klass_to_check->has_nestmate_access_to(InstanceKlass::cast(resolved_klass), THREAD))) {
>> +        !klass_to_check->is_same_or_direct_interface(resolved_klass)) {
>>        ResourceMark rm(THREAD);
>>        char buf[200];
>>        jio_snprintf(buf, sizeof(buf),
>> -                   "Interface method reference: %s, is not in a direct superinterface of %s",
>> +                   "Interface method reference: %s, is in an indirect superinterface of %s",
>>                     Method::name_and_sig_as_C_string(resolved_klass,
>>     resolved_method->name(),
>>     resolved_method->signature()),
> 
    
    
More information about the valhalla-dev
mailing list