diff options
| author | Waffle Lapkin <waffle.lapkin@gmail.com> | 2025-07-31 23:59:06 +0200 |
|---|---|---|
| committer | Waffle Lapkin <waffle.lapkin@gmail.com> | 2025-07-31 23:59:55 +0200 |
| commit | 5aec4379e304ef280ee9a470e7ab121e4a81fd17 (patch) | |
| tree | a15df3331056925f8068fa3d9b8a08e6f4a5b60a /tests/ui/explicit-tail-calls | |
| parent | adcb3d3b4cd3b7c4cde642f3ed537037f293738e (diff) | |
| download | rust-5aec4379e304ef280ee9a470e7ab121e4a81fd17.tar.gz rust-5aec4379e304ef280ee9a470e7ab121e4a81fd17.zip | |
detect infinite recursion with tail calls in ctfe
Diffstat (limited to 'tests/ui/explicit-tail-calls')
| -rw-r--r-- | tests/ui/explicit-tail-calls/infinite-recursion-in-ctfe.rs | 10 | ||||
| -rw-r--r-- | tests/ui/explicit-tail-calls/infinite-recursion-in-ctfe.stderr | 17 |
2 files changed, 27 insertions, 0 deletions
diff --git a/tests/ui/explicit-tail-calls/infinite-recursion-in-ctfe.rs b/tests/ui/explicit-tail-calls/infinite-recursion-in-ctfe.rs new file mode 100644 index 00000000000..0c55f13c16c --- /dev/null +++ b/tests/ui/explicit-tail-calls/infinite-recursion-in-ctfe.rs @@ -0,0 +1,10 @@ +#![feature(explicit_tail_calls)] +#![expect(incomplete_features)] + +const _: () = f(); + +const fn f() { + become f(); //~ error: constant evaluation is taking a long time +} + +fn main() {} diff --git a/tests/ui/explicit-tail-calls/infinite-recursion-in-ctfe.stderr b/tests/ui/explicit-tail-calls/infinite-recursion-in-ctfe.stderr new file mode 100644 index 00000000000..b5a96114a58 --- /dev/null +++ b/tests/ui/explicit-tail-calls/infinite-recursion-in-ctfe.stderr @@ -0,0 +1,17 @@ +error: constant evaluation is taking a long time + --> $DIR/infinite-recursion-in-ctfe.rs:7:5 + | +LL | become f(); + | ^^^^^^^^^^ + | + = note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval. + If your compilation actually takes a long time, you can safely allow the lint. +help: the constant being evaluated + --> $DIR/infinite-recursion-in-ctfe.rs:4:1 + | +LL | const _: () = f(); + | ^^^^^^^^^^^ + = note: `#[deny(long_running_const_eval)]` on by default + +error: aborting due to 1 previous error + |
