hg: valhalla/valhalla: 8214706: [lworld] MethodHandle lookup fails with asBoxType() class in MethodType

Tobias Hartmann tobias.hartmann at oracle.com
Mon Dec 3 13:32:49 UTC 2018


This fixes the following lookup:

  MethodType test18_mt = MethodType.methodType(void.class, MyValue1.class.asBoxType());
  test18_mh1 = lookup.findStatic(clazz, "test18_target1", test18_mt);

  static void test18_target1(MyValue1.box vt) {
    nullValue = vt;
  }

That failed with:

java.lang.NoSuchMethodException: no such method:
compiler.valhalla.valuetypes.TestNullableValueTypes.test19_target1(MyValue1.box)void/invokeStatic
at java.base/java.lang.invoke.MemberName.makeAccessException(MemberName.java:983)
at java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1121)
at java.base/java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:2034)
at java.base/java.lang.invoke.MethodHandles$Lookup.findStatic(MethodHandles.java:1106)
at compiler.valhalla.valuetypes.TestNullableValueTypes.<clinit>(TestNullableValueTypes.java:78)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:320)
at compiler.valhalla.valuetypes.ValueTypeTest.main(ValueTypeTest.java:256)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:115)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.NoSuchMethodError:
compiler.valhalla.valuetypes.TestNullableValueTypes.test19_target1(Qcompiler/valhalla/valuetypes/MyValue1;)V

at java.base/java.lang.invoke.MethodHandleNatives.resolve(Native Method)
at java.base/java.lang.invoke.MemberName$Factory.resolve(MemberName.java:1090)
at java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1118)
... 12 more
java.lang.ExceptionInInitializerError
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:320)
at compiler.valhalla.valuetypes.ValueTypeTest.main(ValueTypeTest.java:256)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:115)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.RuntimeException: Method handle lookup failed
at compiler.valhalla.valuetypes.TestNullableValueTypes.<clinit>(TestNullableValueTypes.java:82)
... 9 more

Because java_lang_Class::print_signature() prints a "Q" even if the box type is used.

Best regards,
Tobias

On 03.12.18 14:29, tobias.hartmann at oracle.com wrote:
> Changeset: 5a029fca0235
> Author:    thartmann
> Date:      2018-12-03 14:29 +0100
> URL:       http://hg.openjdk.java.net/valhalla/valhalla/rev/5a029fca0235
> 
> 8214706: [lworld] MethodHandle lookup fails with asBoxType() class in MethodType
> 
> ! src/hotspot/share/classfile/javaClasses.cpp
> 


More information about the valhalla-dev mailing list