Commit aeda76c5 authored by titzer's avatar titzer Committed by Commit bot

[turbofan] Fix control reducer bug with NTLs.

R=bmeurer@chromium.org
BUG=

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

Cr-Commit-Position: refs/heads/master@{#25725}
parent 56f8ba13
......@@ -107,7 +107,7 @@ class ControlReducerImpl {
// We use a stack of (Node, UseIter) pairs to avoid O(n^2) traversal.
typedef std::pair<Node*, UseIter> FwIter;
ZoneDeque<FwIter> fw_stack(zone_);
ZoneVector<FwIter> fw_stack(zone_);
fw_stack.push_back(FwIter(start, start->uses().begin()));
while (!fw_stack.empty()) {
......@@ -123,8 +123,11 @@ class ControlReducerImpl {
marked.SetReachableFromEnd(added);
AddBackwardsReachableNodes(marked, nodes, nodes.size() - 1);
// The use list of {succ} might have changed.
fw_stack[fw_stack.size() - 1] = FwIter(succ, succ->uses().begin());
// Reset the use iterators for the entire stack.
for (size_t i = 0; i < fw_stack.size(); i++) {
FwIter& iter = fw_stack[i];
fw_stack[i] = FwIter(iter.first, iter.first->uses().begin());
}
pop = false; // restart traversing successors of this node.
break;
}
......
// 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
function mod1() {
var v_1 = 1;
var v_2 = 1;
v_1++;
v_2 = {valueOf: function() { throw "gagh"; }};
function bug1() {
for (var i = 0; i < 1; v_2++) {
if (v_1 == 1) ;
}
}
return bug1;
}
var f = mod1();
assertThrows(f);
%OptimizeFunctionOnNextCall(f);
assertThrows(f);
var v_3 = 1;
var v_4 = 1;
v_3++;
v_4 = {valueOf: function() { throw "gagh"; }};
function bug2() {
for (var i = 0; i < 1; v_4++) {
if (v_3 == 1) ;
}
}
assertThrows(bug2);
%OptimizeFunctionOnNextCall(bug2);
assertThrows(bug2);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment