Don't inline Array.shift() if receiver map is not extensible.

TEST=mjsunit/regress/regress-crbug-405517
BUG=405517
LOG=y
R=jarin@chromium.org

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

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23255 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
bmeurer@chromium.org 2014-08-21 06:23:44 +00:00
parent 93489e7695
commit 0142786cea
2 changed files with 17 additions and 1 deletions

View File

@ -8343,7 +8343,7 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
ElementsKind kind = receiver_map->elements_kind();
if (!IsFastElementsKind(kind)) return false;
if (receiver_map->is_observed()) return false;
DCHECK(receiver_map->is_extensible());
if (!receiver_map->is_extensible()) return false;
// If there may be elements accessors in the prototype chain, the fast
// inlined version can't be used.

View File

@ -0,0 +1,16 @@
// Copyright 2014 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 --gc-interval=203
function f() {
var e = [0];
%PreventExtensions(e);
for (var i = 0; i < 4; i++) e.shift();
}
f();
f();
%OptimizeFunctionOnNextCall(f);
f();