diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2020-03-24 00:49:45 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-24 00:49:45 +0100 |
| commit | ab2817bbd0047448a2c3dadd856cac98ff07a7a8 (patch) | |
| tree | 3f826a13b1c9c596dcadf3d8cee34b37a517100a /src/test | |
| parent | 7a47df81697ae1db7b7545b11a06e00e989ccd87 (diff) | |
| parent | 1e5d81de1d8485e9ce2995bc6b1559f25c4d86e5 (diff) | |
| download | rust-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.rs | 11 | ||||
| -rw-r--r-- | src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.stderr | 12 |
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`. |
