[turbofan] Fix bogus representation for {kCheckTaggedHole}.
The operator in question is guaranteed to produce a tagged value that is not equal to the-hole, it however does not guarantee the value to be a HeapObject. The correct representation hence is {kTagged}. R=bmeurer@chromium.org TEST=mjsunit/regress/regress-crbug-665587 BUG=chromium:665587 Review-Url: https://codereview.chromium.org/2504183002 Cr-Commit-Position: refs/heads/master@{#41032}
This commit is contained in:
parent
feb787714c
commit
31a8ec7762
@ -2466,8 +2466,7 @@ class RepresentationSelector {
|
||||
return;
|
||||
}
|
||||
case IrOpcode::kCheckTaggedHole: {
|
||||
VisitUnop(node, UseInfo::AnyTagged(),
|
||||
MachineRepresentation::kTaggedPointer);
|
||||
VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
|
||||
return;
|
||||
}
|
||||
case IrOpcode::kConvertTaggedHoleToUndefined: {
|
||||
|
16
test/mjsunit/regress/regress-crbug-665587.js
Normal file
16
test/mjsunit/regress/regress-crbug-665587.js
Normal file
@ -0,0 +1,16 @@
|
||||
// Copyright 2016 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 --expose-gc
|
||||
|
||||
var a = new (function() { this[0] = 1 });
|
||||
function f() {
|
||||
for (var i = 0; i < 4; ++i) {
|
||||
var x = a[0];
|
||||
(function() { return x });
|
||||
if (i == 1) %OptimizeOsr();
|
||||
gc();
|
||||
}
|
||||
}
|
||||
f();
|
Loading…
Reference in New Issue
Block a user