-
Bug
-
Resolution: Fixed
-
P2
-
repo-valhalla
The "// Class initialization barrier for static methods" code needs to be added to c2i_inline_entry as well (c2i_inline_ro_entry does not need it because the corresponding method is non-static by definition).
diff --git a/test/hotspot/jtreg/runtime/clinit/ClassInitBarrier.java b/test/hotspot/jtreg/runtime/clinit/ClassInitBarrier.java
index 402b38e0666..51ea157a56d 100644
--- a/test/hotspot/jtreg/runtime/clinit/ClassInitBarrier.java
+++ b/test/hotspot/jtreg/runtime/clinit/ClassInitBarrier.java
@@ -85,6 +85,7 @@ public class ClassInitBarrier {
changePhase(Phase.FINISHED);
}
+ static void staticM2(Runnable action, MyValue val) { action.run(); }
static void staticM(Runnable action) { action.run(); }
static synchronized void staticS(Runnable action) { action.run(); }
static native void staticN(Runnable action);
@@ -99,7 +100,11 @@ public class ClassInitBarrier {
static class B extends A {}
- static void testInvokeStatic(Runnable action) { A.staticM(action); }
+ static value class MyValue {
+ int x = 42;
+ }
+
+ static void testInvokeStatic(Runnable action) { A.staticM2(action, new MyValue()); }
static void testInvokeStaticSync(Runnable action) { A.staticS(action); }
static void testInvokeStaticNative(Runnable action) { A.staticN(action); }
java.lang.AssertionError: NON_BLOCKING: wrong phase: IN_PROGRESS
at ClassInitBarrier.lambda$disposableAction$1(ClassInitBarrier.java:328)
at ClassInitBarrier$Test$A.staticM2(ClassInitBarrier.java:88)
at ClassInitBarrier$Test.testInvokeStatic(ClassInitBarrier.java:107)
at ClassInitBarrier.lambda$checkBlocked$7(ClassInitBarrier.java:401)
at java.base/java.lang.Thread.run(Thread.java:1589)
java.lang.NoClassDefFoundError: Could not initialize class ClassInitBarrier$Test$A
at ClassInitBarrier$Test.testNewInstanceA(ClassInitBarrier.java:113)
at ClassInitBarrier.lambda$checkBlocked$7(ClassInitBarrier.java:401)
at java.base/java.lang.Thread.run(Thread.java:1589)
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.AssertionError: not blocked [in thread "MainThread"]
at ClassInitBarrier.checkBlocked(ClassInitBarrier.java:421)
at ClassInitBarrier.checkBlockingAction(ClassInitBarrier.java:351)
at ClassInitBarrier$Test.runTests(ClassInitBarrier.java:134)
at ClassInitBarrier$Test$A.<clinit>(ClassInitBarrier.java:80)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:516)
at java.base/java.lang.Class.forName(Class.java:495)
at ClassInitBarrier.triggerInitialization(ClassInitBarrier.java:389)
at ClassInitBarrier$Test.lambda$run$0(ClassInitBarrier.java:178)
at ClassInitBarrier.execute(ClassInitBarrier.java:188)
at ClassInitBarrier$Test.run(ClassInitBarrier.java:178)
at ClassInitBarrier.main(ClassInitBarrier.java:480)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:579)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
... 1 more
diff --git a/test/hotspot/jtreg/runtime/clinit/ClassInitBarrier.java b/test/hotspot/jtreg/runtime/clinit/ClassInitBarrier.java
index 402b38e0666..51ea157a56d 100644
--- a/test/hotspot/jtreg/runtime/clinit/ClassInitBarrier.java
+++ b/test/hotspot/jtreg/runtime/clinit/ClassInitBarrier.java
@@ -85,6 +85,7 @@ public class ClassInitBarrier {
changePhase(Phase.FINISHED);
}
+ static void staticM2(Runnable action, MyValue val) { action.run(); }
static void staticM(Runnable action) { action.run(); }
static synchronized void staticS(Runnable action) { action.run(); }
static native void staticN(Runnable action);
@@ -99,7 +100,11 @@ public class ClassInitBarrier {
static class B extends A {}
- static void testInvokeStatic(Runnable action) { A.staticM(action); }
+ static value class MyValue {
+ int x = 42;
+ }
+
+ static void testInvokeStatic(Runnable action) { A.staticM2(action, new MyValue()); }
static void testInvokeStaticSync(Runnable action) { A.staticS(action); }
static void testInvokeStaticNative(Runnable action) { A.staticN(action); }
java.lang.AssertionError: NON_BLOCKING: wrong phase: IN_PROGRESS
at ClassInitBarrier.lambda$disposableAction$1(ClassInitBarrier.java:328)
at ClassInitBarrier$Test$A.staticM2(ClassInitBarrier.java:88)
at ClassInitBarrier$Test.testInvokeStatic(ClassInitBarrier.java:107)
at ClassInitBarrier.lambda$checkBlocked$7(ClassInitBarrier.java:401)
at java.base/java.lang.Thread.run(Thread.java:1589)
java.lang.NoClassDefFoundError: Could not initialize class ClassInitBarrier$Test$A
at ClassInitBarrier$Test.testNewInstanceA(ClassInitBarrier.java:113)
at ClassInitBarrier.lambda$checkBlocked$7(ClassInitBarrier.java:401)
at java.base/java.lang.Thread.run(Thread.java:1589)
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.AssertionError: not blocked [in thread "MainThread"]
at ClassInitBarrier.checkBlocked(ClassInitBarrier.java:421)
at ClassInitBarrier.checkBlockingAction(ClassInitBarrier.java:351)
at ClassInitBarrier$Test.runTests(ClassInitBarrier.java:134)
at ClassInitBarrier$Test$A.<clinit>(ClassInitBarrier.java:80)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:516)
at java.base/java.lang.Class.forName(Class.java:495)
at ClassInitBarrier.triggerInitialization(ClassInitBarrier.java:389)
at ClassInitBarrier$Test.lambda$run$0(ClassInitBarrier.java:178)
at ClassInitBarrier.execute(ClassInitBarrier.java:188)
at ClassInitBarrier$Test.run(ClassInitBarrier.java:178)
at ClassInitBarrier.main(ClassInitBarrier.java:480)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:579)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
... 1 more