compiler accepts incompatible method reference for Sam conversion
Ali Ebrahimi
ali.ebrahimi1781 at gmail.com
Tue Jul 12 21:01:47 PDT 2011
Hi,
I found following bug in current compiler build:
my build relates to before Changeset: 777491a7c4e1: Revised accessibility
check for SAM descriptor as per latest lambda spec draft.
class MethodHandleTest{
interface Sam1{
void m(MethodHandleTest m);
}
public void test(int i){
// System.out.println("test");
}
...
public static void main(String[] args) throws Throwable {
Sam1 sam1=MethodHandleTest#test(int); <=====================
sam1.m(null);
}
...
}
result:
Exception in thread "main" java.lang.invoke.WrongMethodTypeException: cannot
convert MethodHandle(MethodHandleTest,int)void to (MethodHandleTest)void
Also an trouble jvm crash: I know this not relates to this thread.
public static void sTest(int x,int y){
// System.out.println("stest");
}
interface Sam{
void m(int x,int y);
}
Sam sam = MethodHandleTest#sTest;
sam.m(1,1); <===============crash
MethodHandle mh = MethodHandles.lookup().findStatic(MethodHandleTest.class,
"sTest", MethodType.methodType(void.class,int.class,int.class));
MethodHandle smh = mh.asSpreader(Object[].class,
mh.type().parameterCount());
smh.invoke(new Object[]{i,i}); <===============crash
main cause: mh.asSpreader
I don't known this crash appears in jdkb147.
Best Regards,
Ali Ebrahimi
More information about the lambda-dev
mailing list