Index: test/mjsunit/compiler/try-deopt.js |
diff --git a/test/mjsunit/compiler/try-deopt.js b/test/mjsunit/compiler/try-deopt.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dc44e7326fa23d17296c7e7cbf75717bd794a225 |
--- /dev/null |
+++ b/test/mjsunit/compiler/try-deopt.js |
@@ -0,0 +1,56 @@ |
+// Copyright 2015 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// TODO(mstarzinger): Add FLAG_turbo_exceptions once we want ClusterFuzz. |
+// Flags: --allow-natives-syntax --turbo-deoptimization |
+ |
+function DeoptFromTry(x) { |
+ try { |
+ %DeoptimizeFunction(DeoptFromTry); |
+ throw x; |
+ } catch (e) { |
+ return e + 1; |
+ } |
+ return x + 2; |
+} |
+%OptimizeFunctionOnNextCall(DeoptFromTry); |
+assertEquals(24, DeoptFromTry(23)); |
+ |
+ |
+function DeoptFromCatch(x) { |
+ try { |
+ throw x; |
+ } catch (e) { |
+ %DeoptimizeFunction(DeoptFromCatch); |
+ return e + 1; |
+ } |
+ return x + 2; |
+} |
+%OptimizeFunctionOnNextCall(DeoptFromCatch); |
+assertEquals(24, DeoptFromCatch(23)); |
+ |
+ |
+function DeoptFromFinally_Return(x) { |
+ try { |
+ throw x; |
+ } finally { |
+ %DeoptimizeFunction(DeoptFromFinally_Return); |
+ return x + 1; |
+ } |
+ return x + 2; |
+} |
+%OptimizeFunctionOnNextCall(DeoptFromFinally_Return); |
+assertEquals(24, DeoptFromFinally_Return(23)); |
+ |
+ |
+function DeoptFromFinally_ReThrow(x) { |
+ try { |
+ throw x; |
+ } finally { |
+ %DeoptimizeFunction(DeoptFromFinally_ReThrow); |
+ } |
+ return x + 2; |
+} |
+%OptimizeFunctionOnNextCall(DeoptFromFinally_ReThrow); |
+assertThrows("DeoptFromFinally_ReThrow(new Error)", Error); |