summaryrefslogtreecommitdiffstats
path: root/src/test/ui/iterators/into-iter-on-arrays-2018.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /src/test/ui/iterators/into-iter-on-arrays-2018.rs
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/iterators/into-iter-on-arrays-2018.rs')
-rw-r--r--src/test/ui/iterators/into-iter-on-arrays-2018.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/test/ui/iterators/into-iter-on-arrays-2018.rs b/src/test/ui/iterators/into-iter-on-arrays-2018.rs
new file mode 100644
index 000000000..60995170a
--- /dev/null
+++ b/src/test/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
+ }
+}