| #![feature(coverage_attribute)] |
| //@ edition: 2021 |
| |
| // Regression test for <https://github.com/rust-lang/rust/issues/122738>. |
| // These code patterns should not trigger an ICE when allocating a physical |
| // counter to a node and also one of its in-edges, because that is allowed |
| // when the node contains a tight loop to itself. |
| |
| fn loopy(cond: bool) { |
| let true = cond else { loop {} }; |
| } |
| |
| // Variant that also has `loop {}` on the success path. |
| // This isn't needed to catch the original ICE, but might help detect regressions. |
| fn _loop_either_way(cond: bool) { |
| let true = cond else { loop {} }; |
| loop {} |
| } |
| |
| // Variant using regular `if` instead of let-else. |
| // This doesn't trigger the original ICE, but might help detect regressions. |
| fn _if(cond: bool) { |
| if cond { loop {} } else { loop {} } |
| } |
| |
| #[coverage(off)] |
| fn main() { |
| loopy(true); |
| } |