about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2020-03-24 00:49:45 +0100
committerGitHub <noreply@github.com>2020-03-24 00:49:45 +0100
commitab2817bbd0047448a2c3dadd856cac98ff07a7a8 (patch)
tree3f826a13b1c9c596dcadf3d8cee34b37a517100a /src/test
parent7a47df81697ae1db7b7545b11a06e00e989ccd87 (diff)
parent1e5d81de1d8485e9ce2995bc6b1559f25c4d86e5 (diff)
downloadrust-ab2817bbd0047448a2c3dadd856cac98ff07a7a8.tar.gz
rust-ab2817bbd0047448a2c3dadd856cac98ff07a7a8.zip
Rollup merge of #70264 - tirr-c:issue-69789-mut-suggestion, r=estebank
Fix invalid suggestion on `&mut` iterators yielding `&` references

Fixes #69789.

rustc suggested an invalid code when `&` reference from `&mut` iterator is mutated. The compiler knew we're mutating a value behind `&` reference, but as the assignment RHS is from desugaring, it could only see the iterator expression from source and inserted `mut` there.

r? @estebank
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.rs11
-rw-r--r--src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.stderr12
2 files changed, 23 insertions, 0 deletions
diff --git a/src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.rs b/src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.rs
new file mode 100644
index 00000000000..f6d0e9e04d3
--- /dev/null
+++ b/src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.rs
@@ -0,0 +1,11 @@
+// Regression test for #69789: rustc generated an invalid suggestion
+// when `&` reference from `&mut` iterator is mutated.
+
+fn main() {
+    for item in &mut std::iter::empty::<&'static ()>() {
+        //~^ NOTE this iterator yields `&` references
+        *item = ();
+        //~^ ERROR cannot assign
+        //~| NOTE  cannot be written
+    }
+}
diff --git a/src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.stderr b/src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.stderr
new file mode 100644
index 00000000000..d2865ffd196
--- /dev/null
+++ b/src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.stderr
@@ -0,0 +1,12 @@
+error[E0594]: cannot assign to `*item` which is behind a `&` reference
+  --> $DIR/issue-69789-iterator-mut-suggestion.rs:7:9
+   |
+LL |     for item in &mut std::iter::empty::<&'static ()>() {
+   |                 -------------------------------------- this iterator yields `&` references
+LL |
+LL |         *item = ();
+   |         ^^^^^^^^^^ `item` 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`.