summaryrefslogtreecommitdiff
path: root/tests/ui/traits
diff options
context:
space:
mode:
authoryukang <moorekang@gmail.com>2024-07-16 21:57:12 +0800
committeryukang <moorekang@gmail.com>2024-07-16 22:01:10 +0800
commit077d0da30a888ea049a471bca6301d706ca66c25 (patch)
tree9f858fc33ade5d3f7b50fd9bba1fb7e8cda20274 /tests/ui/traits
parenta91f7d72f12efcc00ecf71591f066c534d45ddf7 (diff)
add test for issue 127590
Diffstat (limited to 'tests/ui/traits')
-rw-r--r--tests/ui/traits/suggest-dereferences/invalid-suggest-deref-issue-127590.rs18
-rw-r--r--tests/ui/traits/suggest-dereferences/invalid-suggest-deref-issue-127590.stderr69
2 files changed, 87 insertions, 0 deletions
diff --git a/tests/ui/traits/suggest-dereferences/invalid-suggest-deref-issue-127590.rs b/tests/ui/traits/suggest-dereferences/invalid-suggest-deref-issue-127590.rs
new file mode 100644
index 00000000000..a71657316ae
--- /dev/null
+++ b/tests/ui/traits/suggest-dereferences/invalid-suggest-deref-issue-127590.rs
@@ -0,0 +1,18 @@
+fn main() {
+ let fields = vec![1];
+ let variant = vec![2];
+
+ // should not suggest `*&variant.iter()`
+ for (src, dest) in std::iter::zip(fields.iter(), &variant.iter()) {
+ //~^ ERROR `&std::slice::Iter<'_, {integer}>` is not an iterator
+ //~| ERROR `&std::slice::Iter<'_, {integer}>` is not an iterator
+ eprintln!("{} {}", src, dest);
+ }
+
+ // don't suggest add `variant.iter().clone().clone()`
+ for (src, dest) in std::iter::zip(fields.iter(), &variant.iter().clone()) {
+ //~^ ERROR `&std::slice::Iter<'_, {integer}>` is not an iterator
+ //~| ERROR `&std::slice::Iter<'_, {integer}>` is not an iterator
+ eprintln!("{} {}", src, dest);
+ }
+}
diff --git a/tests/ui/traits/suggest-dereferences/invalid-suggest-deref-issue-127590.stderr b/tests/ui/traits/suggest-dereferences/invalid-suggest-deref-issue-127590.stderr
new file mode 100644
index 00000000000..14befe796cf
--- /dev/null
+++ b/tests/ui/traits/suggest-dereferences/invalid-suggest-deref-issue-127590.stderr
@@ -0,0 +1,69 @@
+error[E0277]: `&std::slice::Iter<'_, {integer}>` is not an iterator
+ --> $DIR/invalid-suggest-deref-issue-127590.rs:6:54
+ |
+LL | for (src, dest) in std::iter::zip(fields.iter(), &variant.iter()) {
+ | -------------- ^^^^^^^^^^^^^^^ `&std::slice::Iter<'_, {integer}>` is not an iterator
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `Iterator` is not implemented for `&std::slice::Iter<'_, {integer}>`, which is required by `&std::slice::Iter<'_, {integer}>: IntoIterator`
+ = note: required for `&std::slice::Iter<'_, {integer}>` to implement `IntoIterator`
+note: required by a bound in `std::iter::zip`
+ --> $SRC_DIR/core/src/iter/adapters/zip.rs:LL:COL
+help: consider dereferencing here
+ |
+LL | for (src, dest) in std::iter::zip(fields.iter(), *&variant.iter()) {
+ | +
+help: consider removing the leading `&`-reference
+ |
+LL - for (src, dest) in std::iter::zip(fields.iter(), &variant.iter()) {
+LL + for (src, dest) in std::iter::zip(fields.iter(), variant.iter()) {
+ |
+
+error[E0277]: `&std::slice::Iter<'_, {integer}>` is not an iterator
+ --> $DIR/invalid-suggest-deref-issue-127590.rs:6:24
+ |
+LL | for (src, dest) in std::iter::zip(fields.iter(), &variant.iter()) {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `&std::slice::Iter<'_, {integer}>` is not an iterator
+ |
+ = help: the trait `Iterator` is not implemented for `&std::slice::Iter<'_, {integer}>`, which is required by `Zip<std::slice::Iter<'_, {integer}>, &std::slice::Iter<'_, {integer}>>: IntoIterator`
+ = help: the trait `Iterator` is implemented for `std::slice::Iter<'a, T>`
+ = note: required for `Zip<std::slice::Iter<'_, {integer}>, &std::slice::Iter<'_, {integer}>>` to implement `Iterator`
+ = note: required for `Zip<std::slice::Iter<'_, {integer}>, &std::slice::Iter<'_, {integer}>>` to implement `IntoIterator`
+
+error[E0277]: `&std::slice::Iter<'_, {integer}>` is not an iterator
+ --> $DIR/invalid-suggest-deref-issue-127590.rs:13:54
+ |
+LL | for (src, dest) in std::iter::zip(fields.iter(), &variant.iter().clone()) {
+ | -------------- ^^^^^^^^^^^^^^^^^^^^^^^ `&std::slice::Iter<'_, {integer}>` is not an iterator
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `Iterator` is not implemented for `&std::slice::Iter<'_, {integer}>`, which is required by `&std::slice::Iter<'_, {integer}>: IntoIterator`
+ = note: required for `&std::slice::Iter<'_, {integer}>` to implement `IntoIterator`
+note: required by a bound in `std::iter::zip`
+ --> $SRC_DIR/core/src/iter/adapters/zip.rs:LL:COL
+help: consider dereferencing here
+ |
+LL | for (src, dest) in std::iter::zip(fields.iter(), *&variant.iter().clone()) {
+ | +
+help: consider removing the leading `&`-reference
+ |
+LL - for (src, dest) in std::iter::zip(fields.iter(), &variant.iter().clone()) {
+LL + for (src, dest) in std::iter::zip(fields.iter(), variant.iter().clone()) {
+ |
+
+error[E0277]: `&std::slice::Iter<'_, {integer}>` is not an iterator
+ --> $DIR/invalid-suggest-deref-issue-127590.rs:13:24
+ |
+LL | for (src, dest) in std::iter::zip(fields.iter(), &variant.iter().clone()) {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `&std::slice::Iter<'_, {integer}>` is not an iterator
+ |
+ = help: the trait `Iterator` is not implemented for `&std::slice::Iter<'_, {integer}>`, which is required by `Zip<std::slice::Iter<'_, {integer}>, &std::slice::Iter<'_, {integer}>>: IntoIterator`
+ = help: the trait `Iterator` is implemented for `std::slice::Iter<'a, T>`
+ = note: required for `Zip<std::slice::Iter<'_, {integer}>, &std::slice::Iter<'_, {integer}>>` to implement `Iterator`
+ = note: required for `Zip<std::slice::Iter<'_, {integer}>, &std::slice::Iter<'_, {integer}>>` to implement `IntoIterator`
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0277`.