29 import org.graalvm.compiler.api.directives.GraalDirectives;
30 import org.graalvm.compiler.core.test.GraalCompilerTest;
31 import org.graalvm.compiler.nodes.FrameState;
32 import org.junit.Test;
33
34 public final class RethrowDeoptMaterializeTest extends GraalCompilerTest {
35
36 private static final Object RETURN_VALUE = "1 2 3";
37 private static final RuntimeException DUMMY_EXCEPTION = new RuntimeException();
38
39 static class MyException extends RuntimeException {
40 private static final long serialVersionUID = 0L;
41
42 MyException(Throwable cause) {
43 super(cause);
44 }
45
46 @SuppressWarnings("sync-override")
47 @Override
48 public final Throwable fillInStackTrace() {
49 return null;
50 }
51 }
52
53 public static Object executeDeoptRethrow(int action) {
54
55 try {
56 if (action != 0) {
57 throw new MyException(DUMMY_EXCEPTION);
58 } else if (action == 1) {
59 throw new MyException(null);
60 }
61 } catch (RuntimeException t) {
62 Throwable e = t.getCause();
63 GraalDirectives.deoptimize();
64 if (e != DUMMY_EXCEPTION) {
65 throw t;
66 }
67 }
68 return RETURN_VALUE;
69 }
|
29 import org.graalvm.compiler.api.directives.GraalDirectives;
30 import org.graalvm.compiler.core.test.GraalCompilerTest;
31 import org.graalvm.compiler.nodes.FrameState;
32 import org.junit.Test;
33
34 public final class RethrowDeoptMaterializeTest extends GraalCompilerTest {
35
36 private static final Object RETURN_VALUE = "1 2 3";
37 private static final RuntimeException DUMMY_EXCEPTION = new RuntimeException();
38
39 static class MyException extends RuntimeException {
40 private static final long serialVersionUID = 0L;
41
42 MyException(Throwable cause) {
43 super(cause);
44 }
45
46 @SuppressWarnings("sync-override")
47 @Override
48 public final Throwable fillInStackTrace() {
49 return this;
50 }
51 }
52
53 public static Object executeDeoptRethrow(int action) {
54
55 try {
56 if (action != 0) {
57 throw new MyException(DUMMY_EXCEPTION);
58 } else if (action == 1) {
59 throw new MyException(null);
60 }
61 } catch (RuntimeException t) {
62 Throwable e = t.getCause();
63 GraalDirectives.deoptimize();
64 if (e != DUMMY_EXCEPTION) {
65 throw t;
66 }
67 }
68 return RETURN_VALUE;
69 }
|