diff options
| author | Maybe Waffle <waffle.lapkin@gmail.com> | 2023-09-28 23:50:56 +0000 |
|---|---|---|
| committer | Maybe Waffle <waffle.lapkin@gmail.com> | 2023-09-28 23:50:56 +0000 |
| commit | 27242437c7315b8fd456e310fe767a152cb434cd (patch) | |
| tree | a90a76d454960561694e2f18b8f4ceb01b671a0f | |
| parent | 0e0dc59acbdc4671c1fdcaf6c06fd9c4d1d8c9e2 (diff) | |
| download | rust-27242437c7315b8fd456e310fe767a152cb434cd.tar.gz rust-27242437c7315b8fd456e310fe767a152cb434cd.zip | |
Reverse postorder instead of using reversed postorder
| -rw-r--r-- | src/tools/clippy/clippy_utils/src/mir/mod.rs | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/src/tools/clippy/clippy_utils/src/mir/mod.rs b/src/tools/clippy/clippy_utils/src/mir/mod.rs index f04467dc19d..9dbb4c68d13 100644 --- a/src/tools/clippy/clippy_utils/src/mir/mod.rs +++ b/src/tools/clippy/clippy_utils/src/mir/mod.rs @@ -30,20 +30,26 @@ pub fn visit_local_usage(locals: &[Local], mir: &Body<'_>, location: Location) - locals.len() ]; - traversal::ReversePostorder::new(mir, location.block).try_fold(init, |usage, (tbb, tdata)| { - // Give up on loops - if tdata.terminator().successors().any(|s| s == location.block) { - return None; - } + traversal::Postorder::new(&mir.basic_blocks, location.block) + .collect::<Vec<_>>() + .into_iter() + .rev() + .try_fold(init, |usage, tbb| { + let tdata = &mir.basic_blocks[tbb]; + + // Give up on loops + if tdata.terminator().successors().any(|s| s == location.block) { + return None; + } - let mut v = V { - locals, - location, - results: usage, - }; - v.visit_basic_block_data(tbb, tdata); - Some(v.results) - }) + let mut v = V { + locals, + location, + results: usage, + }; + v.visit_basic_block_data(tbb, tdata); + Some(v.results) + }) } struct V<'a> { |
