diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-10-01 09:55:35 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-10-01 09:55:35 +0200 |
| commit | dc1c1fe45602acc2ec93d09c0cfb1a34cf291ecf (patch) | |
| tree | 2b7041ec71aa32770df30481fbf6f536b497dfbd | |
| parent | 24a84fae34a3d4eff2dd631c65365d20a6e11b04 (diff) | |
| parent | 9c73131fd04bf5a60c53c752293f136fdaa016af (diff) | |
| download | rust-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.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-50571.stderr | 13 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-58022.rs | 18 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-58022.stderr | 19 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-58344.rs | 50 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-58344.stderr | 19 |
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`. |
