OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 // Test deoptimization on an optimistically hoisted smi check. |
| 5 // VMOptions=--optimization-counter-threshold=10 --no-background-compilation --
enable-inlining-annotations |
| 6 |
| 7 // Test that lazy deoptimization works if the program returns to a function |
| 8 // that is scheduled for lazy deoptimization via an exception. |
| 9 |
| 10 import 'package:expect/expect.dart'; |
| 11 |
| 12 class C { |
| 13 var x = 42; |
| 14 } |
| 15 |
| 16 |
| 17 const NeverInline = "NeverInline"; |
| 18 |
| 19 @NeverInline |
| 20 AA(C c, bool b) { |
| 21 if (b) { |
| 22 c.x = 2.5; |
| 23 throw 123; |
| 24 } |
| 25 } |
| 26 |
| 27 @NeverInline |
| 28 T1(C c, bool b) { |
| 29 try { |
| 30 AA(c, b); |
| 31 } on dynamic { |
| 32 } |
| 33 return c.x + 1; |
| 34 } |
| 35 |
| 36 |
| 37 @NeverInline |
| 38 T2(C c, bool b) { |
| 39 try { |
| 40 AA(c, b); |
| 41 } on String { |
| 42 Expect.isTrue(false); |
| 43 } on int catch(e) { |
| 44 Expect.equals(e, 123); |
| 45 Expect.equals(b, true); |
| 46 Expect.equals(c.x, 2.5); |
| 47 } |
| 48 return c.x + 1; |
| 49 } |
| 50 |
| 51 |
| 52 main() { |
| 53 var c = new C(); |
| 54 for (var i = 0; i < 10000; ++i) { |
| 55 T1(c, false); |
| 56 T2(c, false); |
| 57 } |
| 58 Expect.equals(43, T1(c, false)); |
| 59 Expect.equals(43, T2(c, false)); |
| 60 Expect.equals(3.5, T1(c, true)); |
| 61 Expect.equals(3.5, T2(c, true)); |
| 62 } |
| 63 |
| 64 |
OLD | NEW |