Skip to content

Commit fc0fb38

Browse files
committed
Add macro test for prelude collision suggestions.
1 parent a15dab9 commit fc0fb38

File tree

3 files changed

+115
-0
lines changed

3 files changed

+115
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// run-rustfix
2+
// edition:2018
3+
// check-pass
4+
#![warn(rust_2021_prelude_collisions)]
5+
#![allow(unreachable_code)]
6+
7+
macro_rules! foo {
8+
() => {{
9+
123;
10+
S
11+
}};
12+
}
13+
14+
trait MyTry<T> {
15+
fn try_into(self, _: u8);
16+
}
17+
18+
struct S;
19+
20+
impl MyTry<i32> for S {
21+
fn try_into(self, _: u8) {}
22+
}
23+
24+
trait TryFromU8: Sized {
25+
fn try_from(_: u8);
26+
}
27+
28+
impl TryFromU8 for u32 {
29+
fn try_from(_: u8) {}
30+
}
31+
32+
macro_rules! bar {
33+
() => {
34+
u32
35+
};
36+
}
37+
38+
fn main() {
39+
MyTry::try_into(foo!(), todo!());
40+
//~^ WARNING trait method `try_into` will become ambiguous in Rust 2021
41+
//~| WARNING this is accepted in the current edition
42+
<bar!() as TryFromU8>::try_from(0);
43+
//~^ WARNING trait-associated function `try_from` will become ambiguous in Rust 2021
44+
//~| WARNING this is accepted in the current edition
45+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// run-rustfix
2+
// edition:2018
3+
// check-pass
4+
#![warn(rust_2021_prelude_collisions)]
5+
#![allow(unreachable_code)]
6+
7+
macro_rules! foo {
8+
() => {{
9+
123;
10+
S
11+
}};
12+
}
13+
14+
trait MyTry<T> {
15+
fn try_into(self, _: u8);
16+
}
17+
18+
struct S;
19+
20+
impl MyTry<i32> for S {
21+
fn try_into(self, _: u8) {}
22+
}
23+
24+
trait TryFromU8: Sized {
25+
fn try_from(_: u8);
26+
}
27+
28+
impl TryFromU8 for u32 {
29+
fn try_from(_: u8) {}
30+
}
31+
32+
macro_rules! bar {
33+
() => {
34+
u32
35+
};
36+
}
37+
38+
fn main() {
39+
foo!().try_into(todo!());
40+
//~^ WARNING trait method `try_into` will become ambiguous in Rust 2021
41+
//~| WARNING this is accepted in the current edition
42+
<bar!()>::try_from(0);
43+
//~^ WARNING trait-associated function `try_from` will become ambiguous in Rust 2021
44+
//~| WARNING this is accepted in the current edition
45+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
warning: trait method `try_into` will become ambiguous in Rust 2021
2+
--> $DIR/future-prelude-collision-macros.rs:39:5
3+
|
4+
LL | foo!().try_into(todo!());
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `MyTry::try_into(foo!(), todo!())`
6+
|
7+
note: the lint level is defined here
8+
--> $DIR/future-prelude-collision-macros.rs:4:9
9+
|
10+
LL | #![warn(rust_2021_prelude_collisions)]
11+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12+
= warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
13+
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/prelude.html>
14+
15+
warning: trait-associated function `try_from` will become ambiguous in Rust 2021
16+
--> $DIR/future-prelude-collision-macros.rs:42:5
17+
|
18+
LL | <bar!()>::try_from(0);
19+
| ^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `<bar!() as TryFromU8>::try_from`
20+
|
21+
= warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
22+
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/prelude.html>
23+
24+
warning: 2 warnings emitted
25+

0 commit comments

Comments
 (0)