Index: tests/language/bailout3_test.dart |
=================================================================== |
--- tests/language/bailout3_test.dart (revision 0) |
+++ tests/language/bailout3_test.dart (revision 0) |
@@ -0,0 +1,39 @@ |
+// 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 that the return type of a method is being registered for both |
+// its bailout and optimized version in dart2js. |
+ |
+var a; |
+ |
+bar() { |
+ if (a[0] == 0) { |
+ // Force bailout version. |
+ bar(); |
+ // Avoid inlining. |
+ throw 0; |
+ } |
+ for (int i = 0; i < 10; i++) { |
+ a[0] = 42; |
+ } |
+ // This return should say that bar can return an array or unknown. |
+ return a; |
+} |
+ |
+foo() { |
+ if (a[0] == 0) { |
+ // Avoid inlining. |
+ throw 0; |
+ } |
+ var a = bar(); |
+ // This check used to fail because dart2js was assuming [a] was an |
+ // array. |
+ Expect.equals(1, a.length); |
+} |
+ |
+main() { |
+ a = new Map(); |
+ bar(); |
+ foo(); |
+} |