< prev index next >
test/compiler/valhalla/valuetypes/ValueTypeTestBench.java
Print this page
*** 2603,2612 ****
--- 2603,2690 ----
public void test93_verifier(boolean warmup) throws Throwable {
long result = test93();
Asserts.assertEQ(result, 0L);
}
+ // Test correctness of the Class::isAssignableFrom intrinsic
+ @Test()
+ public boolean test94(Class<?> supercls, Class<?> subcls) {
+ return supercls.isAssignableFrom(subcls);
+ }
+
+ public void test94_verifier(boolean warmup) {
+ Asserts.assertTrue(test94(__Value.class, MyValue1.class), "test94_1 failed");
+ Asserts.assertTrue(test94(MyValue1.class, MyValue1.class), "test94_2 failed");
+ Asserts.assertTrue(test94(Object.class, java.util.ArrayList.class), "test94_3 failed");
+ Asserts.assertTrue(test94(java.util.ArrayList.class, java.util.ArrayList.class), "test94_4 failed");
+ Asserts.assertTrue(!test94(Object.class, MyValue1.class), "test94_5 failed");
+ Asserts.assertTrue(!test94(__Value.class, java.util.ArrayList.class), "test94_6 failed");
+ }
+
+ // Verify that Class::isAssignableFrom checks with statically known classes are folded
+ @Test(failOn = LOADK)
+ public boolean test95() {
+ boolean check1 = java.util.AbstractList.class.isAssignableFrom(java.util.ArrayList.class);
+ boolean check2 = MyValue1.class.isAssignableFrom(MyValue1.class);
+ boolean check3 = Object.class.isAssignableFrom(java.util.ArrayList.class);
+ boolean check4 = java.lang.__Value.class.isAssignableFrom(MyValue1.class);
+ boolean check5 = !Object.class.isAssignableFrom(MyValue1.class);
+ boolean check6 = !MyValue1.class.isAssignableFrom(Object.class);
+ return check1 && check2 && check3 && check4 && check5 && check6;
+ }
+
+ public void test95_verifier(boolean warmup) {
+ Asserts.assertTrue(test95(), "test95 failed");
+ }
+
+ // Test correctness of the Class::getSuperclass intrinsic
+ @Test()
+ public Class<?> test96(Class<?> cls) {
+ return cls.getSuperclass();
+ }
+
+ public void test96_verifier(boolean warmup) {
+ Asserts.assertTrue(test96(__Value.class) == null, "test94_1 failed");
+ Asserts.assertTrue(test96(Object.class) == null, "test94_2 failed");
+ Asserts.assertTrue(test96(MyValue1.class) == __Value.class, "test94_3 failed");
+ Asserts.assertTrue(test96(Class.class) == Object.class, "test94_4 failed");
+ }
+
+ // Verify that Class::getSuperclass checks with statically known classes are folded
+ @Test(failOn = LOADK)
+ public boolean test97() {
+ boolean check1 = __Value.class.getSuperclass() == null;
+ boolean check2 = Object.class.getSuperclass() == null;
+ boolean check3 = MyValue1.class.getSuperclass() == __Value.class;
+ boolean check4 = Class.class.getSuperclass() == Object.class;
+ return check1 && check2 && check3 && check4;
+ }
+
+ public void test97_verifier(boolean warmup) {
+ Asserts.assertTrue(test97(), "test97 failed");
+ }
+
+ // Test Class::cast intrinsic
+ @Test()
+ public Object test98(Class<?> cls, Object o) throws ClassCastException {
+ return cls.cast(o);
+ }
+
+ public void test98_verifier(boolean warmup) {
+ try {
+ test98(ValueCapableClass1.class, vcc);
+ } catch (ClassCastException e) {
+ throw new RuntimeException("test98_1 failed");
+ }
+ try {
+ test98(__Value.class, new Object());
+ throw new RuntimeException("test98_2 failed");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+ }
+
// ========== Test infrastructure ==========
private static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox();
private static final int ValueTypePassFieldsAsArgsOn = 0x1;
private static final int ValueTypePassFieldsAsArgsOff = 0x2;
*** 2632,2641 ****
--- 2710,2720 ----
private static final String END = ")|";
private static final String ALLOC = "(.*precise klass compiler/valhalla/valuetypes/MyValue.*\\R(.*(nop|spill).*\\R)*.*_new_instance_Java" + END;
private static final String ALLOCA = "(.*precise klass \\[Qcompiler/valhalla/valuetypes/MyValue.*\\R(.*(nop|spill).*\\R)*.*_new_array_Java" + END;
private static final String LOAD = START + "Load(B|S|I|L|F|D)" + MID + "valuetype\\*" + END;
private static final String LOADP = START + "Load(P|N)" + MID + "valuetype\\*" + END;
+ private static final String LOADK = START + "LoadK" + MID + END;
private static final String STORE = START + "Store(B|S|I|L|F|D)" + MID + "valuetype\\*" + END;
private static final String STOREP = START + "Store(P|N)" + MID + "valuetype\\*" + END;
private static final String LOOP = START + "Loop" + MID + "" + END;
private static final String TRAP = START + "CallStaticJava" + MID + "uncommon_trap.*(unstable_if|predicate)" + END;
private static final String RETURN = START + "Return" + MID + "returns" + END;
< prev index next >