about summary refs log tree commit diff
path: root/tests/ui/iterators/into-iter-on-arrays-2018.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/iterators/into-iter-on-arrays-2018.rs')
-rw-r--r--tests/ui/iterators/into-iter-on-arrays-2018.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/ui/iterators/into-iter-on-arrays-2018.rs b/tests/ui/iterators/into-iter-on-arrays-2018.rs
new file mode 100644
index 00000000000..60995170a51
--- /dev/null
+++ b/tests/ui/iterators/into-iter-on-arrays-2018.rs
@@ -0,0 +1,46 @@
+// check-pass
+// edition:2018
+
+use std::array::IntoIter;
+use std::ops::Deref;
+use std::rc::Rc;
+use std::slice::Iter;
+
+fn main() {
+    let array = [0; 10];
+
+    // Before 2021, the method dispatched to `IntoIterator for &[T; N]`,
+    // which we continue to support for compatibility.
+    let _: Iter<'_, i32> = array.into_iter();
+    //~^ WARNING this method call resolves to `<&[T; N] as IntoIterator>::into_iter`
+    //~| WARNING this changes meaning
+
+    let _: Iter<'_, i32> = Box::new(array).into_iter();
+    //~^ WARNING this method call resolves to `<&[T; N] as IntoIterator>::into_iter`
+    //~| WARNING this changes meaning
+
+    let _: Iter<'_, i32> = Rc::new(array).into_iter();
+    //~^ WARNING this method call resolves to `<&[T; N] as IntoIterator>::into_iter`
+    //~| WARNING this changes meaning
+    let _: Iter<'_, i32> = Array(array).into_iter();
+    //~^ WARNING this method call resolves to `<&[T; N] as IntoIterator>::into_iter`
+    //~| WARNING this changes meaning
+
+    // But you can always use the trait method explicitly as an array.
+    let _: IntoIter<i32, 10> = IntoIterator::into_iter(array);
+
+    for _ in [1, 2, 3].into_iter() {}
+    //~^ WARNING this method call resolves to `<&[T; N] as IntoIterator>::into_iter`
+    //~| WARNING this changes meaning
+}
+
+/// User type that dereferences to an array.
+struct Array([i32; 10]);
+
+impl Deref for Array {
+    type Target = [i32; 10];
+
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}