about summary refs log tree commit diff
path: root/tests/coverage/let_else_loop.coverage
diff options
context:
space:
mode:
authorZalathar <Zalathar@users.noreply.github.com>2024-03-20 18:00:12 +1100
committerZalathar <Zalathar@users.noreply.github.com>2024-03-20 18:14:35 +1100
commit70206f06ca5cff08d3b84240074ec89e705ab61b (patch)
tree8dae724be048dec5d9b998e4cb12c5510ff3439c /tests/coverage/let_else_loop.coverage
parentb7dcabe55e3b915ba9488dc374f752404c2c8945 (diff)
downloadrust-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.coverage35
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|       |}
+