Skip to content

Commit

Permalink
Rollup merge of rust-lang#110957 - WaffleLapkin:reach_generator_confl…
Browse files Browse the repository at this point in the history
…ict_error, r=cjgillot

Fix an ICE in conflict error diagnostics

Fixes  rust-lang#110929
r? `@cjgillot`
  • Loading branch information
matthiaskrgr committed Apr 28, 2023
2 parents c8430b2 + 754a62c commit dd0dc9b
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 1 deletion.
2 changes: 1 addition & 1 deletion compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1359,7 +1359,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
}

// 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 tupled_params =
tcx.erase_late_bound_regions(sig.inputs().iter().next().unwrap().map_bound(|&b| b));
Expand Down
12 changes: 12 additions & 0 deletions tests/ui/generator/issue-110929-generator-conflict-error-ice.rs
Original file line number Diff line number Diff line change
@@ -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
};
}
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit dd0dc9b

Please sign in to comment.