rust/compiler/rustc_const_eval/src
bors 22572d0994 Auto merge of #129508 - RalfJung:transient-locals, r=cjgillot
const checking: properly compute the set of transient locals

For const-checking the MIR of a const/static initializer, we have to know the set of "transient" locals. The reason for this is that creating a mutable (or interior mutable) reference to a transient local is "safe" in the sense that this reference cannot possibly end up in the final value of the const -- even if it is turned into a raw pointer and stored in a union, we will see that pointer during interning and reliably reject it as dangling.

So far, we determined the set of transient locals as "locals that have a `StorageDead` somewhere". But that's not quite right -- if we had MIR like
```rust
StorageLive(_5);
StorageDead(_5);
StorageLive(_5);
// no further storage annotations for _5
```
Then we'd consider `_5` to be "transient", but it is not actually transient.

We do not currently generate such MIR, but I feel uneasy relying on subtle invariants like this. So this PR implements a proper analysis for computing the set of "transient" locals: a local is "transient" if it is guaranteed dead at all `Return` terminators.

Cc `@cjgillot`
2024-08-26 08:44:10 +00:00
..
check_consts Auto merge of #129508 - RalfJung:transient-locals, r=cjgillot 2024-08-26 08:44:10 +00:00
const_eval Rollup merge of #129199 - RalfJung:writes_through_immutable_pointer, r=compiler-errors 2024-08-24 22:14:12 +02:00
interpret Avoid taking reference of &TyKind 2024-08-25 16:02:29 -04:00
util Auto merge of #128812 - nnethercote:shrink-TyKind-FnPtr, r=compiler-errors 2024-08-14 00:56:53 +00:00
errors.rs Rollup merge of #129199 - RalfJung:writes_through_immutable_pointer, r=compiler-errors 2024-08-24 22:14:12 +02:00
lib.rs stabilize is_none_or 2024-08-14 18:28:40 +08:00