Add and update tests.

This commit is contained in:
Mara Bos 2021-08-30 19:02:29 +02:00
parent e2abf06890
commit 78a7d1c652
6 changed files with 96 additions and 20 deletions

View file

@ -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() {}

View file

@ -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() {}

View file

@ -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

View file

@ -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)
}

View file

@ -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)
}

View file

@ -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>