Fix ICE of for-loop mut borrowck where no suggestions are available
This commit is contained in:
parent
5d04957a4b
commit
09d71448b7
3 changed files with 54 additions and 7 deletions
32
src/test/ui/borrowck/issue-83309-ice-immut-in-for-loop.rs
Normal file
32
src/test/ui/borrowck/issue-83309-ice-immut-in-for-loop.rs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
// rust-lang/rust#83309: The compiler tries to suggest potential
|
||||
// methods that return `&mut` items. However, when it doesn't
|
||||
// find such methods, it still tries to add suggestions
|
||||
// which then fails an assertion later because there was
|
||||
// no suggestions to make.
|
||||
|
||||
|
||||
fn main() {
|
||||
for v in Query.iter_mut() {
|
||||
//~^ NOTE this iterator yields `&` references
|
||||
*v -= 1;
|
||||
//~^ ERROR cannot assign to `*v` which is behind a `&` reference
|
||||
//~| NOTE `v` is a `&` reference, so the data it refers to cannot be written
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Query;
|
||||
pub struct QueryIter<'a>(&'a i32);
|
||||
|
||||
impl Query {
|
||||
pub fn iter_mut<'a>(&'a mut self) -> QueryIter<'a> {
|
||||
todo!();
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Iterator for QueryIter<'a> {
|
||||
type Item = &'a i32;
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
todo!();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
error[E0594]: cannot assign to `*v` which is behind a `&` reference
|
||||
--> $DIR/issue-83309-ice-immut-in-for-loop.rs:11:9
|
||||
|
|
||||
LL | for v in Query.iter_mut() {
|
||||
| ---------------- this iterator yields `&` references
|
||||
LL |
|
||||
LL | *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`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue