about summary refs log tree commit diff
path: root/tests/ui/parser/syntactic-trailing-commas.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/parser/syntactic-trailing-commas.rs')
-rw-r--r--tests/ui/parser/syntactic-trailing-commas.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/ui/parser/syntactic-trailing-commas.rs b/tests/ui/parser/syntactic-trailing-commas.rs
new file mode 100644
index 00000000000..ba688dffb3c
--- /dev/null
+++ b/tests/ui/parser/syntactic-trailing-commas.rs
@@ -0,0 +1,42 @@
+//! Checks trailing commas are accepted in various places:
+//! - Generic parameters in function and struct definitions.
+//! - Function and method arguments.
+//! - Tuple and array literal expressions.
+//! - Tuple and array destructuring patterns, including those with `..`.
+//! - Enum variant declarations.
+//! - Attributes.
+
+//@ run-pass
+
+fn f<T,>(_: T,) {}
+
+struct Foo<T,>(#[allow(dead_code)] T);
+
+struct Bar;
+
+impl Bar {
+    fn f(_: isize,) {}
+    fn g(self, _: isize,) {}
+    fn h(self,) {}
+}
+
+enum Baz {
+    Qux(#[allow(dead_code)] isize,),
+}
+
+#[allow(unused,)]
+pub fn main() {
+    f::<isize,>(0,);
+    let (_, _,) = (1, 1,);
+    let [_, _,] = [1, 1,];
+    let [_, _, .., _,] = [1, 1, 1, 1,];
+    let [_, _, _, ..,] = [1, 1, 1, 1,];
+
+    let x: Foo<isize,> = Foo::<isize,>(1);
+
+    Bar::f(0,);
+    Bar.g(0,);
+    Bar.h();
+
+    let x = Baz::Qux(1,);
+}