[turbofan] Set elements kind to holey if constructing array of possibly non-zero length.
BUG=chromium:621147 Review-Url: https://codereview.chromium.org/2126623003 Cr-Commit-Position: refs/heads/master@{#37543}
This commit is contained in:
parent
0ff1ca3f1f
commit
7614362b7e
@ -473,6 +473,9 @@ Reduction JSCreateLowering::ReduceNewArray(Node* node, Node* length,
|
||||
PretenureFlag pretenure = site->GetPretenureMode();
|
||||
ElementsKind elements_kind = site->GetElementsKind();
|
||||
DCHECK(IsFastElementsKind(elements_kind));
|
||||
if (NodeProperties::GetType(length)->Max() > 0) {
|
||||
elements_kind = GetHoleyElementsKind(elements_kind);
|
||||
}
|
||||
dependencies()->AssumeTenuringDecision(site);
|
||||
dependencies()->AssumeTransitionStable(site);
|
||||
|
||||
|
29
test/mjsunit/compiler/regress-621147.js
Normal file
29
test/mjsunit/compiler/regress-621147.js
Normal file
@ -0,0 +1,29 @@
|
||||
// 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 --turbo-filter=test2
|
||||
|
||||
function test(n) {
|
||||
return Array(n);
|
||||
}
|
||||
|
||||
function test2() {
|
||||
return test(2);
|
||||
}
|
||||
|
||||
function test3(a) {
|
||||
a[0] = 1;
|
||||
}
|
||||
|
||||
test(0);
|
||||
|
||||
var smi_array = [1,2];
|
||||
smi_array[2] = 3;
|
||||
test3(smi_array);
|
||||
|
||||
%OptimizeFunctionOnNextCall(test2);
|
||||
|
||||
var broken_array = test2();
|
||||
test3(broken_array);
|
||||
1+broken_array[0];
|
Loading…
Reference in New Issue
Block a user