summaryrefslogtreecommitdiffstats
path: root/tests/ui/iterators
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/ui/iterators/array-of-ranges.rs (renamed from src/test/ui/iterators/array-of-ranges.rs)0
-rw-r--r--tests/ui/iterators/array.rs (renamed from src/test/ui/iterators/array.rs)0
-rw-r--r--tests/ui/iterators/bound.rs (renamed from src/test/ui/iterators/bound.rs)0
-rw-r--r--tests/ui/iterators/bound.stderr (renamed from src/test/ui/iterators/bound.stderr)0
-rw-r--r--tests/ui/iterators/collect-into-array.rs (renamed from src/test/ui/iterators/collect-into-array.rs)1
-rw-r--r--tests/ui/iterators/collect-into-array.stderr13
-rw-r--r--tests/ui/iterators/collect-into-slice.rs (renamed from src/test/ui/iterators/collect-into-slice.rs)1
-rw-r--r--tests/ui/iterators/collect-into-slice.stderr33
-rw-r--r--tests/ui/iterators/float_iterator_hint.rs15
-rw-r--r--tests/ui/iterators/float_iterator_hint.stderr13
-rw-r--r--tests/ui/iterators/integral.rs (renamed from src/test/ui/iterators/integral.rs)0
-rw-r--r--tests/ui/iterators/integral.stderr (renamed from src/test/ui/iterators/integral.stderr)1
-rw-r--r--tests/ui/iterators/into-iter-on-arrays-2018.rs (renamed from src/test/ui/iterators/into-iter-on-arrays-2018.rs)0
-rw-r--r--tests/ui/iterators/into-iter-on-arrays-2018.stderr (renamed from src/test/ui/iterators/into-iter-on-arrays-2018.stderr)0
-rw-r--r--tests/ui/iterators/into-iter-on-arrays-2021.rs (renamed from src/test/ui/iterators/into-iter-on-arrays-2021.rs)0
-rw-r--r--tests/ui/iterators/into-iter-on-arrays-lint.fixed (renamed from src/test/ui/iterators/into-iter-on-arrays-lint.fixed)0
-rw-r--r--tests/ui/iterators/into-iter-on-arrays-lint.rs (renamed from src/test/ui/iterators/into-iter-on-arrays-lint.rs)0
-rw-r--r--tests/ui/iterators/into-iter-on-arrays-lint.stderr (renamed from src/test/ui/iterators/into-iter-on-arrays-lint.stderr)0
-rw-r--r--tests/ui/iterators/into-iterator-type-inference-shift.rs (renamed from src/test/ui/iterators/into-iterator-type-inference-shift.rs)0
-rw-r--r--tests/ui/iterators/invalid-iterator-chain-with-int-infer.rs4
-rw-r--r--tests/ui/iterators/invalid-iterator-chain-with-int-infer.stderr24
-rw-r--r--tests/ui/iterators/invalid-iterator-chain.rs53
-rw-r--r--tests/ui/iterators/invalid-iterator-chain.stderr176
-rw-r--r--tests/ui/iterators/issue-28098.rs (renamed from src/test/ui/iterators/issue-28098.rs)0
-rw-r--r--tests/ui/iterators/issue-28098.stderr (renamed from src/test/ui/iterators/issue-28098.stderr)0
-rw-r--r--tests/ui/iterators/issue-58952-filter-type-length.rs (renamed from src/test/ui/iterators/issue-58952-filter-type-length.rs)0
-rw-r--r--tests/ui/iterators/iter-cloned-type-inference.rs (renamed from src/test/ui/iterators/iter-cloned-type-inference.rs)0
-rw-r--r--tests/ui/iterators/iter-count-overflow-debug.rs (renamed from src/test/ui/iterators/iter-count-overflow-debug.rs)0
-rw-r--r--tests/ui/iterators/iter-count-overflow-ndebug.rs (renamed from src/test/ui/iterators/iter-count-overflow-ndebug.rs)0
-rw-r--r--tests/ui/iterators/iter-map-fold-type-length.rs (renamed from src/test/ui/iterators/iter-map-fold-type-length.rs)0
-rw-r--r--tests/ui/iterators/iter-position-overflow-debug.rs (renamed from src/test/ui/iterators/iter-position-overflow-debug.rs)0
-rw-r--r--tests/ui/iterators/iter-position-overflow-ndebug.rs (renamed from src/test/ui/iterators/iter-position-overflow-ndebug.rs)0
-rw-r--r--tests/ui/iterators/iter-range.rs (renamed from src/test/ui/iterators/iter-range.rs)0
-rw-r--r--tests/ui/iterators/iter-step-overflow-debug.rs (renamed from src/test/ui/iterators/iter-step-overflow-debug.rs)0
-rw-r--r--tests/ui/iterators/iter-step-overflow-ndebug.rs (renamed from src/test/ui/iterators/iter-step-overflow-ndebug.rs)0
-rw-r--r--tests/ui/iterators/iter-sum-overflow-debug.rs (renamed from src/test/ui/iterators/iter-sum-overflow-debug.rs)0
-rw-r--r--tests/ui/iterators/iter-sum-overflow-ndebug.rs (renamed from src/test/ui/iterators/iter-sum-overflow-ndebug.rs)0
-rw-r--r--tests/ui/iterators/iter-sum-overflow-overflow-checks.rs (renamed from src/test/ui/iterators/iter-sum-overflow-overflow-checks.rs)0
-rw-r--r--tests/ui/iterators/ranges.rs (renamed from src/test/ui/iterators/ranges.rs)0
-rw-r--r--tests/ui/iterators/ranges.stderr (renamed from src/test/ui/iterators/ranges.stderr)0
-rw-r--r--tests/ui/iterators/rsplit-clone.rs (renamed from src/test/ui/iterators/rsplit-clone.rs)0
-rw-r--r--tests/ui/iterators/skip-count-overflow.rs (renamed from src/test/ui/iterators/skip-count-overflow.rs)0
-rw-r--r--tests/ui/iterators/string.rs (renamed from src/test/ui/iterators/string.rs)0
-rw-r--r--tests/ui/iterators/string.stderr (renamed from src/test/ui/iterators/string.stderr)0
-rw-r--r--tests/ui/iterators/vec-on-unimplemented.rs (renamed from src/test/ui/iterators/vec-on-unimplemented.rs)0
-rw-r--r--tests/ui/iterators/vec-on-unimplemented.stderr18
46 files changed, 350 insertions, 2 deletions
diff --git a/src/test/ui/iterators/array-of-ranges.rs b/tests/ui/iterators/array-of-ranges.rs
index 037540a3e..037540a3e 100644
--- a/src/test/ui/iterators/array-of-ranges.rs
+++ b/tests/ui/iterators/array-of-ranges.rs
diff --git a/src/test/ui/iterators/array.rs b/tests/ui/iterators/array.rs
index 5985c74e1..5985c74e1 100644
--- a/src/test/ui/iterators/array.rs
+++ b/tests/ui/iterators/array.rs
diff --git a/src/test/ui/iterators/bound.rs b/tests/ui/iterators/bound.rs
index bdd99ef8d..bdd99ef8d 100644
--- a/src/test/ui/iterators/bound.rs
+++ b/tests/ui/iterators/bound.rs
diff --git a/src/test/ui/iterators/bound.stderr b/tests/ui/iterators/bound.stderr
index cc7ded498..cc7ded498 100644
--- a/src/test/ui/iterators/bound.stderr
+++ b/tests/ui/iterators/bound.stderr
diff --git a/src/test/ui/iterators/collect-into-array.rs b/tests/ui/iterators/collect-into-array.rs
index 4c424999b..99d0d9bd7 100644
--- a/src/test/ui/iterators/collect-into-array.rs
+++ b/tests/ui/iterators/collect-into-array.rs
@@ -3,5 +3,4 @@ fn main() {
//~^ ERROR an array of type `[u32; 10]` cannot be built directly from an iterator
//~| NOTE try collecting into a `Vec<{integer}>`, then using `.try_into()`
//~| NOTE required by a bound in `collect`
- //~| NOTE required by a bound introduced by this call
}
diff --git a/tests/ui/iterators/collect-into-array.stderr b/tests/ui/iterators/collect-into-array.stderr
new file mode 100644
index 000000000..e38745cc1
--- /dev/null
+++ b/tests/ui/iterators/collect-into-array.stderr
@@ -0,0 +1,13 @@
+error[E0277]: an array of type `[u32; 10]` cannot be built directly from an iterator
+ --> $DIR/collect-into-array.rs:2:39
+ |
+LL | let whatever: [u32; 10] = (0..10).collect();
+ | ^^^^^^^ try collecting into a `Vec<{integer}>`, then using `.try_into()`
+ |
+ = help: the trait `FromIterator<{integer}>` is not implemented for `[u32; 10]`
+note: required by a bound in `collect`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/iterators/collect-into-slice.rs b/tests/ui/iterators/collect-into-slice.rs
index 09832c260..5a8aacb1a 100644
--- a/src/test/ui/iterators/collect-into-slice.rs
+++ b/tests/ui/iterators/collect-into-slice.rs
@@ -13,6 +13,5 @@ fn main() {
//~| NOTE all local variables must have a statically known size
//~| NOTE doesn't have a size known at compile-time
//~| NOTE doesn't have a size known at compile-time
- //~| NOTE required by a bound introduced by this call
process_slice(&some_generated_vec);
}
diff --git a/tests/ui/iterators/collect-into-slice.stderr b/tests/ui/iterators/collect-into-slice.stderr
new file mode 100644
index 000000000..29fff8c51
--- /dev/null
+++ b/tests/ui/iterators/collect-into-slice.stderr
@@ -0,0 +1,33 @@
+error[E0277]: the size for values of type `[i32]` cannot be known at compilation time
+ --> $DIR/collect-into-slice.rs:6:9
+ |
+LL | let some_generated_vec = (0..10).collect();
+ | ^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `[i32]`
+ = note: all local variables must have a statically known size
+ = help: unsized locals are gated as an unstable feature
+
+error[E0277]: the size for values of type `[i32]` cannot be known at compilation time
+ --> $DIR/collect-into-slice.rs:6:38
+ |
+LL | let some_generated_vec = (0..10).collect();
+ | ^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `[i32]`
+note: required by a bound in `collect`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error[E0277]: a slice of type `[i32]` cannot be built since `[i32]` has no definite size
+ --> $DIR/collect-into-slice.rs:6:38
+ |
+LL | let some_generated_vec = (0..10).collect();
+ | ^^^^^^^ try explicitly collecting into a `Vec<{integer}>`
+ |
+ = help: the trait `FromIterator<{integer}>` is not implemented for `[i32]`
+note: required by a bound in `collect`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/iterators/float_iterator_hint.rs b/tests/ui/iterators/float_iterator_hint.rs
new file mode 100644
index 000000000..a3335ca41
--- /dev/null
+++ b/tests/ui/iterators/float_iterator_hint.rs
@@ -0,0 +1,15 @@
+// #106728
+
+fn main() {
+ for i in 0.2 {
+ //~^ ERROR `{float}` is not an iterator
+ //~| `{float}` is not an iterator
+ //~| NOTE in this expansion of desugaring of `for` loop
+ //~| NOTE in this expansion of desugaring of `for` loop
+ //~| NOTE in this expansion of desugaring of `for` loop
+ //~| NOTE in this expansion of desugaring of `for` loop
+ //~| NOTE if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end`
+ //~| NOTE required for `{float}` to implement `IntoIterator`
+ println!();
+ }
+}
diff --git a/tests/ui/iterators/float_iterator_hint.stderr b/tests/ui/iterators/float_iterator_hint.stderr
new file mode 100644
index 000000000..bae23a1f8
--- /dev/null
+++ b/tests/ui/iterators/float_iterator_hint.stderr
@@ -0,0 +1,13 @@
+error[E0277]: `{float}` is not an iterator
+ --> $DIR/float_iterator_hint.rs:4:14
+ |
+LL | for i in 0.2 {
+ | ^^^ `{float}` is not an iterator
+ |
+ = help: the trait `Iterator` is not implemented for `{float}`
+ = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end`
+ = note: required for `{float}` to implement `IntoIterator`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/iterators/integral.rs b/tests/ui/iterators/integral.rs
index 7537c7904..7537c7904 100644
--- a/src/test/ui/iterators/integral.rs
+++ b/tests/ui/iterators/integral.rs
diff --git a/src/test/ui/iterators/integral.stderr b/tests/ui/iterators/integral.stderr
index 047a71f98..c142fec8d 100644
--- a/src/test/ui/iterators/integral.stderr
+++ b/tests/ui/iterators/integral.stderr
@@ -115,6 +115,7 @@ LL | for _ in 42.0 {}
| ^^^^ `{float}` is not an iterator
|
= help: the trait `Iterator` is not implemented for `{float}`
+ = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end`
= note: required for `{float}` to implement `IntoIterator`
error: aborting due to 12 previous errors
diff --git a/src/test/ui/iterators/into-iter-on-arrays-2018.rs b/tests/ui/iterators/into-iter-on-arrays-2018.rs
index 60995170a..60995170a 100644
--- a/src/test/ui/iterators/into-iter-on-arrays-2018.rs
+++ b/tests/ui/iterators/into-iter-on-arrays-2018.rs
diff --git a/src/test/ui/iterators/into-iter-on-arrays-2018.stderr b/tests/ui/iterators/into-iter-on-arrays-2018.stderr
index 2378476e5..2378476e5 100644
--- a/src/test/ui/iterators/into-iter-on-arrays-2018.stderr
+++ b/tests/ui/iterators/into-iter-on-arrays-2018.stderr
diff --git a/src/test/ui/iterators/into-iter-on-arrays-2021.rs b/tests/ui/iterators/into-iter-on-arrays-2021.rs
index 158317efe..158317efe 100644
--- a/src/test/ui/iterators/into-iter-on-arrays-2021.rs
+++ b/tests/ui/iterators/into-iter-on-arrays-2021.rs
diff --git a/src/test/ui/iterators/into-iter-on-arrays-lint.fixed b/tests/ui/iterators/into-iter-on-arrays-lint.fixed
index 6e02a7024..6e02a7024 100644
--- a/src/test/ui/iterators/into-iter-on-arrays-lint.fixed
+++ b/tests/ui/iterators/into-iter-on-arrays-lint.fixed
diff --git a/src/test/ui/iterators/into-iter-on-arrays-lint.rs b/tests/ui/iterators/into-iter-on-arrays-lint.rs
index 582d5cadd..582d5cadd 100644
--- a/src/test/ui/iterators/into-iter-on-arrays-lint.rs
+++ b/tests/ui/iterators/into-iter-on-arrays-lint.rs
diff --git a/src/test/ui/iterators/into-iter-on-arrays-lint.stderr b/tests/ui/iterators/into-iter-on-arrays-lint.stderr
index 2fde276fa..2fde276fa 100644
--- a/src/test/ui/iterators/into-iter-on-arrays-lint.stderr
+++ b/tests/ui/iterators/into-iter-on-arrays-lint.stderr
diff --git a/src/test/ui/iterators/into-iterator-type-inference-shift.rs b/tests/ui/iterators/into-iterator-type-inference-shift.rs
index 9151172fd..9151172fd 100644
--- a/src/test/ui/iterators/into-iterator-type-inference-shift.rs
+++ b/tests/ui/iterators/into-iterator-type-inference-shift.rs
diff --git a/tests/ui/iterators/invalid-iterator-chain-with-int-infer.rs b/tests/ui/iterators/invalid-iterator-chain-with-int-infer.rs
new file mode 100644
index 000000000..882a1d139
--- /dev/null
+++ b/tests/ui/iterators/invalid-iterator-chain-with-int-infer.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let x = Some(()).iter().map(|()| 1).sum::<f32>();
+ //~^ ERROR a value of type `f32` cannot be made by summing an iterator over elements of type `{integer}`
+}
diff --git a/tests/ui/iterators/invalid-iterator-chain-with-int-infer.stderr b/tests/ui/iterators/invalid-iterator-chain-with-int-infer.stderr
new file mode 100644
index 000000000..3cb5e44c7
--- /dev/null
+++ b/tests/ui/iterators/invalid-iterator-chain-with-int-infer.stderr
@@ -0,0 +1,24 @@
+error[E0277]: a value of type `f32` cannot be made by summing an iterator over elements of type `{integer}`
+ --> $DIR/invalid-iterator-chain-with-int-infer.rs:2:41
+ |
+LL | let x = Some(()).iter().map(|()| 1).sum::<f32>();
+ | ^^^ value of type `f32` cannot be made by summing a `std::iter::Iterator<Item={integer}>`
+ |
+ = help: the trait `Sum<{integer}>` is not implemented for `f32`
+ = help: the following other types implement trait `Sum<A>`:
+ <f32 as Sum<&'a f32>>
+ <f32 as Sum>
+note: the method call chain might not have had the expected associated types
+ --> $DIR/invalid-iterator-chain-with-int-infer.rs:2:29
+ |
+LL | let x = Some(()).iter().map(|()| 1).sum::<f32>();
+ | -------- ------ ^^^^^^^^^^^ `Iterator::Item` changed to `{integer}` here
+ | | |
+ | | `Iterator::Item` is `&()` here
+ | this expression has type `Option<()>`
+note: required by a bound in `std::iter::Iterator::sum`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/iterators/invalid-iterator-chain.rs b/tests/ui/iterators/invalid-iterator-chain.rs
new file mode 100644
index 000000000..ebdf33303
--- /dev/null
+++ b/tests/ui/iterators/invalid-iterator-chain.rs
@@ -0,0 +1,53 @@
+use std::collections::hash_set::Iter;
+use std::collections::HashSet;
+
+fn iter_to_vec<'b, X>(i: Iter<'b, X>) -> Vec<X> {
+ let i = i.map(|x| x.clone());
+ i.collect() //~ ERROR E0277
+}
+
+fn main() {
+ let scores = vec![(0, 0)]
+ .iter()
+ .map(|(a, b)| {
+ a + b;
+ });
+ println!("{}", scores.sum::<i32>()); //~ ERROR E0277
+ println!(
+ "{}",
+ vec![0, 1]
+ .iter()
+ .map(|x| x * 2)
+ .map(|x| x as f64)
+ .map(|x| x as i64)
+ .filter(|x| *x > 0)
+ .map(|x| { x + 1 })
+ .map(|x| { x; })
+ .sum::<i32>(), //~ ERROR E0277
+ );
+ println!(
+ "{}",
+ vec![0, 1]
+ .iter()
+ .map(|x| x * 2)
+ .map(|x| x as f64)
+ .filter(|x| *x > 0.0)
+ .map(|x| { x + 1.0 })
+ .sum::<i32>(), //~ ERROR E0277
+ );
+ println!("{}", vec![0, 1].iter().map(|x| { x; }).sum::<i32>()); //~ ERROR E0277
+ println!("{}", vec![(), ()].iter().sum::<i32>()); //~ ERROR E0277
+ let a = vec![0];
+ let b = a.into_iter();
+ let c = b.map(|x| x + 1);
+ let d = c.filter(|x| *x > 10 );
+ let e = d.map(|x| {
+ x + 1;
+ });
+ let f = e.filter(|_| false);
+ let g: Vec<i32> = f.collect(); //~ ERROR E0277
+
+ let mut s = HashSet::new();
+ s.insert(1u8);
+ println!("{:?}", iter_to_vec(s.iter()));
+}
diff --git a/tests/ui/iterators/invalid-iterator-chain.stderr b/tests/ui/iterators/invalid-iterator-chain.stderr
new file mode 100644
index 000000000..f3dceca7e
--- /dev/null
+++ b/tests/ui/iterators/invalid-iterator-chain.stderr
@@ -0,0 +1,176 @@
+error[E0277]: a value of type `Vec<X>` cannot be built from an iterator over elements of type `&X`
+ --> $DIR/invalid-iterator-chain.rs:6:7
+ |
+LL | i.collect()
+ | ^^^^^^^ value of type `Vec<X>` cannot be built from `std::iter::Iterator<Item=&X>`
+ |
+ = help: the trait `FromIterator<&X>` is not implemented for `Vec<X>`
+ = help: the trait `FromIterator<T>` is implemented for `Vec<T>`
+note: the method call chain might not have had the expected associated types
+ --> $DIR/invalid-iterator-chain.rs:4:26
+ |
+LL | fn iter_to_vec<'b, X>(i: Iter<'b, X>) -> Vec<X> {
+ | ^^^^^^^^^^^ `Iterator::Item` is `&X` here
+LL | let i = i.map(|x| x.clone());
+ | ------------------ `Iterator::Item` remains `&X` here
+note: required by a bound in `collect`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error[E0277]: a value of type `i32` cannot be made by summing an iterator over elements of type `()`
+ --> $DIR/invalid-iterator-chain.rs:15:27
+ |
+LL | println!("{}", scores.sum::<i32>());
+ | ^^^ value of type `i32` cannot be made by summing a `std::iter::Iterator<Item=()>`
+ |
+ = help: the trait `Sum<()>` is not implemented for `i32`
+ = help: the following other types implement trait `Sum<A>`:
+ <i32 as Sum<&'a i32>>
+ <i32 as Sum>
+note: the method call chain might not have had the expected associated types
+ --> $DIR/invalid-iterator-chain.rs:12:10
+ |
+LL | let scores = vec![(0, 0)]
+ | ------------ this expression has type `Vec<({integer}, {integer})>`
+LL | .iter()
+ | ------ `Iterator::Item` is `&({integer}, {integer})` here
+LL | .map(|(a, b)| {
+ | __________^
+LL | | a + b;
+LL | | });
+ | |__________^ `Iterator::Item` changed to `()` here
+note: required by a bound in `std::iter::Iterator::sum`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error[E0277]: a value of type `i32` cannot be made by summing an iterator over elements of type `()`
+ --> $DIR/invalid-iterator-chain.rs:26:14
+ |
+LL | .sum::<i32>(),
+ | ^^^ value of type `i32` cannot be made by summing a `std::iter::Iterator<Item=()>`
+ |
+ = help: the trait `Sum<()>` is not implemented for `i32`
+ = help: the following other types implement trait `Sum<A>`:
+ <i32 as Sum<&'a i32>>
+ <i32 as Sum>
+note: the method call chain might not have had the expected associated types
+ --> $DIR/invalid-iterator-chain.rs:25:14
+ |
+LL | vec![0, 1]
+ | ---------- this expression has type `Vec<{integer}>`
+LL | .iter()
+ | ------ `Iterator::Item` is `&{integer}` here
+LL | .map(|x| x * 2)
+ | -------------- `Iterator::Item` changed to `{integer}` here
+LL | .map(|x| x as f64)
+ | ----------------- `Iterator::Item` changed to `f64` here
+LL | .map(|x| x as i64)
+ | ----------------- `Iterator::Item` changed to `i64` here
+LL | .filter(|x| *x > 0)
+ | ------------------ `Iterator::Item` remains `i64` here
+LL | .map(|x| { x + 1 })
+ | ------------------ `Iterator::Item` remains `i64` here
+LL | .map(|x| { x; })
+ | ^^^^^^^^^^^^^^^ `Iterator::Item` changed to `()` here
+note: required by a bound in `std::iter::Iterator::sum`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error[E0277]: a value of type `i32` cannot be made by summing an iterator over elements of type `f64`
+ --> $DIR/invalid-iterator-chain.rs:36:14
+ |
+LL | .sum::<i32>(),
+ | ^^^ value of type `i32` cannot be made by summing a `std::iter::Iterator<Item=f64>`
+ |
+ = help: the trait `Sum<f64>` is not implemented for `i32`
+ = help: the following other types implement trait `Sum<A>`:
+ <i32 as Sum<&'a i32>>
+ <i32 as Sum>
+note: the method call chain might not have had the expected associated types
+ --> $DIR/invalid-iterator-chain.rs:33:14
+ |
+LL | vec![0, 1]
+ | ---------- this expression has type `Vec<{integer}>`
+LL | .iter()
+ | ------ `Iterator::Item` is `&{integer}` here
+LL | .map(|x| x * 2)
+ | -------------- `Iterator::Item` changed to `{integer}` here
+LL | .map(|x| x as f64)
+ | ^^^^^^^^^^^^^^^^^ `Iterator::Item` changed to `f64` here
+LL | .filter(|x| *x > 0.0)
+ | -------------------- `Iterator::Item` remains `f64` here
+LL | .map(|x| { x + 1.0 })
+ | -------------------- `Iterator::Item` remains `f64` here
+note: required by a bound in `std::iter::Iterator::sum`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error[E0277]: a value of type `i32` cannot be made by summing an iterator over elements of type `()`
+ --> $DIR/invalid-iterator-chain.rs:38:54
+ |
+LL | println!("{}", vec![0, 1].iter().map(|x| { x; }).sum::<i32>());
+ | ^^^ value of type `i32` cannot be made by summing a `std::iter::Iterator<Item=()>`
+ |
+ = help: the trait `Sum<()>` is not implemented for `i32`
+ = help: the following other types implement trait `Sum<A>`:
+ <i32 as Sum<&'a i32>>
+ <i32 as Sum>
+note: the method call chain might not have had the expected associated types
+ --> $DIR/invalid-iterator-chain.rs:38:38
+ |
+LL | println!("{}", vec![0, 1].iter().map(|x| { x; }).sum::<i32>());
+ | ---------- ------ ^^^^^^^^^^^^^^^ `Iterator::Item` changed to `()` here
+ | | |
+ | | `Iterator::Item` is `&{integer}` here
+ | this expression has type `Vec<{integer}>`
+note: required by a bound in `std::iter::Iterator::sum`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error[E0277]: a value of type `i32` cannot be made by summing an iterator over elements of type `&()`
+ --> $DIR/invalid-iterator-chain.rs:39:40
+ |
+LL | println!("{}", vec![(), ()].iter().sum::<i32>());
+ | ^^^ value of type `i32` cannot be made by summing a `std::iter::Iterator<Item=&()>`
+ |
+ = help: the trait `Sum<&()>` is not implemented for `i32`
+ = help: the following other types implement trait `Sum<A>`:
+ <i32 as Sum<&'a i32>>
+ <i32 as Sum>
+note: the method call chain might not have had the expected associated types
+ --> $DIR/invalid-iterator-chain.rs:39:33
+ |
+LL | println!("{}", vec![(), ()].iter().sum::<i32>());
+ | ------------ ^^^^^^ `Iterator::Item` is `&()` here
+ | |
+ | this expression has type `Vec<()>`
+note: required by a bound in `std::iter::Iterator::sum`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error[E0277]: a value of type `Vec<i32>` cannot be built from an iterator over elements of type `()`
+ --> $DIR/invalid-iterator-chain.rs:48:25
+ |
+LL | let g: Vec<i32> = f.collect();
+ | ^^^^^^^ value of type `Vec<i32>` cannot be built from `std::iter::Iterator<Item=()>`
+ |
+ = help: the trait `FromIterator<()>` is not implemented for `Vec<i32>`
+ = help: the trait `FromIterator<T>` is implemented for `Vec<T>`
+note: the method call chain might not have had the expected associated types
+ --> $DIR/invalid-iterator-chain.rs:44:15
+ |
+LL | let a = vec![0];
+ | ------- this expression has type `Vec<{integer}>`
+LL | let b = a.into_iter();
+ | ----------- `Iterator::Item` is `{integer}` here
+LL | let c = b.map(|x| x + 1);
+ | -------------- `Iterator::Item` remains `{integer}` here
+LL | let d = c.filter(|x| *x > 10 );
+ | -------------------- `Iterator::Item` remains `{integer}` here
+LL | let e = d.map(|x| {
+ | _______________^
+LL | | x + 1;
+LL | | });
+ | |______^ `Iterator::Item` changed to `()` here
+LL | let f = e.filter(|_| false);
+ | ----------------- `Iterator::Item` remains `()` here
+note: required by a bound in `collect`
+ --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
+
+error: aborting due to 7 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/iterators/issue-28098.rs b/tests/ui/iterators/issue-28098.rs
index 80c77edae..80c77edae 100644
--- a/src/test/ui/iterators/issue-28098.rs
+++ b/tests/ui/iterators/issue-28098.rs
diff --git a/src/test/ui/iterators/issue-28098.stderr b/tests/ui/iterators/issue-28098.stderr
index 3256e57d4..3256e57d4 100644
--- a/src/test/ui/iterators/issue-28098.stderr
+++ b/tests/ui/iterators/issue-28098.stderr
diff --git a/src/test/ui/iterators/issue-58952-filter-type-length.rs b/tests/ui/iterators/issue-58952-filter-type-length.rs
index 6d12db8d1..6d12db8d1 100644
--- a/src/test/ui/iterators/issue-58952-filter-type-length.rs
+++ b/tests/ui/iterators/issue-58952-filter-type-length.rs
diff --git a/src/test/ui/iterators/iter-cloned-type-inference.rs b/tests/ui/iterators/iter-cloned-type-inference.rs
index 898e33719..898e33719 100644
--- a/src/test/ui/iterators/iter-cloned-type-inference.rs
+++ b/tests/ui/iterators/iter-cloned-type-inference.rs
diff --git a/src/test/ui/iterators/iter-count-overflow-debug.rs b/tests/ui/iterators/iter-count-overflow-debug.rs
index 8e59c11e9..8e59c11e9 100644
--- a/src/test/ui/iterators/iter-count-overflow-debug.rs
+++ b/tests/ui/iterators/iter-count-overflow-debug.rs
diff --git a/src/test/ui/iterators/iter-count-overflow-ndebug.rs b/tests/ui/iterators/iter-count-overflow-ndebug.rs
index dcaaff671..dcaaff671 100644
--- a/src/test/ui/iterators/iter-count-overflow-ndebug.rs
+++ b/tests/ui/iterators/iter-count-overflow-ndebug.rs
diff --git a/src/test/ui/iterators/iter-map-fold-type-length.rs b/tests/ui/iterators/iter-map-fold-type-length.rs
index 8ce4fcd87..8ce4fcd87 100644
--- a/src/test/ui/iterators/iter-map-fold-type-length.rs
+++ b/tests/ui/iterators/iter-map-fold-type-length.rs
diff --git a/src/test/ui/iterators/iter-position-overflow-debug.rs b/tests/ui/iterators/iter-position-overflow-debug.rs
index 7a871e744..7a871e744 100644
--- a/src/test/ui/iterators/iter-position-overflow-debug.rs
+++ b/tests/ui/iterators/iter-position-overflow-debug.rs
diff --git a/src/test/ui/iterators/iter-position-overflow-ndebug.rs b/tests/ui/iterators/iter-position-overflow-ndebug.rs
index e610c3559..e610c3559 100644
--- a/src/test/ui/iterators/iter-position-overflow-ndebug.rs
+++ b/tests/ui/iterators/iter-position-overflow-ndebug.rs
diff --git a/src/test/ui/iterators/iter-range.rs b/tests/ui/iterators/iter-range.rs
index 993d93790..993d93790 100644
--- a/src/test/ui/iterators/iter-range.rs
+++ b/tests/ui/iterators/iter-range.rs
diff --git a/src/test/ui/iterators/iter-step-overflow-debug.rs b/tests/ui/iterators/iter-step-overflow-debug.rs
index 6aa349ebe..6aa349ebe 100644
--- a/src/test/ui/iterators/iter-step-overflow-debug.rs
+++ b/tests/ui/iterators/iter-step-overflow-debug.rs
diff --git a/src/test/ui/iterators/iter-step-overflow-ndebug.rs b/tests/ui/iterators/iter-step-overflow-ndebug.rs
index 33e708769..33e708769 100644
--- a/src/test/ui/iterators/iter-step-overflow-ndebug.rs
+++ b/tests/ui/iterators/iter-step-overflow-ndebug.rs
diff --git a/src/test/ui/iterators/iter-sum-overflow-debug.rs b/tests/ui/iterators/iter-sum-overflow-debug.rs
index 24c764ff9..24c764ff9 100644
--- a/src/test/ui/iterators/iter-sum-overflow-debug.rs
+++ b/tests/ui/iterators/iter-sum-overflow-debug.rs
diff --git a/src/test/ui/iterators/iter-sum-overflow-ndebug.rs b/tests/ui/iterators/iter-sum-overflow-ndebug.rs
index 69f4744cc..69f4744cc 100644
--- a/src/test/ui/iterators/iter-sum-overflow-ndebug.rs
+++ b/tests/ui/iterators/iter-sum-overflow-ndebug.rs
diff --git a/src/test/ui/iterators/iter-sum-overflow-overflow-checks.rs b/tests/ui/iterators/iter-sum-overflow-overflow-checks.rs
index be45c075d..be45c075d 100644
--- a/src/test/ui/iterators/iter-sum-overflow-overflow-checks.rs
+++ b/tests/ui/iterators/iter-sum-overflow-overflow-checks.rs
diff --git a/src/test/ui/iterators/ranges.rs b/tests/ui/iterators/ranges.rs
index 925d2d61a..925d2d61a 100644
--- a/src/test/ui/iterators/ranges.rs
+++ b/tests/ui/iterators/ranges.rs
diff --git a/src/test/ui/iterators/ranges.stderr b/tests/ui/iterators/ranges.stderr
index b9fbcd530..b9fbcd530 100644
--- a/src/test/ui/iterators/ranges.stderr
+++ b/tests/ui/iterators/ranges.stderr
diff --git a/src/test/ui/iterators/rsplit-clone.rs b/tests/ui/iterators/rsplit-clone.rs
index 911da7429..911da7429 100644
--- a/src/test/ui/iterators/rsplit-clone.rs
+++ b/tests/ui/iterators/rsplit-clone.rs
diff --git a/src/test/ui/iterators/skip-count-overflow.rs b/tests/ui/iterators/skip-count-overflow.rs
index 64dee3e3c..64dee3e3c 100644
--- a/src/test/ui/iterators/skip-count-overflow.rs
+++ b/tests/ui/iterators/skip-count-overflow.rs
diff --git a/src/test/ui/iterators/string.rs b/tests/ui/iterators/string.rs
index ad58a463e..ad58a463e 100644
--- a/src/test/ui/iterators/string.rs
+++ b/tests/ui/iterators/string.rs
diff --git a/src/test/ui/iterators/string.stderr b/tests/ui/iterators/string.stderr
index ddfe0169b..ddfe0169b 100644
--- a/src/test/ui/iterators/string.stderr
+++ b/tests/ui/iterators/string.stderr
diff --git a/src/test/ui/iterators/vec-on-unimplemented.rs b/tests/ui/iterators/vec-on-unimplemented.rs
index 42b5d36bf..42b5d36bf 100644
--- a/src/test/ui/iterators/vec-on-unimplemented.rs
+++ b/tests/ui/iterators/vec-on-unimplemented.rs
diff --git a/tests/ui/iterators/vec-on-unimplemented.stderr b/tests/ui/iterators/vec-on-unimplemented.stderr
new file mode 100644
index 000000000..a7d9c481a
--- /dev/null
+++ b/tests/ui/iterators/vec-on-unimplemented.stderr
@@ -0,0 +1,18 @@
+error[E0599]: `Vec<bool>` is not an iterator
+ --> $DIR/vec-on-unimplemented.rs:2:23
+ |
+LL | vec![true, false].map(|v| !v).collect::<Vec<_>>();
+ | ^^^ `Vec<bool>` is not an iterator; try calling `.into_iter()` or `.iter()`
+ --> $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
+ |
+ = note: doesn't satisfy `Vec<bool>: Iterator`
+ |
+ = note: the following trait bounds were not satisfied:
+ `Vec<bool>: Iterator`
+ which is required by `&mut Vec<bool>: Iterator`
+ `[bool]: Iterator`
+ which is required by `&mut [bool]: Iterator`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.