Index: test/mjsunit/elide-double-hole-check-10.js |
diff --git a/test/mjsunit/elide-double-hole-check-10.js b/test/mjsunit/elide-double-hole-check-10.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e9f2a9aaf58aa4c59dd1ecba433de549a485f91a |
--- /dev/null |
+++ b/test/mjsunit/elide-double-hole-check-10.js |
@@ -0,0 +1,36 @@ |
+// Copyright 2015 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Flags: --allow-natives-syntax |
+ |
+function f1(a, i) { |
+ return a[i] + 0.5; |
+} |
+var arr = [,0.0,2.5]; |
+assertEquals(0.5, f1(arr, 1)); |
+assertEquals(0.5, f1(arr, 1)); |
+%OptimizeFunctionOnNextCall(f1); |
+assertEquals(0.5, f1(arr, 1)); |
+ |
+// Trick crankshaft into accepting feedback with the array prototype |
+// map even though a call on that map was never made. optopush should |
+// refuse to inline the push call based on the danger that it's modifying |
+// the array prototype. |
+var push = Array.prototype.push; |
+var array_prototype = Array.prototype; |
+ |
+function optopush(a) { |
+ push.call(a, 1); |
+} |
+ |
+function foo() { |
+ optopush(array_prototype); |
+} |
+ |
+optopush([]); |
+optopush([]); |
+optopush([]); |
+%OptimizeFunctionOnNextCall(foo); |
+foo(); |
+assertEquals(1.5, f1(arr, 0)); |