rust/tests/coverage/let_else_loop.coverage

32 lines
1.3 KiB
Plaintext
Raw Normal View History

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