JDK-8326600 : [lworld] Reflection issue after switching to JEP 401 model
  • Type: Bug
  • Component: hotspot
  • Sub-Component: runtime
  • Affected Version: repo-valhalla
  • Priority: P2
  • Status: Closed
  • Resolution: Duplicate
  • Submitted: 2024-02-23
  • Updated: 2024-03-18
  • Resolved: 2024-03-18
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
repo-valhallaResolved
Related Reports
Duplicate :  
Description
After switching to JEP 401 model, test runtime/valhalla/inlinetypes/EmptyInlineTest.java fails with this error message:

java.lang.InternalError: java.lang.NoSuchMethodException: no such method: jdk.internal.misc.Unsafe.getValue(Object,long)Object/invokeV
irtual
        at java.base/java.lang.invoke.MethodHandleStatics.newInternalError(MethodHandleStatics.java:166)
        at java.base/java.lang.invoke.DirectMethodHandle.makePreparedFieldLambdaForm(DirectMethodHandle.java:796)
        at java.base/java.lang.invoke.DirectMethodHandle.preparedFieldLambdaForm(DirectMethodHandle.java:696)
        at java.base/java.lang.invoke.DirectMethodHandle.preparedFieldLambdaForm(DirectMethodHandle.java:682)
        at java.base/java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:113)
        at java.base/java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:129)
        at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectFieldCommon(MethodHandles.java:4201)
        at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectFieldNoSecurityManager(MethodHandles.java:4192)
        at java.base/java.lang.invoke.MethodHandles$Lookup.unreflectField(MethodHandles.java:3634)
        at java.base/java.lang.invoke.MethodHandles$Lookup.unreflectGetter(MethodHandles.java:3585)
        at java.base/java.lang.invoke.MethodHandleImpl$1.unreflectField(MethodHandleImpl.java:1625)
        at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newFieldAccessor(MethodHandleAccessorFactory.java:184)
        at java.base/jdk.internal.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:144)
        at java.base/java.lang.reflect.Field.acquireFieldAccessor(Field.java:1203)
        at java.base/java.lang.reflect.Field.getFieldAccessor(Field.java:1182)
        at java.base/java.lang.reflect.Field.get(Field.java:458)
        at runtime.valhalla.inlinetypes.EmptyInlineTest.main(EmptyInlineTest.java:145)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:582)
        at com.sun.javatest.regtest.agent.MainWrapper$MainTask.run(MainWrapper.java:138)
        at java.base/java.lang.Thread.run(Thread.java:1570)
Caused by: java.lang.NoSuchMethodException: no such method: jdk.internal.misc.Unsafe.getValue(Object,long)Object/invokeVirtual
        at java.base/java.lang.invoke.MemberName.makeAccessException(MemberName.java:943)
        at java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1022)
        at java.base/java.lang.invoke.DirectMethodHandle.makePreparedFieldLambdaForm(DirectMethodHandle.java:793)
        ... 19 more
Caused by: java.lang.NoSuchMethodError: 'java.lang.Object jdk.internal.misc.Unsafe.getValue(java.lang.Object, long)'
        at java.base/java.lang.invoke.MethodHandleNatives.resolve(Native Method)
        at java.base/java.lang.invoke.MemberName$Factory.resolve(MemberName.java:990)
        at java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1019)
        ... 20 more
java.lang.RuntimeException: Reflection tests failed: java.lang.InternalError: java.lang.NoSuchMethodException: no such method: jdk.int
ernal.misc.Unsafe.getValue(Object,long)Object/invokeVirtual
        at runtime.valhalla.inlinetypes.EmptyInlineTest.main(EmptyInlineTest.java:154)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:582)
        at com.sun.javatest.regtest.agent.MainWrapper$MainTask.run(MainWrapper.java:138)
        at java.base/java.lang.Thread.run(Thread.java:1570)

JavaTest Message: Test threw exception: java.lang.RuntimeException: Reflection tests failed: java.lang.InternalError: java.lang.NoSuch
MethodException: no such method: jdk.internal.misc.Unsafe.getValue(Object,long)Object/invokeVirtual


Reproducing the issue to have changes from both https://bugs.openjdk.org/browse/JDK-8317277 and https://bugs.openjdk.org/browse/JDK-8326595.

One possible cause to this issue could the change to class flags in the new class file format, leading to the Java code to not identify correctly value classes.
Comments
Close it as a dup of JDK-8326719 that updated the reflection support for JEP 401.
18-03-2024

Please take a look and see if this may resolved by JDK-8327636 that corrected access checks during bootstrap. I was not able to reproduce the failure.
18-03-2024