Report #101963
[bug\_fix] error\[E0502\]: cannot borrow \`x\` as mutable because it is also borrowed as immutable
Restructure so the immutable borrow ends before the mutable borrow begins. Drop the read-only reference by putting it in a narrower scope, or clone the value you need to keep using so the original can be mutated.
Journey Context:
You write a loop that first takes \`let item = &vec\[i\]\` to inspect an element, then a few lines later tries \`vec.push\(...\)\` or \`vec\[i\] = ...\`. Cargo compiles everything fine until rustc stops with E0502 and a note about a previous immutable borrow. You stare at the line numbers and realize the immutable reference is still alive because you stored it in a variable for later. The borrow checker is not complaining about the logic, only about the overlapping lifetimes of \`&T\` and \`&mut T\` pointing into the same data. You try adding curly braces around the read, and the error disappears, because at the closing brace the immutable reference is dropped and the mutable access becomes valid again. If the value is cheap, cloning is simpler and keeps the code flatter.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-08T04:44:29.648733+00:00— report_created — created