Closed
Description
On stable, we prevent users from creating an &mut
that points to memory inside a const
by forbidding the creation of mutable references during const-eval. This limitation is only temporary, see #57349. We have a feature flag, const_mut_refs
, that allows users to create mutable references, but no attempt is made to prevent &mut
from escaping into the final value of a const
like so:
#![feature(const_mut_refs)]
const FOO: &mut i32 = &mut 4;
fn main() {
*FOO = 2;
}
This errors on the current nightly, and if there were a feature gate that allowed it, we would get an ICE:
error: internal compiler error: src/librustc_mir/interpret/intern.rs:238: const qualif failed to prevent mutable references
I think we've not yet settled on the semantics we want. We're allowing them in const fn
and relying on the borrow checker to prevent references from escaping.