about summary refs log tree commit diff
diff options
context:
space:
mode:
authorkennytm <kennytm@gmail.com>2019-03-03 13:56:57 +0800
committerkennytm <kennytm@gmail.com>2019-03-03 13:56:57 +0800
commit946e670bce9f1e123dffce485fc979a96edbb0b8 (patch)
treeec62a39d585d23dc5f6b7aa794c4f11e89b0af28
parentc835a0a94db7e68a57b6449497f74cf2f74c0256 (diff)
parent379cd29d1c9ce06aa48fdd49208cfd7ffd3e5c07 (diff)
downloadrust-946e670bce9f1e123dffce485fc979a96edbb0b8.tar.gz
rust-946e670bce9f1e123dffce485fc979a96edbb0b8.zip
Rollup merge of #58865 - dlrobertson:fix-varargs, r=alexreg
Fix C-variadic function printing

There is no longer a need to append the string `", ..."` to a functions
args as `...` is parsed as an argument and will appear in the functions
arguments.

Fixes: #58853
-rw-r--r--src/libsyntax/print/pprust.rs3
-rw-r--r--src/test/pretty/fn-variadic.rs15
2 files changed, 15 insertions, 3 deletions
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index 942bd969391..49e3fad4af0 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -2814,9 +2814,6 @@ impl<'a> State<'a> {
         -> io::Result<()> {
         self.popen()?;
         self.commasep(Inconsistent, &decl.inputs, |s, arg| s.print_arg(arg, false))?;
-        if decl.c_variadic {
-            self.s.word(", ...")?;
-        }
         self.pclose()?;
 
         self.print_fn_output(decl)
diff --git a/src/test/pretty/fn-variadic.rs b/src/test/pretty/fn-variadic.rs
new file mode 100644
index 00000000000..d499be42460
--- /dev/null
+++ b/src/test/pretty/fn-variadic.rs
@@ -0,0 +1,15 @@
+// Check that `fn foo(x: i32, ...)` does not print as `fn foo(x: i32, ..., ...)`.
+// See issue #58853.
+
+// pp-exact
+#![feature(c_variadic)]
+
+extern "C" {
+    pub fn foo(x: i32, ...);
+}
+
+pub unsafe extern "C" fn bar(_: i32, mut ap: ...) -> usize {
+    ap.arg::<usize>()
+}
+
+fn main() { }