mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-21 22:34:05 +00:00
Rollup merge of #108902 - lcnr:do-while-sus, r=davidtwco,Nilstrieb
no more do while :<
This commit is contained in:
commit
5e449b32b5
@ -588,8 +588,8 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
// let PATTERN = ... might not even exist until we do the assignment.
|
||||
// so we set it here instead.
|
||||
if set_match_place {
|
||||
let mut candidate_ref = &candidate;
|
||||
while let Some(next) = {
|
||||
let mut next = Some(&candidate);
|
||||
while let Some(candidate_ref) = next.take() {
|
||||
for binding in &candidate_ref.bindings {
|
||||
let local = self.var_local_id(binding.var_id, OutsideGuard);
|
||||
// `try_to_place` may fail if it is unable to resolve the given
|
||||
@ -617,9 +617,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
}
|
||||
// All of the subcandidates should bind the same locals, so we
|
||||
// only visit the first one.
|
||||
candidate_ref.subcandidates.get(0)
|
||||
} {
|
||||
candidate_ref = next;
|
||||
next = candidate_ref.subcandidates.get(0)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -537,29 +537,29 @@ impl TraverseCoverageGraphWithLoops {
|
||||
"TraverseCoverageGraphWithLoops::next - context_stack: {:?}",
|
||||
self.context_stack.iter().rev().collect::<Vec<_>>()
|
||||
);
|
||||
while let Some(next_bcb) = {
|
||||
// Strip contexts with empty worklists from the top of the stack
|
||||
while self.context_stack.last().map_or(false, |context| context.worklist.is_empty()) {
|
||||
|
||||
while let Some(context) = self.context_stack.last_mut() {
|
||||
if let Some(next_bcb) = context.worklist.pop() {
|
||||
if !self.visited.insert(next_bcb) {
|
||||
debug!("Already visited: {:?}", next_bcb);
|
||||
continue;
|
||||
}
|
||||
debug!("Visiting {:?}", next_bcb);
|
||||
if self.backedges[next_bcb].len() > 0 {
|
||||
debug!("{:?} is a loop header! Start a new TraversalContext...", next_bcb);
|
||||
self.context_stack.push(TraversalContext {
|
||||
loop_backedges: Some((self.backedges[next_bcb].clone(), next_bcb)),
|
||||
worklist: Vec::new(),
|
||||
});
|
||||
}
|
||||
self.extend_worklist(basic_coverage_blocks, next_bcb);
|
||||
return Some(next_bcb);
|
||||
} else {
|
||||
// Strip contexts with empty worklists from the top of the stack
|
||||
self.context_stack.pop();
|
||||
}
|
||||
// Pop the next bcb off of the current context_stack. If none, all BCBs were visited.
|
||||
self.context_stack.last_mut().map_or(None, |context| context.worklist.pop())
|
||||
} {
|
||||
if !self.visited.insert(next_bcb) {
|
||||
debug!("Already visited: {:?}", next_bcb);
|
||||
continue;
|
||||
}
|
||||
debug!("Visiting {:?}", next_bcb);
|
||||
if self.backedges[next_bcb].len() > 0 {
|
||||
debug!("{:?} is a loop header! Start a new TraversalContext...", next_bcb);
|
||||
self.context_stack.push(TraversalContext {
|
||||
loop_backedges: Some((self.backedges[next_bcb].clone(), next_bcb)),
|
||||
worklist: Vec::new(),
|
||||
});
|
||||
}
|
||||
self.extend_worklist(basic_coverage_blocks, next_bcb);
|
||||
return Some(next_bcb);
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user