Chromium Code Reviews| Index: tests/language/src/ListDoubleIndexInLoopTest.dart |
| diff --git a/tests/language/src/ListDoubleIndexInLoopTest.dart b/tests/language/src/ListDoubleIndexInLoopTest.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..89725cc1b2baddc24e549000524f33dd87fff4fa |
| --- /dev/null |
| +++ b/tests/language/src/ListDoubleIndexInLoopTest.dart |
| @@ -0,0 +1,25 @@ |
| +// 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. |
| +// Dart test program for testing arrays. |
| + |
| +bar() => true; |
| + |
| +// The type propagation in Dart2Js wrongly took the intersection of all incoming |
| +// types in a loop-phi. In this case the back-edge brought type 'number' which, |
| +// combined with 'integer' (i = 0) was narrowed to 'integer'. As a result no |
|
Lasse Reichstein Nielsen
2012/04/16 10:43:32
What kind of type propagation is this? For optimiz
floitsch
2012/04/16 12:08:37
Narrowing has uses too. In this case, of course, i
|
| +// check was inserted for the list access. |
| +foo(a) { |
| + var i = 0; |
| + while (true) { |
| + if (i > 1) return a[i]; |
| + if (bar()) { |
| + // Adding a double guarantees a double result. Therefore guard by an if. |
| + i = i + 1.5; |
| + } |
| + } |
| +} |
| + |
| +main() { |
| + Expect.throws(() => foo([1, 2])); |
| +} |