Allow to mutate use captures

This commit is contained in:
Santiago Pastorino
2025-02-14 18:35:43 -03:00
parent 292aa87049
commit 6eb6ff62f7
2 changed files with 24 additions and 7 deletions
+13 -7
View File
@@ -1490,14 +1490,20 @@ fn propagate_closure_used_mut_upvar(&mut self, operand: &Operand<'tcx>) {
let stmt = &bbd.statements[loc.statement_index];
debug!("temporary assigned in: stmt={:?}", stmt);
if let StatementKind::Assign(box (_, Rvalue::Ref(_, _, source))) = stmt.kind
{
propagate_closure_used_mut_place(self, source);
} else {
bug!(
"closures should only capture user variables \
match stmt.kind {
StatementKind::Assign(box (
_,
Rvalue::Ref(_, _, source)
| Rvalue::Use(Operand::Copy(source) | Operand::Move(source)),
)) => {
propagate_closure_used_mut_place(self, source);
}
_ => {
bug!(
"closures should only capture user variables \
or references to user variables"
);
);
}
}
}
_ => propagate_closure_used_mut_place(self, place),
@@ -0,0 +1,11 @@
//@ check-pass
#![feature(ergonomic_clones)]
fn main() {
let mut my_var = false;
let mut callback = use || {
my_var = true;
};
callback();
}