diff options
| author | bors <bors@rust-lang.org> | 2023-09-30 12:38:12 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-09-30 12:38:12 +0000 |
| commit | 75d731eee97b300b3cbd13222fe17c34b15f006a (patch) | |
| tree | 36f3d159865b5051c7d3569bbc88edf6ff537e44 /src | |
| parent | 5282e5e120128ba589728ee4bcb4f18511ba9fb0 (diff) | |
| parent | 814fbd89b69173a3f2189c739dd32921702c5eca (diff) | |
| download | rust-75d731eee97b300b3cbd13222fe17c34b15f006a.tar.gz rust-75d731eee97b300b3cbd13222fe17c34b15f006a.zip | |
Auto merge of #116254 - WaffleLapkin:nicen-traversal, r=cjgillot
Assorted improvements for `rustc_middle::mir::traversal` r? `@cjgillot` I'm not _entirely_ sure about all changes, although I do like all of them. If you'd like I can drop some commits. Best reviewed on a commit-by-commit basis, I think, since they are fairly isolated.
Diffstat (limited to 'src')
| -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> { |
