< prev index next >

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

Print this page
rev 55127 : 8223351: [lworld] Primary mirror and nullable mirror for inline type
Reviewed-by: tbd


  38 package compiler.valhalla.valuetypes;
  39 
  40 import java.lang.invoke.*;
  41 import java.lang.reflect.InvocationTargetException;
  42 import java.lang.reflect.Method;
  43 import jdk.experimental.value.MethodHandleBuilder;
  44 import jdk.test.lib.Asserts;
  45 
  46 inline class MyValue {
  47     public final int x;
  48 
  49     public MyValue(int x) {
  50         this.x = x;
  51     }
  52 }
  53 
  54 public class TestNativeClone {
  55 
  56     private static final MethodHandle cloneValue = MethodHandleBuilder.loadCode(MethodHandles.lookup(),
  57         "MyValue",
  58         MethodType.methodType(Object.class, MyValue.class.asValueType()),
  59         CODE -> {
  60             CODE.
  61             aload_0().
  62             invokevirtual(Object.class, "clone", "()Ljava/lang/Object;", false).
  63             areturn();
  64         });
  65 
  66     public static void test1(MyValue vt) throws Throwable {
  67         try {
  68             cloneValue.invoke(vt);
  69             throw new RuntimeException("No exception thrown");
  70         } catch (CloneNotSupportedException e) {
  71             // Expected
  72         }
  73     }
  74 
  75     public static void test2(Method clone, Object obj) {
  76         try {
  77             clone.invoke(obj);
  78         } catch (InvocationTargetException e) {


  38 package compiler.valhalla.valuetypes;
  39 
  40 import java.lang.invoke.*;
  41 import java.lang.reflect.InvocationTargetException;
  42 import java.lang.reflect.Method;
  43 import jdk.experimental.value.MethodHandleBuilder;
  44 import jdk.test.lib.Asserts;
  45 
  46 inline class MyValue {
  47     public final int x;
  48 
  49     public MyValue(int x) {
  50         this.x = x;
  51     }
  52 }
  53 
  54 public class TestNativeClone {
  55 
  56     private static final MethodHandle cloneValue = MethodHandleBuilder.loadCode(MethodHandles.lookup(),
  57         "MyValue",
  58         MethodType.methodType(Object.class, MyValue.class.asPrimaryType()),
  59         CODE -> {
  60             CODE.
  61             aload_0().
  62             invokevirtual(Object.class, "clone", "()Ljava/lang/Object;", false).
  63             areturn();
  64         });
  65 
  66     public static void test1(MyValue vt) throws Throwable {
  67         try {
  68             cloneValue.invoke(vt);
  69             throw new RuntimeException("No exception thrown");
  70         } catch (CloneNotSupportedException e) {
  71             // Expected
  72         }
  73     }
  74 
  75     public static void test2(Method clone, Object obj) {
  76         try {
  77             clone.invoke(obj);
  78         } catch (InvocationTargetException e) {
< prev index next >