mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
34 lines
897 B
Rust
34 lines
897 B
Rust
|
#![feature(coverage_attribute)]
|
||
|
//@ edition: 2021
|
||
|
//@ ignore-test
|
||
|
// 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);
|
||
|
}
|