[JDK8] RFR (XS): JSR292: IncompatibleClassChangeError in LambdaForm for CharSequence.toString() method handle type converter
vladimir.x.ivanov at oracle.com
Thu Jan 16 09:37:43 UTC 2014
The test provokes the bug, since it sets compilation threshold to 0:
On 1/16/14 12:40 PM, Jochen Theodorou wrote:
> since I am indirectly the reporter of this bug I have one remark for the
> test. The error happens only for compiled lambda forms. The given test
> does imho not use a compiled lambda form. In other words, afaik the test
> would pass without the fix. As such it would be useless as regression test.
> Am 15.01.2014 16:31, schrieb Vladimir Ivanov:
>> 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
>> (2) after 8014013 fix, VM resolves
>> CharSequence::toString()/invokeInterface to
>> (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.
>> Best regards,
>> Vladimir Ivanov
>> mlvm-dev mailing list
>> mlvm-dev at openjdk.java.net
More information about the core-libs-dev