Rollup merge of #108902 - lcnr:do-while-sus, r=davidtwco,Nilstrieb

no more do while :<
This commit is contained in:
Matthias Krüger 2023-03-10 21:15:46 +01:00 committed by GitHub
commit 5e449b32b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 25 deletions

View File

@ -588,8 +588,8 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
// let PATTERN = ... might not even exist until we do the assignment. // let PATTERN = ... might not even exist until we do the assignment.
// so we set it here instead. // so we set it here instead.
if set_match_place { if set_match_place {
let mut candidate_ref = &candidate; let mut next = Some(&candidate);
while let Some(next) = { while let Some(candidate_ref) = next.take() {
for binding in &candidate_ref.bindings { for binding in &candidate_ref.bindings {
let local = self.var_local_id(binding.var_id, OutsideGuard); let local = self.var_local_id(binding.var_id, OutsideGuard);
// `try_to_place` may fail if it is unable to resolve the given // `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 // All of the subcandidates should bind the same locals, so we
// only visit the first one. // only visit the first one.
candidate_ref.subcandidates.get(0) next = candidate_ref.subcandidates.get(0)
} {
candidate_ref = next;
} }
} }

View File

@ -537,29 +537,29 @@ impl TraverseCoverageGraphWithLoops {
"TraverseCoverageGraphWithLoops::next - context_stack: {:?}", "TraverseCoverageGraphWithLoops::next - context_stack: {:?}",
self.context_stack.iter().rev().collect::<Vec<_>>() self.context_stack.iter().rev().collect::<Vec<_>>()
); );
while let Some(next_bcb) = {
// Strip contexts with empty worklists from the top of the stack while let Some(context) = self.context_stack.last_mut() {
while self.context_stack.last().map_or(false, |context| context.worklist.is_empty()) { 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(); 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 None
} }