summaryrefslogtreecommitdiffstats
path: root/src/test/ui/parser/variadic-ffi-semantic-restrictions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/parser/variadic-ffi-semantic-restrictions.rs')
-rw-r--r--src/test/ui/parser/variadic-ffi-semantic-restrictions.rs77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/test/ui/parser/variadic-ffi-semantic-restrictions.rs b/src/test/ui/parser/variadic-ffi-semantic-restrictions.rs
new file mode 100644
index 000000000..0b61e267d
--- /dev/null
+++ b/src/test/ui/parser/variadic-ffi-semantic-restrictions.rs
@@ -0,0 +1,77 @@
+#![feature(c_variadic)]
+#![allow(anonymous_parameters)]
+
+fn main() {}
+
+fn f1_1(x: isize, ...) {}
+//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+
+fn f1_2(...) {}
+//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~| ERROR C-variadic function must be declared with at least one named argument
+
+extern "C" fn f2_1(x: isize, ...) {}
+//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+
+extern "C" fn f2_2(...) {}
+//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~| ERROR C-variadic function must be declared with at least one named argument
+
+extern "C" fn f2_3(..., x: isize) {}
+//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~| ERROR `...` must be the last argument of a C-variadic function
+
+extern "C" fn f3_1(x: isize, ...) {}
+//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+
+extern "C" fn f3_2(...) {}
+//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~| ERROR C-variadic function must be declared with at least one named argument
+
+extern "C" fn f3_3(..., x: isize) {}
+//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~| ERROR `...` must be the last argument of a C-variadic function
+
+extern "C" {
+ fn e_f1(...);
+ //~^ ERROR C-variadic function must be declared with at least one named argument
+ fn e_f2(..., x: isize);
+//~^ ERROR `...` must be the last argument of a C-variadic function
+}
+
+struct X;
+
+impl X {
+ fn i_f1(x: isize, ...) {}
+ //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+ fn i_f2(...) {}
+ //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+ //~| ERROR C-variadic function must be declared with at least one named argument
+ fn i_f3(..., x: isize, ...) {}
+ //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+ //~| ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+ //~| ERROR `...` must be the last argument of a C-variadic function
+ fn i_f4(..., x: isize, ...) {}
+ //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+ //~| ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+ //~| ERROR `...` must be the last argument of a C-variadic function
+}
+
+trait T {
+ fn t_f1(x: isize, ...) {}
+ //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+ fn t_f2(x: isize, ...);
+ //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+ fn t_f3(...) {}
+ //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+ //~| ERROR C-variadic function must be declared with at least one named argument
+ fn t_f4(...);
+ //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+ //~| ERROR C-variadic function must be declared with at least one named argument
+ fn t_f5(..., x: isize) {}
+ //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+ //~| ERROR `...` must be the last argument of a C-variadic function
+ fn t_f6(..., x: isize);
+ //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+ //~| ERROR `...` must be the last argument of a C-variadic function
+}