about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-10-01 09:55:35 +0200
committerGitHub <noreply@github.com>2019-10-01 09:55:35 +0200
commitdc1c1fe45602acc2ec93d09c0cfb1a34cf291ecf (patch)
tree2b7041ec71aa32770df30481fbf6f536b497dfbd
parent24a84fae34a3d4eff2dd631c65365d20a6e11b04 (diff)
parent9c73131fd04bf5a60c53c752293f136fdaa016af (diff)
downloadrust-dc1c1fe45602acc2ec93d09c0cfb1a34cf291ecf.tar.gz
rust-dc1c1fe45602acc2ec93d09c0cfb1a34cf291ecf.zip
Rollup merge of #64928 - JohnTitor:add-some-tests, r=Centril
Add tests for some issues

Closes #50571
Closes #58022
Closes #58344
-rw-r--r--src/test/ui/issues/issue-50571.rs6
-rw-r--r--src/test/ui/issues/issue-50571.stderr13
-rw-r--r--src/test/ui/issues/issue-58022.rs18
-rw-r--r--src/test/ui/issues/issue-58022.stderr19
-rw-r--r--src/test/ui/issues/issue-58344.rs50
-rw-r--r--src/test/ui/issues/issue-58344.stderr19
6 files changed, 125 insertions, 0 deletions
diff --git a/src/test/ui/issues/issue-50571.rs b/src/test/ui/issues/issue-50571.rs
new file mode 100644
index 00000000000..728c113bdc3
--- /dev/null
+++ b/src/test/ui/issues/issue-50571.rs
@@ -0,0 +1,6 @@
+trait Foo {
+    fn foo([a, b]: [i32; 2]) {}
+    //~^ ERROR: patterns aren't allowed in methods without bodies
+}
+
+fn main() {}
diff --git a/src/test/ui/issues/issue-50571.stderr b/src/test/ui/issues/issue-50571.stderr
new file mode 100644
index 00000000000..834635388a0
--- /dev/null
+++ b/src/test/ui/issues/issue-50571.stderr
@@ -0,0 +1,13 @@
+error[E0642]: patterns aren't allowed in methods without bodies
+  --> $DIR/issue-50571.rs:2:12
+   |
+LL |     fn foo([a, b]: [i32; 2]) {}
+   |            ^^^^^^
+help: give this argument a name or use an underscore to ignore it
+   |
+LL |     fn foo(_: [i32; 2]) {}
+   |            ^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0642`.
diff --git a/src/test/ui/issues/issue-58022.rs b/src/test/ui/issues/issue-58022.rs
new file mode 100644
index 00000000000..c6dd45e6cf3
--- /dev/null
+++ b/src/test/ui/issues/issue-58022.rs
@@ -0,0 +1,18 @@
+pub trait Foo: Sized {
+    const SIZE: usize;
+
+    fn new(slice: &[u8; Foo::SIZE]) -> Self;
+    //~^ ERROR: type annotations needed: cannot resolve `_: Foo`
+}
+
+pub struct Bar<T: ?Sized>(T);
+
+impl Bar<[u8]> {
+    const SIZE: usize = 32;
+
+    fn new(slice: &[u8; Self::SIZE]) -> Self {
+        Foo(Box::new(*slice)) //~ ERROR: expected function, found trait `Foo`
+    }
+}
+
+fn main() {}
diff --git a/src/test/ui/issues/issue-58022.stderr b/src/test/ui/issues/issue-58022.stderr
new file mode 100644
index 00000000000..71bad7b81fa
--- /dev/null
+++ b/src/test/ui/issues/issue-58022.stderr
@@ -0,0 +1,19 @@
+error[E0423]: expected function, found trait `Foo`
+  --> $DIR/issue-58022.rs:14:9
+   |
+LL |         Foo(Box::new(*slice))
+   |         ^^^ not a function
+
+error[E0283]: type annotations needed: cannot resolve `_: Foo`
+  --> $DIR/issue-58022.rs:4:25
+   |
+LL |     const SIZE: usize;
+   |     ------------------ required by `Foo::SIZE`
+LL | 
+LL |     fn new(slice: &[u8; Foo::SIZE]) -> Self;
+   |                         ^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0283, E0423.
+For more information about an error, try `rustc --explain E0283`.
diff --git a/src/test/ui/issues/issue-58344.rs b/src/test/ui/issues/issue-58344.rs
new file mode 100644
index 00000000000..99b656d74f5
--- /dev/null
+++ b/src/test/ui/issues/issue-58344.rs
@@ -0,0 +1,50 @@
+use std::ops::Add;
+
+trait Trait<T> {
+    fn get(self) -> T;
+}
+
+struct Holder<T>(T);
+
+impl<T> Trait<T> for Holder<T> {
+    fn get(self) -> T {
+        self.0
+    }
+}
+
+enum Either<L, R> {
+    Left(L),
+    Right(R),
+}
+
+impl<L, R> Either<L, R> {
+    fn converge<T>(self) -> T where L: Trait<T>, R: Trait<T> {
+        match self {
+            Either::Left(val) => val.get(),
+            Either::Right(val) => val.get(),
+        }
+    }
+}
+
+fn add_generic<A: Add<B>, B>(lhs: A, rhs: B) -> Either<
+    impl Trait<<A as Add<B>>::Output>,
+    impl Trait<<A as Add<B>>::Output>
+> {
+    if true {
+        Either::Left(Holder(lhs + rhs))
+    } else {
+        Either::Right(Holder(lhs + rhs))
+    }
+}
+
+fn add_one(
+    value: u32,
+) -> Either<impl Trait<<u32 as Add<u32>>::Output>, impl Trait<<u32 as Add<u32>>::Output>> {
+    //~^ ERROR: the trait bound `impl Trait<<u32 as std::ops::Add>::Output>: Trait<u32>`
+    //~| ERROR: the trait bound `impl Trait<<u32 as std::ops::Add>::Output>: Trait<u32>`
+    add_generic(value, 1u32)
+}
+
+pub fn main() {
+    add_one(3).converge();
+}
diff --git a/src/test/ui/issues/issue-58344.stderr b/src/test/ui/issues/issue-58344.stderr
new file mode 100644
index 00000000000..427d03b679d
--- /dev/null
+++ b/src/test/ui/issues/issue-58344.stderr
@@ -0,0 +1,19 @@
+error[E0277]: the trait bound `impl Trait<<u32 as std::ops::Add>::Output>: Trait<u32>` is not satisfied
+  --> $DIR/issue-58344.rs:42:13
+   |
+LL | ) -> Either<impl Trait<<u32 as Add<u32>>::Output>, impl Trait<<u32 as Add<u32>>::Output>> {
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Trait<u32>` is not implemented for `impl Trait<<u32 as std::ops::Add>::Output>`
+   |
+   = note: the return type of a function must have a statically known size
+
+error[E0277]: the trait bound `impl Trait<<u32 as std::ops::Add>::Output>: Trait<u32>` is not satisfied
+  --> $DIR/issue-58344.rs:42:52
+   |
+LL | ) -> Either<impl Trait<<u32 as Add<u32>>::Output>, impl Trait<<u32 as Add<u32>>::Output>> {
+   |                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Trait<u32>` is not implemented for `impl Trait<<u32 as std::ops::Add>::Output>`
+   |
+   = note: the return type of a function must have a statically known size
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.