about summary refs log tree commit diff
path: root/tests/ui/rust-2021/future-prelude-collision-unneeded.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/rust-2021/future-prelude-collision-unneeded.rs')
-rw-r--r--tests/ui/rust-2021/future-prelude-collision-unneeded.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/ui/rust-2021/future-prelude-collision-unneeded.rs b/tests/ui/rust-2021/future-prelude-collision-unneeded.rs
new file mode 100644
index 00000000000..247d5884b86
--- /dev/null
+++ b/tests/ui/rust-2021/future-prelude-collision-unneeded.rs
@@ -0,0 +1,60 @@
+// edition:2018
+// check-pass
+#![allow(unused)]
+#![deny(rust_2021_prelude_collisions)]
+
+struct S;
+
+impl S {
+    fn try_into(self) -> S {
+        S
+    }
+}
+
+struct X;
+
+trait Hey {
+    fn from_iter(_: i32) -> Self;
+}
+
+impl Hey for X {
+    fn from_iter(_: i32) -> Self {
+        X
+    }
+}
+
+struct Y<T>(T);
+
+impl Hey for Y<i32> {
+    fn from_iter(_: i32) -> Self {
+        Y(0)
+    }
+}
+
+struct Z<T>(T);
+
+impl Hey for Z<i32> {
+    fn from_iter(_: i32) -> Self {
+        Z(0)
+    }
+}
+
+impl std::iter::FromIterator<u32> for Z<u32> {
+    fn from_iter<T: IntoIterator<Item = u32>>(_: T) -> Self {
+        todo!()
+    }
+}
+
+fn main() {
+    // See https://github.com/rust-lang/rust/issues/86633
+    let s = S;
+    let s2 = s.try_into();
+
+    // Check that we do not issue suggestions for types that do not implement `FromIter`.
+    //
+    // See https://github.com/rust-lang/rust/issues/86902
+    X::from_iter(1);
+    Y::from_iter(1);
+    Y::<i32>::from_iter(1);
+    Z::<i32>::from_iter(1);
+}