about summary refs log tree commit diff
path: root/tests/ui/recursion
diff options
context:
space:
mode:
authorKivooeo <Kivooeo123@gmail.com>2025-07-01 20:20:14 +0500
committerKivooeo <Kivooeo123@gmail.com>2025-07-13 00:03:31 +0500
commit47b8a32ca311e2c441f4e7d747bfd75f0045baa1 (patch)
tree081904d1f6314f1ba20a7aabfe52a2a02dc95a16 /tests/ui/recursion
parentbfc046a4b8d6b57db02540182466e989a9b0fb40 (diff)
downloadrust-47b8a32ca311e2c441f4e7d747bfd75f0045baa1.tar.gz
rust-47b8a32ca311e2c441f4e7d747bfd75f0045baa1.zip
moved tests
Diffstat (limited to 'tests/ui/recursion')
-rw-r--r--tests/ui/recursion/recursion-tail-call-no-arg-leak.rs8
-rw-r--r--tests/ui/recursion/recursion-tail-cps.rs17
2 files changed, 25 insertions, 0 deletions
diff --git a/tests/ui/recursion/recursion-tail-call-no-arg-leak.rs b/tests/ui/recursion/recursion-tail-call-no-arg-leak.rs
new file mode 100644
index 00000000000..234924307c3
--- /dev/null
+++ b/tests/ui/recursion/recursion-tail-call-no-arg-leak.rs
@@ -0,0 +1,8 @@
+//@ run-pass
+// use of tail calls causes arg slot leaks, issue #160.
+
+fn inner(dummy: String, b: bool) { if b { return inner(dummy, false); } }
+
+pub fn main() {
+    inner("hi".to_string(), true);
+}
diff --git a/tests/ui/recursion/recursion-tail-cps.rs b/tests/ui/recursion/recursion-tail-cps.rs
new file mode 100644
index 00000000000..fe99dadf795
--- /dev/null
+++ b/tests/ui/recursion/recursion-tail-cps.rs
@@ -0,0 +1,17 @@
+//@ run-pass
+
+fn checktrue(rs: bool) -> bool { assert!(rs); return true; }
+
+pub fn main() { let k = checktrue; evenk(42, k); oddk(45, k); }
+
+fn evenk(n: isize, k: fn(bool) -> bool) -> bool {
+    println!("evenk");
+    println!("{}", n);
+    if n == 0 { return k(true); } else { return oddk(n - 1, k); }
+}
+
+fn oddk(n: isize, k: fn(bool) -> bool) -> bool {
+    println!("oddk");
+    println!("{}", n);
+    if n == 0 { return k(false); } else { return evenk(n - 1, k); }
+}