Skip to content

Commit 532be28

Browse files
committed
Test that turbofish does not swim away in prelude collusion suggestion.
1 parent 4986bbf commit 532be28

3 files changed

+81
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// See https://github.com/rust-lang/rust/issues/88442
2+
// run-rustfix
3+
// edition:2018
4+
// check-pass
5+
#![allow(unused)]
6+
#![warn(rust_2021_prelude_collisions)]
7+
8+
trait AnnotatableTryInto {
9+
fn try_into<T>(self) -> Result<T, Self::Error>
10+
where Self: std::convert::TryInto<T> {
11+
std::convert::TryInto::try_into(self)
12+
}
13+
}
14+
15+
impl<T> AnnotatableTryInto for T where T: From<u8> {}
16+
17+
fn main() -> Result<(), &'static str> {
18+
let x: u64 = 1;
19+
AnnotatableTryInto::try_into::<usize>(x).or(Err("foo"))?.checked_sub(1);
20+
//~^ WARNING trait method `try_into` will become ambiguous in Rust 2021
21+
//~| WARNING this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
22+
23+
AnnotatableTryInto::try_into::<usize>(x).or(Err("foo"))?;
24+
//~^ WARNING trait method `try_into` will become ambiguous in Rust 2021
25+
//~| WARNING this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
26+
27+
Ok(())
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// See https://github.com/rust-lang/rust/issues/88442
2+
// run-rustfix
3+
// edition:2018
4+
// check-pass
5+
#![allow(unused)]
6+
#![warn(rust_2021_prelude_collisions)]
7+
8+
trait AnnotatableTryInto {
9+
fn try_into<T>(self) -> Result<T, Self::Error>
10+
where Self: std::convert::TryInto<T> {
11+
std::convert::TryInto::try_into(self)
12+
}
13+
}
14+
15+
impl<T> AnnotatableTryInto for T where T: From<u8> {}
16+
17+
fn main() -> Result<(), &'static str> {
18+
let x: u64 = 1;
19+
x.try_into::<usize>().or(Err("foo"))?.checked_sub(1);
20+
//~^ WARNING trait method `try_into` will become ambiguous in Rust 2021
21+
//~| WARNING this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
22+
23+
x.try_into::<usize>().or(Err("foo"))?;
24+
//~^ WARNING trait method `try_into` will become ambiguous in Rust 2021
25+
//~| WARNING this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
26+
27+
Ok(())
28+
}
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-turbofish.rs:19:5
3+
|
4+
LL | x.try_into::<usize>().or(Err("foo"))?.checked_sub(1);
5+
| ^^^^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `AnnotatableTryInto::try_into::<usize>(x)`
6+
|
7+
note: the lint level is defined here
8+
--> $DIR/future-prelude-collision-turbofish.rs:6: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 method `try_into` will become ambiguous in Rust 2021
16+
--> $DIR/future-prelude-collision-turbofish.rs:23:5
17+
|
18+
LL | x.try_into::<usize>().or(Err("foo"))?;
19+
| ^^^^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `AnnotatableTryInto::try_into::<usize>(x)`
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)