diff options
| author | Zalathar <Zalathar@users.noreply.github.com> | 2024-03-20 18:00:12 +1100 |
|---|---|---|
| committer | Zalathar <Zalathar@users.noreply.github.com> | 2024-03-20 18:14:35 +1100 |
| commit | 70206f06ca5cff08d3b84240074ec89e705ab61b (patch) | |
| tree | 8dae724be048dec5d9b998e4cb12c5510ff3439c /tests/coverage/let_else_loop.coverage | |
| parent | b7dcabe55e3b915ba9488dc374f752404c2c8945 (diff) | |
| download | rust-70206f06ca5cff08d3b84240074ec89e705ab61b.tar.gz rust-70206f06ca5cff08d3b84240074ec89e705ab61b.zip | |
coverage: Regression test for ICE triggered by self-loops
Diffstat (limited to 'tests/coverage/let_else_loop.coverage')
| -rw-r--r-- | tests/coverage/let_else_loop.coverage | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/coverage/let_else_loop.coverage b/tests/coverage/let_else_loop.coverage new file mode 100644 index 00000000000..3b3c39ff301 --- /dev/null +++ b/tests/coverage/let_else_loop.coverage @@ -0,0 +1,35 @@ + LL| |#![feature(coverage_attribute)] + LL| |//@ edition: 2021 + LL| |//@ ignore-test + 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 { + LL| 0| loop {} + LL| | } else { + LL| 0| loop {} + LL| | } + LL| |} + LL| | + LL| |#[coverage(off)] + LL| |fn main() { + LL| | loopy(true); + LL| |} + |
