about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMichael Goulet <michael@errs.io>2022-05-29 13:01:42 -0700
committerMichael Goulet <michael@errs.io>2022-05-29 13:01:59 -0700
commit2e25c2346b9cf58c3c30375bd6e6defef1c11f07 (patch)
tree9484b61b00d95a391680eb69a8fa2af20410f1b9 /src
parent9d1aeaeb827da7a10b7cfaccf0a1d6ebf414a7b5 (diff)
downloadrust-2e25c2346b9cf58c3c30375bd6e6defef1c11f07.tar.gz
rust-2e25c2346b9cf58c3c30375bd6e6defef1c11f07.zip
Note pattern mismatch coming from for-loop desugaring
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/pattern/for-loop-bad-item.rs20
-rw-r--r--src/test/ui/pattern/for-loop-bad-item.stderr23
2 files changed, 43 insertions, 0 deletions
diff --git a/src/test/ui/pattern/for-loop-bad-item.rs b/src/test/ui/pattern/for-loop-bad-item.rs
new file mode 100644
index 00000000000..9a56a399b9b
--- /dev/null
+++ b/src/test/ui/pattern/for-loop-bad-item.rs
@@ -0,0 +1,20 @@
+struct Qux(i32);
+
+fn bad() {
+    let mut map = std::collections::HashMap::new();
+    map.insert(('a', 'b'), ('c', 'd'));
+
+    for ((_, _), (&mut c, _)) in &mut map {
+    //~^ ERROR mismatched types
+        if c == 'e' {}
+    }
+}
+
+fn bad2() {
+    for Some(Qux(_)) | None in [Some(""), None] {
+    //~^ ERROR mismatched types
+        todo!();
+    }
+}
+
+fn main() {}
diff --git a/src/test/ui/pattern/for-loop-bad-item.stderr b/src/test/ui/pattern/for-loop-bad-item.stderr
new file mode 100644
index 00000000000..9410e4da8d2
--- /dev/null
+++ b/src/test/ui/pattern/for-loop-bad-item.stderr
@@ -0,0 +1,23 @@
+error[E0308]: mismatched types
+  --> $DIR/for-loop-bad-item.rs:7:19
+   |
+LL |     for ((_, _), (&mut c, _)) in &mut map {
+   |                   ^^^^^^         -------- this is an iterator with items of type `(&(char, char), &mut (char, char))`
+   |                   |
+   |                   expected `char`, found `&mut _`
+   |                   help: you can probably remove the explicit borrow: `c`
+   |
+   = note:           expected type `char`
+           found mutable reference `&mut _`
+
+error[E0308]: mismatched types
+  --> $DIR/for-loop-bad-item.rs:14:14
+   |
+LL |     for Some(Qux(_)) | None in [Some(""), None] {
+   |              ^^^^^^            ---------------- this is an iterator with items of type `Option<&str>`
+   |              |
+   |              expected `str`, found struct `Qux`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.