| // Copyright (c) 2015, 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. |
| // VMOptions=--optimization-counter-threshold=1000 --max-polymorphic-checks=1 --no-background-compilation |
| |
| // @dart = 2.9 |
| |
| // Test correct loop invariant code motion and type propagation from is-checks |
| // and null-comparisons. |
| |
| class B { |
| var b; |
| B(this.b); |
| } |
| |
| class C { |
| final f0 = null; |
| |
| final a; |
| C() : a = new B(0); |
| } |
| |
| foo(x) { |
| for (var i = 0; i < 10; i++) { |
| i + i; |
| i + i; |
| if (x is C) { |
| x.a.b < 0; |
| } |
| } |
| } |
| |
| class Y { |
| var f = null; |
| } |
| |
| bar(y) { |
| var x = y.f; |
| for (var i = 0; i < 10; i++) { |
| if (x != null) { |
| x.a.b < 0; |
| } |
| } |
| } |
| |
| main() { |
| var o = new Y(); |
| o.f = new C(); |
| bar(o); |
| o.f = null; |
| bar(o); |
| |
| for (var i = 0; i < 1000; i++) bar(o); |
| |
| foo(new C()); |
| foo(0); |
| |
| for (var i = 0; i < 1000; i++) foo(0); |
| } |