Index: tests/language/try_catch4_test.dart |
=================================================================== |
--- tests/language/try_catch4_test.dart (revision 0) |
+++ tests/language/try_catch4_test.dart (revision 0) |
@@ -0,0 +1,195 @@ |
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+// Check that our SSA graph does have the try body a predecessor of a |
+// try/finally. |
+ |
+var a; |
+ |
+foo1() { |
+ var b = false; |
+ var entered = false; |
+ while (true) { |
+ if (entered) return b; |
+ b = 8 == a; // This expression should not be GVN'ed. |
+ try { |
+ a = 8; |
+ return; |
+ } finally { |
+ b = 8 == a; |
+ entered = true; |
+ continue; |
+ } |
+ } |
+} |
+ |
+doThrow() { throw 2; } |
+ |
+foo2() { |
+ var b = false; |
+ var entered = false; |
+ while (true) { |
+ if (entered) return b; |
+ b = 8 == a; // This expression should not be GVN'ed. |
+ try { |
+ a = 8; |
+ doThrow(); |
+ return; |
+ } catch(e) { |
+ b = 8 == a; |
+ entered = true; |
+ continue; |
+ } |
+ } |
+} |
+ |
+foo3() { |
+ var b = false; |
+ var entered = false; |
+ while (true) { |
+ if (entered) return b; |
+ b = 8 == a; // This expression should not be GVN'ed. |
+ try { |
+ doThrow(); |
+ } catch(e) { |
+ a = 8; |
+ entered = true; |
+ return; |
+ } finally { |
+ b = 8 == a; |
+ entered = true; |
+ continue; |
+ } |
+ } |
+} |
+ |
+foo4() { |
+ var b = false; |
+ var entered = false; |
+ while (true) { |
+ if (entered) return b; |
+ b = 8 == a; // This expression should not be GVN'ed. |
+ try { |
+ a = 8; |
+ break; |
+ } finally { |
+ b = 8 == a; |
+ entered = true; |
+ continue; |
+ } |
+ } |
+} |
+ |
+foo5() { |
+ var b = false; |
+ var entered = false; |
+ while (true) { |
+ if (entered) return b; |
+ b = 8 == a; // This expression should not be GVN'ed. |
+ try { |
+ a = 8; |
+ doThrow(); |
+ break; |
+ } catch(e) { |
+ b = 8 == a; |
+ entered = true; |
+ continue; |
+ } |
+ } |
+} |
+ |
+foo6() { |
+ var b = false; |
+ var entered = false; |
+ while (true) { |
+ if (entered) return b; |
+ b = 8 == a; // This expression should not be GVN'ed. |
+ try { |
+ doThrow(); |
+ } catch(e) { |
+ a = 8; |
+ entered = true; |
+ break; |
+ } finally { |
+ b = 8 == a; |
+ entered = true; |
+ continue; |
+ } |
+ } |
+} |
+ |
+foo7() { |
+ var b = false; |
+ var entered = false; |
+ while (true) { |
+ if (entered) return b; |
+ b = 8 == a; // This expression should not be GVN'ed. |
+ try { |
+ a = 8; |
+ continue; |
+ } finally { |
+ b = 8 == a; |
+ entered = true; |
+ continue; |
+ } |
+ } |
+} |
+ |
+foo8() { |
+ var b = false; |
+ var entered = false; |
+ while (true) { |
+ if (entered) return b; |
+ b = 8 == a; // This expression should not be GVN'ed. |
+ try { |
+ a = 8; |
+ doThrow(); |
+ continue; |
+ } catch(e) { |
+ b = 8 == a; |
+ entered = true; |
+ continue; |
+ } |
+ } |
+} |
+ |
+foo9() { |
+ var b = false; |
+ var entered = false; |
+ while (true) { |
+ if (entered) return b; |
+ b = 8 == a; // This expression should not be GVN'ed. |
+ try { |
+ doThrow(); |
+ } catch(e) { |
+ a = 8; |
+ entered = true; |
+ continue; |
+ } finally { |
+ b = 8 == a; |
+ entered = true; |
+ continue; |
+ } |
+ } |
+} |
+ |
+main() { |
+ a = 0; |
+ Expect.isTrue(foo1()); |
+ a = 0; |
+ Expect.isTrue(foo2()); |
+ a = 0; |
+ Expect.isTrue(foo3()); |
+ a = 0; |
+ Expect.isTrue(foo4()); |
+ a = 0; |
+ Expect.isTrue(foo5()); |
+ a = 0; |
+ Expect.isTrue(foo6()); |
+ a = 0; |
+ Expect.isTrue(foo7()); |
+ a = 0; |
+ Expect.isTrue(foo8()); |
+ a = 0; |
+ Expect.isTrue(foo9()); |
+} |