about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorDylan DPC <dylan.dpc@gmail.com>2021-02-14 16:54:53 +0100
committerGitHub <noreply@github.com>2021-02-14 16:54:53 +0100
commitbcb14035e9b07bf334e91854f5490e12a64bc161 (patch)
tree611455f9f853740448cfcbd15fe2b73710a43c5a /src
parentc8dacf95aed03733fb67b939c5d08367fe1ace40 (diff)
parent26ca5fb06f9153ea84397134e24d8db208df5fd0 (diff)
downloadrust-bcb14035e9b07bf334e91854f5490e12a64bc161.tar.gz
rust-bcb14035e9b07bf334e91854f5490e12a64bc161.zip
Rollup merge of #82056 - b-naber:mut_for_loop_bug, r=oli-obk
fix ice (#82032)

Fixes https://github.com/rust-lang/rust/issues/82032
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/borrowck/issue-82032.rs16
-rw-r--r--src/test/ui/borrowck/issue-82032.stderr14
2 files changed, 30 insertions, 0 deletions
diff --git a/src/test/ui/borrowck/issue-82032.rs b/src/test/ui/borrowck/issue-82032.rs
new file mode 100644
index 00000000000..4a01b60c1f6
--- /dev/null
+++ b/src/test/ui/borrowck/issue-82032.rs
@@ -0,0 +1,16 @@
+use std::{fs, io::*};
+use std::collections::HashMap;
+
+type Handle = BufWriter<fs::File>;
+struct Thing(HashMap<String, Handle>);
+
+impl Thing {
+    pub fn die_horribly(&mut self) {
+        for v in self.0.values() {
+            v.flush();
+              //~^ ERROR cannot borrow
+        }
+    }
+}
+
+fn main() {}
diff --git a/src/test/ui/borrowck/issue-82032.stderr b/src/test/ui/borrowck/issue-82032.stderr
new file mode 100644
index 00000000000..f272477a9f5
--- /dev/null
+++ b/src/test/ui/borrowck/issue-82032.stderr
@@ -0,0 +1,14 @@
+error[E0596]: cannot borrow `*v` as mutable, as it is behind a `&` reference
+  --> $DIR/issue-82032.rs:10:13
+   |
+LL |         for v in self.0.values() {
+   |                  ---------------
+   |                  |      |
+   |                  |      help: use mutable method: `values_mut()`
+   |                  this iterator yields `&` references
+LL |             v.flush();
+   |             ^ `v` is a `&` reference, so the data it refers to cannot be borrowed as mutable
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0596`.