Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8294013

[lworld] Missing class init barriers in c2i adapter

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P2 P2
    • repo-valhalla
    • repo-valhalla
    • hotspot

      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

            thartmann Tobias Hartmann
            thartmann Tobias Hartmann
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: