OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 // Test deoptimization on an optimistically hoisted smi check. | 4 // Test deoptimization on an optimistically hoisted smi check. |
5 // VMOptions=--optimization-counter-threshold=10 --no-background-compilation --
enable-inlining-annotations | 5 // VMOptions=--optimization-counter-threshold=10 --no-background-compilation --
enable-inlining-annotations |
6 | 6 |
7 // Test that lazy deoptimization works if the program returns to a function | 7 // Test that lazy deoptimization works if the program returns to a function |
8 // that is scheduled for lazy deoptimization via an exception. | 8 // that is scheduled for lazy deoptimization via an exception. |
9 | 9 |
10 import 'package:expect/expect.dart'; | 10 import 'package:expect/expect.dart'; |
(...skipping 10 matching lines...) Expand all Loading... |
21 if (b) { | 21 if (b) { |
22 c.x = 2.5; | 22 c.x = 2.5; |
23 throw 123; | 23 throw 123; |
24 } | 24 } |
25 } | 25 } |
26 | 26 |
27 @NeverInline | 27 @NeverInline |
28 T1(C c, bool b) { | 28 T1(C c, bool b) { |
29 try { | 29 try { |
30 AA(c, b); | 30 AA(c, b); |
31 } on dynamic { | 31 } on dynamic catch (e, st) { |
| 32 print(e); |
| 33 print(st); |
32 } | 34 } |
33 return c.x + 1; | 35 return c.x + 1; |
34 } | 36 } |
35 | 37 |
36 | 38 |
37 @NeverInline | 39 @NeverInline |
38 T2(C c, bool b) { | 40 T2(C c, bool b) { |
39 try { | 41 try { |
40 AA(c, b); | 42 AA(c, b); |
41 } on String { | 43 } on String catch(e, st) { |
| 44 print(e); |
| 45 print(st); |
42 Expect.isTrue(false); | 46 Expect.isTrue(false); |
43 } on int catch(e) { | 47 } on int catch(e, st) { |
44 Expect.equals(e, 123); | 48 Expect.equals(e, 123); |
45 Expect.equals(b, true); | 49 Expect.equals(b, true); |
46 Expect.equals(c.x, 2.5); | 50 Expect.equals(c.x, 2.5); |
| 51 print(st); |
47 } | 52 } |
48 return c.x + 1; | 53 return c.x + 1; |
49 } | 54 } |
50 | 55 |
51 | 56 |
52 main() { | 57 main() { |
53 var c = new C(); | 58 var c = new C(); |
54 for (var i = 0; i < 10000; ++i) { | 59 for (var i = 0; i < 10000; ++i) { |
55 T1(c, false); | 60 T1(c, false); |
56 T2(c, false); | 61 T2(c, false); |
57 } | 62 } |
58 Expect.equals(43, T1(c, false)); | 63 Expect.equals(43, T1(c, false)); |
59 Expect.equals(43, T2(c, false)); | 64 Expect.equals(43, T2(c, false)); |
60 Expect.equals(3.5, T1(c, true)); | 65 Expect.equals(3.5, T1(c, true)); |
61 Expect.equals(3.5, T2(c, true)); | 66 Expect.equals(3.5, T2(c, true)); |
62 } | 67 } |
63 | |
64 | |
OLD | NEW |