Rollup merge of #110957 - WaffleLapkin:reach_generator_conflict_error, r=cjgillot
Fix an ICE in conflict error diagnostics Fixes #110929 r? ``@cjgillot``
This commit is contained in:
commit
235d088412
3 changed files with 31 additions and 1 deletions
|
@ -1359,7 +1359,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get closure's arguments
|
// Get closure's arguments
|
||||||
let ty::Closure(_, substs) = typeck_results.expr_ty(closure_expr).kind() else { unreachable!() };
|
let ty::Closure(_, substs) = typeck_results.expr_ty(closure_expr).kind() else { /* hir::Closure can be a generator too */ return };
|
||||||
let sig = substs.as_closure().sig();
|
let sig = substs.as_closure().sig();
|
||||||
let tupled_params =
|
let tupled_params =
|
||||||
tcx.erase_late_bound_regions(sig.inputs().iter().next().unwrap().map_bound(|&b| b));
|
tcx.erase_late_bound_regions(sig.inputs().iter().next().unwrap().map_bound(|&b| b));
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
// edition:2021
|
||||||
|
// compile-flags: -Zdrop-tracking-mir=yes
|
||||||
|
#![feature(generators)]
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let x = &mut ();
|
||||||
|
|| {
|
||||||
|
let _c = || yield *&mut *x;
|
||||||
|
|| _ = &mut *x;
|
||||||
|
//~^ cannot borrow `*x` as mutable more than once at a time
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
error[E0499]: cannot borrow `*x` as mutable more than once at a time
|
||||||
|
--> $DIR/issue-110929-generator-conflict-error-ice.rs:9:9
|
||||||
|
|
|
||||||
|
LL | let _c = || yield *&mut *x;
|
||||||
|
| -- -- first borrow occurs due to use of `*x` in generator
|
||||||
|
| |
|
||||||
|
| first mutable borrow occurs here
|
||||||
|
LL | || _ = &mut *x;
|
||||||
|
| ^^ -- second borrow occurs due to use of `*x` in closure
|
||||||
|
| |
|
||||||
|
| second mutable borrow occurs here
|
||||||
|
LL |
|
||||||
|
LL | };
|
||||||
|
| - first borrow might be used here, when `_c` is dropped and runs the destructor for generator
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0499`.
|
Loading…
Add table
Add a link
Reference in a new issue