Skip to content

Commit dc1c1fe

Browse files
authored
Rollup merge of #64928 - JohnTitor:add-some-tests, r=Centril
Add tests for some issues Closes #50571 Closes #58022 Closes #58344
2 parents 24a84fa + 9c73131 commit dc1c1fe

File tree

6 files changed

+125
-0
lines changed

6 files changed

+125
-0
lines changed

src/test/ui/issues/issue-50571.rs

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
trait Foo {
2+
fn foo([a, b]: [i32; 2]) {}
3+
//~^ ERROR: patterns aren't allowed in methods without bodies
4+
}
5+
6+
fn main() {}

src/test/ui/issues/issue-50571.stderr

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
error[E0642]: patterns aren't allowed in methods without bodies
2+
--> $DIR/issue-50571.rs:2:12
3+
|
4+
LL | fn foo([a, b]: [i32; 2]) {}
5+
| ^^^^^^
6+
help: give this argument a name or use an underscore to ignore it
7+
|
8+
LL | fn foo(_: [i32; 2]) {}
9+
| ^
10+
11+
error: aborting due to previous error
12+
13+
For more information about this error, try `rustc --explain E0642`.

src/test/ui/issues/issue-58022.rs

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
pub trait Foo: Sized {
2+
const SIZE: usize;
3+
4+
fn new(slice: &[u8; Foo::SIZE]) -> Self;
5+
//~^ ERROR: type annotations needed: cannot resolve `_: Foo`
6+
}
7+
8+
pub struct Bar<T: ?Sized>(T);
9+
10+
impl Bar<[u8]> {
11+
const SIZE: usize = 32;
12+
13+
fn new(slice: &[u8; Self::SIZE]) -> Self {
14+
Foo(Box::new(*slice)) //~ ERROR: expected function, found trait `Foo`
15+
}
16+
}
17+
18+
fn main() {}

src/test/ui/issues/issue-58022.stderr

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
error[E0423]: expected function, found trait `Foo`
2+
--> $DIR/issue-58022.rs:14:9
3+
|
4+
LL | Foo(Box::new(*slice))
5+
| ^^^ not a function
6+
7+
error[E0283]: type annotations needed: cannot resolve `_: Foo`
8+
--> $DIR/issue-58022.rs:4:25
9+
|
10+
LL | const SIZE: usize;
11+
| ------------------ required by `Foo::SIZE`
12+
LL |
13+
LL | fn new(slice: &[u8; Foo::SIZE]) -> Self;
14+
| ^^^^^^^^^
15+
16+
error: aborting due to 2 previous errors
17+
18+
Some errors have detailed explanations: E0283, E0423.
19+
For more information about an error, try `rustc --explain E0283`.

src/test/ui/issues/issue-58344.rs

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
use std::ops::Add;
2+
3+
trait Trait<T> {
4+
fn get(self) -> T;
5+
}
6+
7+
struct Holder<T>(T);
8+
9+
impl<T> Trait<T> for Holder<T> {
10+
fn get(self) -> T {
11+
self.0
12+
}
13+
}
14+
15+
enum Either<L, R> {
16+
Left(L),
17+
Right(R),
18+
}
19+
20+
impl<L, R> Either<L, R> {
21+
fn converge<T>(self) -> T where L: Trait<T>, R: Trait<T> {
22+
match self {
23+
Either::Left(val) => val.get(),
24+
Either::Right(val) => val.get(),
25+
}
26+
}
27+
}
28+
29+
fn add_generic<A: Add<B>, B>(lhs: A, rhs: B) -> Either<
30+
impl Trait<<A as Add<B>>::Output>,
31+
impl Trait<<A as Add<B>>::Output>
32+
> {
33+
if true {
34+
Either::Left(Holder(lhs + rhs))
35+
} else {
36+
Either::Right(Holder(lhs + rhs))
37+
}
38+
}
39+
40+
fn add_one(
41+
value: u32,
42+
) -> Either<impl Trait<<u32 as Add<u32>>::Output>, impl Trait<<u32 as Add<u32>>::Output>> {
43+
//~^ ERROR: the trait bound `impl Trait<<u32 as std::ops::Add>::Output>: Trait<u32>`
44+
//~| ERROR: the trait bound `impl Trait<<u32 as std::ops::Add>::Output>: Trait<u32>`
45+
add_generic(value, 1u32)
46+
}
47+
48+
pub fn main() {
49+
add_one(3).converge();
50+
}

src/test/ui/issues/issue-58344.stderr

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
error[E0277]: the trait bound `impl Trait<<u32 as std::ops::Add>::Output>: Trait<u32>` is not satisfied
2+
--> $DIR/issue-58344.rs:42:13
3+
|
4+
LL | ) -> Either<impl Trait<<u32 as Add<u32>>::Output>, impl Trait<<u32 as Add<u32>>::Output>> {
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Trait<u32>` is not implemented for `impl Trait<<u32 as std::ops::Add>::Output>`
6+
|
7+
= note: the return type of a function must have a statically known size
8+
9+
error[E0277]: the trait bound `impl Trait<<u32 as std::ops::Add>::Output>: Trait<u32>` is not satisfied
10+
--> $DIR/issue-58344.rs:42:52
11+
|
12+
LL | ) -> Either<impl Trait<<u32 as Add<u32>>::Output>, impl Trait<<u32 as Add<u32>>::Output>> {
13+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Trait<u32>` is not implemented for `impl Trait<<u32 as std::ops::Add>::Output>`
14+
|
15+
= note: the return type of a function must have a statically known size
16+
17+
error: aborting due to 2 previous errors
18+
19+
For more information about this error, try `rustc --explain E0277`.

0 commit comments

Comments
 (0)