diff options
| author | Folkert de Vries <folkert@folkertdev.nl> | 2025-09-13 20:50:56 +0200 |
|---|---|---|
| committer | Folkert de Vries <folkert@folkertdev.nl> | 2025-09-13 21:05:12 +0200 |
| commit | d28c31a60069d6c6019341edd2b2b26d903f081c (patch) | |
| tree | 360c59d8169abb2ce93f8839903ab19575992eb7 | |
| parent | a84bb32e05d7dfa069ead63e90816e1833f107c9 (diff) | |
| download | rust-d28c31a60069d6c6019341edd2b2b26d903f081c.tar.gz rust-d28c31a60069d6c6019341edd2b2b26d903f081c.zip | |
c-variadic: check that c-variadic functions cannot be tail-called
as far as I can see this was not tested, though the error message was already implemented
| -rw-r--r-- | tests/ui/explicit-tail-calls/c-variadic.rs | 14 | ||||
| -rw-r--r-- | tests/ui/explicit-tail-calls/c-variadic.stderr | 8 |
2 files changed, 22 insertions, 0 deletions
diff --git a/tests/ui/explicit-tail-calls/c-variadic.rs b/tests/ui/explicit-tail-calls/c-variadic.rs new file mode 100644 index 00000000000..e6eebe4228e --- /dev/null +++ b/tests/ui/explicit-tail-calls/c-variadic.rs @@ -0,0 +1,14 @@ +#![expect(incomplete_features)] +#![feature(c_variadic, explicit_tail_calls)] +#![allow(unused)] + +unsafe extern "C" fn foo(mut ap: ...) -> u32 { + ap.arg::<u32>() +} + +extern "C" fn bar() -> u32 { + unsafe { become foo(1, 2, 3) } + //~^ ERROR c-variadic functions can't be tail-called +} + +fn main() {} diff --git a/tests/ui/explicit-tail-calls/c-variadic.stderr b/tests/ui/explicit-tail-calls/c-variadic.stderr new file mode 100644 index 00000000000..5293339d218 --- /dev/null +++ b/tests/ui/explicit-tail-calls/c-variadic.stderr @@ -0,0 +1,8 @@ +error: c-variadic functions can't be tail-called + --> $DIR/c-variadic.rs:10:14 + | +LL | unsafe { become foo(1, 2, 3) } + | ^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 1 previous error + |
