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) {
|