Chromium Code Reviews| Index: tests/language/deopt_lazy_finalization_test.dart |
| =================================================================== |
| --- tests/language/deopt_lazy_finalization_test.dart (revision 0) |
| +++ tests/language/deopt_lazy_finalization_test.dart (working copy) |
| @@ -0,0 +1,42 @@ |
| +// 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. |
| +// Test deoptimziation caused by lazy finalization. |
| +// VMOptions=--optimization-counter-threshold=10 --no-use-osr |
| + |
| +import "package:expect/expect.dart"; |
| + |
| +main() { |
| + Expect.equals(20000, part1()); |
| + // Trigger lazy finalization of class B, which should invalidate |
| + // optimized code for A.loop. |
| + Expect.equals(-20000, part2()); |
| +} |
| + |
| +part1() { |
| + var a = new A(); |
| + a.loop(); |
| + return a.loop(); |
|
regis
2013/11/21 21:48:18
If there is a reason to call a.loop() twice, you s
srdjan
2013/11/21 22:25:00
Added comments. The reason is that only second tim
|
| +} |
| + |
| +part2() { |
| + var b = new B(); |
| + b.loop(); |
| + return b.loop(); |
|
regis
2013/11/21 21:48:18
ditto
srdjan
2013/11/21 22:25:00
Done.
|
| +} |
| + |
| +class A { |
| + foo() => 2; |
| + |
| + loop() { |
| + var sum = 0; |
| + for (int i = 0; i < 10000; i++) { |
| + sum += foo(); |
| + } |
| + return sum; |
| + } |
| +} |
| + |
| +class B extends A { |
| + foo() => -2; |
| +} |