< prev index next >

test/hotspot/jtreg/compiler/valhalla/valuetypes/TestUnloadedValueTypeArray.java

Print this page

@@ -29,10 +29,11 @@
  * @compile -XDemitQtypes -XDenableValueTypes -XDallowFlattenabilityModifiers -XDallowWithFieldOperator TestUnloadedValueTypeArray.java
  * @run main/othervm -XX:+EnableValhalla -Xcomp
  *        -XX:CompileCommand=compileonly,TestUnloadedValueTypeArray::test1
  *        -XX:CompileCommand=compileonly,TestUnloadedValueTypeArray::test2
  *        -XX:CompileCommand=compileonly,TestUnloadedValueTypeArray::test3
+ *        -XX:CompileCommand=compileonly,TestUnloadedValueTypeArray::test4
  *      TestUnloadedValueTypeArray
  */
 
 import jdk.test.lib.Asserts;
 

@@ -64,11 +65,20 @@
     static MyValue3 make(int n) {
         return __WithField(MyValue3.default.foo, n);
     }
 }
 
+value final class MyValue4 {
+    final int foo;
 
+    private MyValue4() {
+        foo = 0x53;
+    }
+    static MyValue4 make(int n) {
+        return __WithField(MyValue4.default.foo, n);
+    }
+}
 
 public class TestUnloadedValueTypeArray {
 
     static MyValue[] target() {
         return new MyValue[10];

@@ -122,11 +132,37 @@
             test3(arr);
         }
         Asserts.assertEQ(arr[1].foo, 2345);
     }
 
+    static MyValue4[] test4(boolean b) {
+        // range check elimination
+        if (b) {
+            MyValue4[] arr = new MyValue4[10];
+            arr[1] = MyValue4.make(2345);
+            return arr;
+        } else {
+            return null;
+        }
+    }
+
+    static void test4_verifier() {
+        int n = 50000;
+
+        for (int i=0; i<n; i++) {
+            test4(false);
+        }
+
+        MyValue4[] arr = null;
+        for (int i=0; i<n; i++) {
+          arr = test4(true);
+        }
+        Asserts.assertEQ(arr[1].foo, 2345);
+    }
+
     static public void main(String[] args) {
         test1();
         test2_verifier();
         test3_verifier();
+        test4_verifier();
     }
 }
< prev index next >