summaryrefslogtreecommitdiffstats
path: root/src/test/ui/rust-2021/future-prelude-collision-unneeded.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/rust-2021/future-prelude-collision-unneeded.rs')
-rw-r--r--src/test/ui/rust-2021/future-prelude-collision-unneeded.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/test/ui/rust-2021/future-prelude-collision-unneeded.rs b/src/test/ui/rust-2021/future-prelude-collision-unneeded.rs
new file mode 100644
index 000000000..247d5884b
--- /dev/null
+++ b/src/test/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);
+}