diff options
| author | Mara Bos <m-ou.se@m-ou.se> | 2021-08-30 19:02:29 +0200 |
|---|---|---|
| committer | Mara Bos <m-ou.se@m-ou.se> | 2021-08-30 19:02:29 +0200 |
| commit | 78a7d1c652149c08cc60d3a91dabb66f41807d28 (patch) | |
| tree | f91a7c8ad97dd93c85841b9aeecacaabc86fc2d3 | |
| parent | e2abf0689035a6ace7bdb2801ee1e53cb3ee2c75 (diff) | |
| download | rust-78a7d1c652149c08cc60d3a91dabb66f41807d28.tar.gz rust-78a7d1c652149c08cc60d3a91dabb66f41807d28.zip | |
Add and update tests.
6 files changed, 96 insertions, 20 deletions
diff --git a/src/test/ui/rust-2021/future-prelude-collision-generic-trait.fixed b/src/test/ui/rust-2021/future-prelude-collision-generic-trait.fixed new file mode 100644 index 00000000000..a1b6f5b16ba --- /dev/null +++ b/src/test/ui/rust-2021/future-prelude-collision-generic-trait.fixed @@ -0,0 +1,30 @@ +// See https://github.com/rust-lang/rust/issues/88470 +// run-rustfix +// edition:2018 +// check-pass +#![warn(rust_2021_prelude_collisions)] +#![allow(dead_code)] +#![allow(unused_imports)] + +pub trait PyTryFrom<'v, T>: Sized { + fn try_from<V>(value: V) -> Result<&'v Self, T>; +} + +pub trait PyTryInto<T>: Sized { + fn try_into(&self) -> Result<&T, i32>; +} + +struct Foo; + +impl<U> PyTryInto<U> for Foo +where + U: for<'v> PyTryFrom<'v, i32>, +{ + fn try_into(&self) -> Result<&U, i32> { + <U as PyTryFrom<'_, _>>::try_from(self) + //~^ WARNING trait-associated function `try_from` will become ambiguous in Rust 2021 + //~| this is accepted in the current edition (Rust 2018) + } +} + +fn main() {} diff --git a/src/test/ui/rust-2021/future-prelude-collision-generic-trait.rs b/src/test/ui/rust-2021/future-prelude-collision-generic-trait.rs new file mode 100644 index 00000000000..142ba552002 --- /dev/null +++ b/src/test/ui/rust-2021/future-prelude-collision-generic-trait.rs @@ -0,0 +1,30 @@ +// See https://github.com/rust-lang/rust/issues/88470 +// run-rustfix +// edition:2018 +// check-pass +#![warn(rust_2021_prelude_collisions)] +#![allow(dead_code)] +#![allow(unused_imports)] + +pub trait PyTryFrom<'v, T>: Sized { + fn try_from<V>(value: V) -> Result<&'v Self, T>; +} + +pub trait PyTryInto<T>: Sized { + fn try_into(&self) -> Result<&T, i32>; +} + +struct Foo; + +impl<U> PyTryInto<U> for Foo +where + U: for<'v> PyTryFrom<'v, i32>, +{ + fn try_into(&self) -> Result<&U, i32> { + U::try_from(self) + //~^ WARNING trait-associated function `try_from` will become ambiguous in Rust 2021 + //~| this is accepted in the current edition (Rust 2018) + } +} + +fn main() {} diff --git a/src/test/ui/rust-2021/future-prelude-collision-generic-trait.stderr b/src/test/ui/rust-2021/future-prelude-collision-generic-trait.stderr new file mode 100644 index 00000000000..14ad9b017b6 --- /dev/null +++ b/src/test/ui/rust-2021/future-prelude-collision-generic-trait.stderr @@ -0,0 +1,16 @@ +warning: trait-associated function `try_from` will become ambiguous in Rust 2021 + --> $DIR/future-prelude-collision-generic-trait.rs:24:9 + | +LL | U::try_from(self) + | ^^^^^^^^^^^ help: disambiguate the associated function: `<U as PyTryFrom<'_, _>>::try_from` + | +note: the lint level is defined here + --> $DIR/future-prelude-collision-generic-trait.rs:5:9 + | +LL | #![warn(rust_2021_prelude_collisions)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! + = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/prelude.html> + +warning: 1 warning emitted + diff --git a/src/test/ui/rust-2021/future-prelude-collision-generic.fixed b/src/test/ui/rust-2021/future-prelude-collision-generic.fixed index f0d8cb944cf..1bb9ba37774 100644 --- a/src/test/ui/rust-2021/future-prelude-collision-generic.fixed +++ b/src/test/ui/rust-2021/future-prelude-collision-generic.fixed @@ -6,32 +6,32 @@ #![allow(dead_code)] #![allow(unused_imports)] -struct Generic<T, U>(T, U); +struct Generic<'a, U>(&'a U); trait MyFromIter { fn from_iter(_: i32) -> Self; } -impl MyFromIter for Generic<i32, i32> { - fn from_iter(x: i32) -> Self { - Self(x, x) +impl MyFromIter for Generic<'static, i32> { + fn from_iter(_: i32) -> Self { + todo!() } } -impl std::iter::FromIterator<i32> for Generic<i32, i32> { +impl std::iter::FromIterator<i32> for Generic<'static, i32> { fn from_iter<T: IntoIterator<Item = i32>>(_: T) -> Self { todo!() } } fn main() { - <Generic<_, _> as MyFromIter>::from_iter(1); + <Generic<'_, _> as MyFromIter>::from_iter(1); //~^ WARNING trait-associated function `from_iter` will become ambiguous in Rust 2021 //~| this is accepted in the current edition (Rust 2018) - <Generic::<i32, i32> as MyFromIter>::from_iter(1); + <Generic::<'static, i32> as MyFromIter>::from_iter(1); //~^ WARNING trait-associated function `from_iter` will become ambiguous in Rust 2021 //~| this is accepted in the current edition (Rust 2018) - <Generic::<_, _> as MyFromIter>::from_iter(1); + <Generic::<'_, _> as MyFromIter>::from_iter(1); //~^ WARNING trait-associated function `from_iter` will become ambiguous in Rust 2021 //~| this is accepted in the current edition (Rust 2018) } diff --git a/src/test/ui/rust-2021/future-prelude-collision-generic.rs b/src/test/ui/rust-2021/future-prelude-collision-generic.rs index 19840537059..d7f8affc61a 100644 --- a/src/test/ui/rust-2021/future-prelude-collision-generic.rs +++ b/src/test/ui/rust-2021/future-prelude-collision-generic.rs @@ -6,19 +6,19 @@ #![allow(dead_code)] #![allow(unused_imports)] -struct Generic<T, U>(T, U); +struct Generic<'a, U>(&'a U); trait MyFromIter { fn from_iter(_: i32) -> Self; } -impl MyFromIter for Generic<i32, i32> { - fn from_iter(x: i32) -> Self { - Self(x, x) +impl MyFromIter for Generic<'static, i32> { + fn from_iter(_: i32) -> Self { + todo!() } } -impl std::iter::FromIterator<i32> for Generic<i32, i32> { +impl std::iter::FromIterator<i32> for Generic<'static, i32> { fn from_iter<T: IntoIterator<Item = i32>>(_: T) -> Self { todo!() } @@ -28,10 +28,10 @@ fn main() { Generic::from_iter(1); //~^ WARNING trait-associated function `from_iter` will become ambiguous in Rust 2021 //~| this is accepted in the current edition (Rust 2018) - Generic::<i32, i32>::from_iter(1); + Generic::<'static, i32>::from_iter(1); //~^ WARNING trait-associated function `from_iter` will become ambiguous in Rust 2021 //~| this is accepted in the current edition (Rust 2018) - Generic::<_, _>::from_iter(1); + Generic::<'_, _>::from_iter(1); //~^ WARNING trait-associated function `from_iter` will become ambiguous in Rust 2021 //~| this is accepted in the current edition (Rust 2018) } diff --git a/src/test/ui/rust-2021/future-prelude-collision-generic.stderr b/src/test/ui/rust-2021/future-prelude-collision-generic.stderr index 0a722baa185..e1d3f3c0a46 100644 --- a/src/test/ui/rust-2021/future-prelude-collision-generic.stderr +++ b/src/test/ui/rust-2021/future-prelude-collision-generic.stderr @@ -2,7 +2,7 @@ warning: trait-associated function `from_iter` will become ambiguous in Rust 202 --> $DIR/future-prelude-collision-generic.rs:28:5 | LL | Generic::from_iter(1); - | ^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `<Generic<_, _> as MyFromIter>::from_iter` + | ^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `<Generic<'_, _> as MyFromIter>::from_iter` | note: the lint level is defined here --> $DIR/future-prelude-collision-generic.rs:5:9 @@ -15,8 +15,8 @@ LL | #![warn(rust_2021_prelude_collisions)] warning: trait-associated function `from_iter` will become ambiguous in Rust 2021 --> $DIR/future-prelude-collision-generic.rs:31:5 | -LL | Generic::<i32, i32>::from_iter(1); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `<Generic::<i32, i32> as MyFromIter>::from_iter` +LL | Generic::<'static, i32>::from_iter(1); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `<Generic::<'static, i32> as MyFromIter>::from_iter` | = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/prelude.html> @@ -24,8 +24,8 @@ LL | Generic::<i32, i32>::from_iter(1); warning: trait-associated function `from_iter` will become ambiguous in Rust 2021 --> $DIR/future-prelude-collision-generic.rs:34:5 | -LL | Generic::<_, _>::from_iter(1); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `<Generic::<_, _> as MyFromIter>::from_iter` +LL | Generic::<'_, _>::from_iter(1); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `<Generic::<'_, _> as MyFromIter>::from_iter` | = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/prelude.html> |
