[I’m resending something I sent earlier today to Vladimir directly.]

On Jan 15, 2014, at 7:31 AM, Vladimir Ivanov <vladimir.x.iva...@oracle.com> 
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;

Without having looked at the changes of 8014013, why did the invoke type 
change?  Is it an optimization that was added?

> 
>   (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.

I find this risky.  Right now MemberName is only used in a couple places in 
java.lang.invoke but in the future it might be used for other things (e.g. 
java.lang.reflect).  The information MemberName contains should be correct and 
usable without changing.  Otherwise all users have to patch the information the 
same way as you do in your patch.

I would like to see the VM passing correct information (whatever the definition 
of correct is here).

> 
> 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
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev@openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to