[JDK8] RFR (XS): JSR292: IncompatibleClassChangeError in LambdaForm for CharSequence.toString() method handle type converter

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Wed Jan 15 16:09:49 UTC 2014


Sundar, thank you.

Best regards,
Vladimir Ivanov

On 1/15/14 7:48 PM, A. Sundararajan wrote:
> Looks good to me
>
> -Sundar
>
> On Wednesday 15 January 2014 09:01 PM, Vladimir Ivanov wrote:
>> http://cr.openjdk.java.net/~vlivanov/8031502/webrev.00/
>> https://bugs.openjdk.java.net/browse/JDK-8031502
>>
>> InvokeBytecodeGenerator can produce incorrect bytecode for a
>> LambdaForm when invoking a method from Object declared in an interface.
>>
>> The problem is the following:
>>   (1) java.lang.CharSequence interface declares abstract method
>> "String toString()";
>>
>>   (2) after 8014013 fix, VM resolves
>> CharSequence::toString()/invokeInterface to
>> CharSequence::toString()/invokeVirtual;
>>
>>   (3) during LambdaForm compilation, CharSequence is considered
>> statically invocable (see
>> InvokeBytecodeGenerator::isStaticallyInvocable) and invokevirtual for
>> CharSequence::toString() is issued, which is wrong (invokevirtual
>> throws ICCE if it references an interface);
>>
>> The fix is straightforward: during LambdaForm compilation, switch back
>> from invokevirtual to invokeinterface instruction when invoking a
>> method on an interface.
>>
>> The fix is targeted for 8. Will be also integrated into 9.
>>
>> Testing: regression test, jdk/test/java/lang/invoke, vm.mlvm.testlist,
>> nashorn, jruby.
>>
>> Thanks!
>>
>> Best regards,
>> Vladimir Ivanov
>



More information about the core-libs-dev mailing list