[LW2] Q-mirror, method handle, and reflection support for Q-type

Tobias Hartmann tobias.hartmann at oracle.com
Thu Nov 29 09:00:10 UTC 2018


Hi Mandy,

On 28.11.18 22:57, Mandy Chung wrote:
>> We now seem to have 3 types:
>> class compiler.valhalla.valuetypes.MyValue
>> class compiler.valhalla.valuetypes.MyValue/val
>> class compiler.valhalla.valuetypes.MyValue/box
> 
> How do you get the above names? 

I got this by doing:
System.out.println("" + MyValue.class + " " + MyValue.class.asValueType() + " " +
MyValue.class.asBoxType());

It does not reproduce with your latest webrev so probably the patch for the first one was missing
some parts.

> As TestNewAcmp.java is failing in lworld branch, I miss to update this.  TestNewAcmp now passes
> after changing from MyValue.class to MyValue.class.asValueType().

Yes, the test now passes.

> After pulling the recent lworld patches, TestLWorld.java fails instead (it passed before i pulled
> down the recent patches). 
> 
> # To suppress the following error report, specify this argument
> # after -XX: or in .hotspotrc:  SuppressErrorAt=/interpreterRuntime.cpp:336
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> #  Internal Error
> (/scratch/mchung/ws/valhalla/q-mirror/src/hotspot/share/interpreter/interpreterRuntime.cpp:336),
> pid=94111, tid=6915
> #  assert(old_value != __null && oopDesc::is_oop(old_value) && old_value->is_value()) failed:
> Verifying receiver
> #
> # JRE version: OpenJDK Runtime Environment (12.0) (fastdebug build 12-internal+0-adhoc.mlchung.q-mirror)
> # Java VM: OpenJDK 64-Bit Server VM (fastdebug 12-internal+0-adhoc.mlchung.q-mirror, mixed mode,
> compressed oops, g1 gc, bsd-amd64)
> # No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit
> -c unlimited" before starting Java again
> #

Yes, I've seen that as well. I will have a look after you've pushed your fix.

> compiler/valhalla/valuetypes/TestNullableValueTypes.java:  class file generated by
> MethodHandleBuilder fails with VerifierError. 
This [1] doesn't look like a VerifierError to me. And the test passes if I change:

diff -r bfe436999cd6 test/hotspot/jtreg/compiler/valhalla/valuetypes/TestNullableValueTypes.java
--- a/test/hotspot/jtreg/compiler/valhalla/valuetypes/TestNullableValueTypes.java	Thu Nov 29
09:58:33 2018 +0100
+++ b/test/hotspot/jtreg/compiler/valhalla/valuetypes/TestNullableValueTypes.java	Thu Nov 29
09:58:37 2018 +0100
@@ -228,7 +228,7 @@

     private static final MethodHandle getNull = MethodHandleBuilder.loadCode(MethodHandles.lookup(),
         "getNull",
-        MethodType.methodType(MyValue1.class.asBoxType()),
+        MethodType.methodType(MyValue1.class.asValueType()),
         CODE -> {
             CODE.
             aconst_null().

But we should really use the BoxType because we are returning null.

Thanks,
Tobias

[1] Failures I'm seeing with TestNullableValueTypes:

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.IllegalStateException: java.lang.IllegalStateException:
java.lang.NoSuchMethodException: no such method:
compiler.valhalla.valuetypes.getNull/0x00000008000cec40.getNull()MyValue1.box/invokeStatic
	at java.base/jdk.experimental.value.MethodHandleBuilder.loadCode(MethodHandleBuilder.java:110)
	at java.base/jdk.experimental.value.MethodHandleBuilder.loadCode(MethodHandleBuilder.java:77)
	at java.base/jdk.experimental.value.MethodHandleBuilder.loadCode(MethodHandleBuilder.java:72)
	at compiler.valhalla.valuetypes.TestNullableValueTypes.<clinit>(TestNullableValueTypes.java:229)
	... 9 more
Caused by: java.lang.IllegalStateException: java.lang.NoSuchMethodException: no such method:
compiler.valhalla.valuetypes.getNull/0x00000008000cec40.getNull()MyValue1.box/invokeStatic
	at java.base/jdk.experimental.value.MethodHandleBuilder.lambda$loadCode$0(MethodHandleBuilder.java:82)
	at java.base/jdk.experimental.value.MethodHandleBuilder.loadCode(MethodHandleBuilder.java:108)
	... 12 more
Caused by: java.lang.NoSuchMethodException: no such method:
compiler.valhalla.valuetypes.getNull/0x00000008000cec40.getNull()MyValue1.box/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 java.base/jdk.experimental.value.MethodHandleBuilder.lambda$loadCode$0(MethodHandleBuilder.java:80)
	... 13 more
Caused by: java.lang.NoSuchMethodError:
compiler.valhalla.valuetypes.getNull/0x00000008000cec40.getNull()Qcompiler/valhalla/valuetypes/MyValue1;
	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)
	... 16 more



More information about the valhalla-dev mailing list