granite-rust/tests/coverage/let_else_loop.coverage
Zalathar 9dc6e08279 Manually run x fmt on all source files in tests/coverage/
Currently we can't automatically enforce formatting on tests (see ), but
we can at least keep things relatively tidy by occasionally running the
formatter manually.

This was done by temporarily commenting out the `"/tests/"` exclusion in
`rustfmt.toml`, and then running `x fmt tests/coverage` and
`x test coverage --bless`.
2024-05-29 14:34:17 +10:00

31 lines
1.3 KiB
Text

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| |}