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); |
| 34 Expect.isTrue(st is StackTrace, "is StackTrace"); |
32 } | 35 } |
33 return c.x + 1; | 36 return c.x + 1; |
34 } | 37 } |
35 | 38 |
36 | 39 |
37 @NeverInline | 40 @NeverInline |
38 T2(C c, bool b) { | 41 T2(C c, bool b) { |
39 try { | 42 try { |
40 AA(c, b); | 43 AA(c, b); |
41 } on String { | 44 } on String catch(e, st) { |
| 45 print(e); |
| 46 print(st); |
| 47 Expect.isTrue(st is StackTrace, "is StackTrace"); |
42 Expect.isTrue(false); | 48 Expect.isTrue(false); |
43 } on int catch(e) { | 49 } on int catch(e, st) { |
44 Expect.equals(e, 123); | 50 Expect.equals(e, 123); |
45 Expect.equals(b, true); | 51 Expect.equals(b, true); |
46 Expect.equals(c.x, 2.5); | 52 Expect.equals(c.x, 2.5); |
| 53 print(st); |
| 54 Expect.isTrue(st is StackTrace, "is StackTrace"); |
47 } | 55 } |
48 return c.x + 1; | 56 return c.x + 1; |
49 } | 57 } |
50 | 58 |
51 | 59 |
52 main() { | 60 main() { |
53 var c = new C(); | 61 var c = new C(); |
54 for (var i = 0; i < 10000; ++i) { | 62 for (var i = 0; i < 10000; ++i) { |
55 T1(c, false); | 63 T1(c, false); |
56 T2(c, false); | 64 T2(c, false); |
57 } | 65 } |
58 Expect.equals(43, T1(c, false)); | 66 Expect.equals(43, T1(c, false)); |
59 Expect.equals(43, T2(c, false)); | 67 Expect.equals(43, T2(c, false)); |
60 Expect.equals(3.5, T1(c, true)); | 68 Expect.equals(3.5, T1(c, true)); |
61 Expect.equals(3.5, T2(c, true)); | 69 Expect.equals(3.5, T2(c, true)); |
62 } | 70 } |
63 | |
64 | |
OLD | NEW |