v8/test/mjsunit/keyed-load-hole-to-undefined.js
mvstanton caeb9004f0 Don't MISS if you read the hole from certain FastHoley arrays.
If the array's map is the initial FastHoley array map, and the array prototype
chain is undisturbed and empty of elements, then keyed loads can convert the
load of a hole to undefined.

BUG=

Review URL: https://codereview.chromium.org/1100083002

Cr-Commit-Position: refs/heads/master@{#28056}
2015-04-27 08:46:38 +00:00

27 lines
811 B
JavaScript

// 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
// Flags: --nostress-opt
// --nostress-opt is specified because the test corrupts the "pristine"
// array prototype chain by storing an element, and this is tracked
// per-isolate. A subsequent stress run would send the load generic,
// and no more deoptimizations of foo would occur.
function foo(a, i) { return a[i]; }
var a = ['one', , 'three'];
foo(a, 0);
foo(a, 0);
foo(a, 0);
%OptimizeFunctionOnNextCall(foo);
assertEquals(undefined, foo(a, 1));
assertOptimized(foo);
// Whereas if we disrupt the prototype chain...
Array.prototype[1] = 'cow';
assertEquals('cow', foo(a, 1));
assertUnoptimized(foo);