about summary refs log tree commit diff
path: root/library/std/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-04-21 15:08:02 +0000
committerbors <bors@rust-lang.org>2023-04-21 15:08:02 +0000
commit4a03f14b099bf19f0124872b3f6d99ef00db7902 (patch)
tree5e5f9756b3a03c11ac6a62506bfcea66349a904e /library/std/src
parent409661936f929b254ffc8adb644cf35d1f9765c4 (diff)
parent8ec49ad19a0c77c438c9d3092a6ecf52d6f2cab6 (diff)
downloadrust-4a03f14b099bf19f0124872b3f6d99ef00db7902.tar.gz
rust-4a03f14b099bf19f0124872b3f6d99ef00db7902.zip
Auto merge of #110569 - saethlin:mir-pass-cooperation, r=cjgillot
Deduplicate unreachable blocks, for real this time

In https://github.com/rust-lang/rust/pull/106428 (in particular https://github.com/rust-lang/rust/pull/106428/commits/41eda69516dd3ee217ae07c0efa369d31f630405) we noticed that inlining `unreachable_unchecked` can produce duplicate unreachable blocks. So we improved two MIR optimizations: `SimplifyCfg` was given a simplify to deduplicate unreachable blocks, then `InstCombine` was given a combiner to deduplicate switch targets that point at the same block. The problem is that change doesn't actually work.

Our current pass order is
```
SimplifyCfg (does nothing relevant to this situation)
Inline (produces multiple unreachable blocks)
InstCombine (doesn't do anything here, oops)
SimplifyCfg (produces the duplicate SwitchTargets that InstCombine is looking for)
```

So in here, I have factored out the specific function from `InstCombine` and placed it inside the simplify that produces the case it is looking for. This should ensure that it runs in the scenario it was designed for.

Fixes https://github.com/rust-lang/rust/issues/110551
r? `@cjgillot`
Diffstat (limited to 'library/std/src')
0 files changed, 0 insertions, 0 deletions