未验证 提交 62b1e653 编写于 作者: D David Wood

Ensure that all statements in block are visited not just successors of a block.

上级 9c637144
......@@ -66,8 +66,8 @@ fn precompute_borrows_out_of_scope<'a, 'tcx>(
let mut visited = FxHashSet();
visited.insert(location);
debug!("borrow {:?} starts at {:?}", borrow_index, location);
debug!("borrow {:?} (region: {:?}) starts at {:?}",
borrow_index, borrow_region, location);
while let Some(location) = stack.pop() {
// If region does not contain a point at the location, then add to list and skip
// successor locations.
......@@ -80,15 +80,25 @@ fn precompute_borrows_out_of_scope<'a, 'tcx>(
continue;
}
// Add successors to locations to visit, if not visited before.
let bb_data = &mir[location.block];
if let Some(ref terminator) = bb_data.terminator {
for block in terminator.successors() {
let loc = block.start_location();
if visited.insert(loc) {
stack.push(loc);
// If this is the last statement in the block, then add the
// terminator successors next.
if location.statement_index == bb_data.statements.len() - 1 {
// Add successors to locations to visit, if not visited before.
if let Some(ref terminator) = bb_data.terminator {
for block in terminator.successors() {
let loc = block.start_location();
if visited.insert(loc) {
stack.push(loc);
}
}
}
} else {
// Visit next statement in block.
let loc = location.successor_within_block();
if visited.insert(loc) {
stack.push(loc);
}
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册