summaryrefslogtreecommitdiffstats
path: root/src/test/ui/iterators/into-iterator-type-inference-shift.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/iterators/into-iterator-type-inference-shift.rs')
-rw-r--r--src/test/ui/iterators/into-iterator-type-inference-shift.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/test/ui/iterators/into-iterator-type-inference-shift.rs b/src/test/ui/iterators/into-iterator-type-inference-shift.rs
new file mode 100644
index 000000000..9151172fd
--- /dev/null
+++ b/src/test/ui/iterators/into-iterator-type-inference-shift.rs
@@ -0,0 +1,36 @@
+// run-pass
+#![allow(unused_must_use)]
+#![allow(dead_code)]
+#![allow(unused_mut)]
+#![allow(unused_variables)]
+// Regression test for type inference failure around shifting. In this
+// case, the iteration yields an isize, but we hadn't run the full type
+// propagation yet, and so we just saw a type variable, yielding an
+// error.
+
+// pretty-expanded FIXME #23616
+
+trait IntoIterator {
+ type Iter: Iterator;
+
+ fn into_iter(self) -> Self::Iter;
+}
+
+impl<I> IntoIterator for I where I: Iterator {
+ type Iter = I;
+
+ fn into_iter(self) -> I {
+ self
+ }
+}
+
+fn desugared_for_loop_bad(byte: u8) -> u8 {
+ let mut result = 0;
+ let mut x = IntoIterator::into_iter(0..8);
+ let mut y = Iterator::next(&mut x);
+ let mut z = y.unwrap();
+ byte >> z;
+ 1
+}
+
+fn main() {}