about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2022-03-28 11:47:19 -0700
committerMichael Howell <michael@notriddle.com>2022-03-28 11:48:14 -0700
commit757ab6b55c1e06689d457550afe5da3955a22c3a (patch)
tree1ffd4dd333df42e70d32f4cf41524df522049fa0 /src
parenta063b3a4b6eed93d07c084d6e34dbe7d02e02b04 (diff)
downloadrust-757ab6b55c1e06689d457550afe5da3955a22c3a.tar.gz
rust-757ab6b55c1e06689d457550afe5da3955a22c3a.zip
diagnostics: add regression test for #82081
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/suggestions/suggest-mut-method-for-loop-hashmap.fixed21
-rw-r--r--src/test/ui/suggestions/suggest-mut-method-for-loop-hashmap.rs21
-rw-r--r--src/test/ui/suggestions/suggest-mut-method-for-loop-hashmap.stderr15
3 files changed, 57 insertions, 0 deletions
diff --git a/src/test/ui/suggestions/suggest-mut-method-for-loop-hashmap.fixed b/src/test/ui/suggestions/suggest-mut-method-for-loop-hashmap.fixed
new file mode 100644
index 00000000000..b69bad98888
--- /dev/null
+++ b/src/test/ui/suggestions/suggest-mut-method-for-loop-hashmap.fixed
@@ -0,0 +1,21 @@
+// run-rustfix
+// https://github.com/rust-lang/rust/issues/82081
+
+use std::collections::HashMap;
+
+struct Test {
+    v: u32,
+}
+
+fn main() {
+    let mut map = HashMap::new();
+    map.insert("a", Test { v: 0 });
+
+    for (_k, mut v) in map.iter_mut() {
+        //~^ HELP use mutable method
+        //~| NOTE this iterator yields `&` references
+        v.v += 1;
+        //~^ ERROR cannot assign to `v.v`
+        //~| NOTE `v` is a `&` reference
+    }
+}
diff --git a/src/test/ui/suggestions/suggest-mut-method-for-loop-hashmap.rs b/src/test/ui/suggestions/suggest-mut-method-for-loop-hashmap.rs
new file mode 100644
index 00000000000..9284410dfa3
--- /dev/null
+++ b/src/test/ui/suggestions/suggest-mut-method-for-loop-hashmap.rs
@@ -0,0 +1,21 @@
+// run-rustfix
+// https://github.com/rust-lang/rust/issues/82081
+
+use std::collections::HashMap;
+
+struct Test {
+    v: u32,
+}
+
+fn main() {
+    let mut map = HashMap::new();
+    map.insert("a", Test { v: 0 });
+
+    for (_k, mut v) in map.iter() {
+        //~^ HELP use mutable method
+        //~| NOTE this iterator yields `&` references
+        v.v += 1;
+        //~^ ERROR cannot assign to `v.v`
+        //~| NOTE `v` is a `&` reference
+    }
+}
diff --git a/src/test/ui/suggestions/suggest-mut-method-for-loop-hashmap.stderr b/src/test/ui/suggestions/suggest-mut-method-for-loop-hashmap.stderr
new file mode 100644
index 00000000000..74433daa6ac
--- /dev/null
+++ b/src/test/ui/suggestions/suggest-mut-method-for-loop-hashmap.stderr
@@ -0,0 +1,15 @@
+error[E0594]: cannot assign to `v.v`, which is behind a `&` reference
+  --> $DIR/suggest-mut-method-for-loop-hashmap.rs:17:9
+   |
+LL |     for (_k, mut v) in map.iter() {
+   |                        ----------
+   |                        |   |
+   |                        |   help: use mutable method: `iter_mut()`
+   |                        this iterator yields `&` references
+...
+LL |         v.v += 1;
+   |         ^^^^^^^^ `v` is a `&` reference, so the data it refers to cannot be written
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0594`.