diff options
| author | nils <48135649+Nilstrieb@users.noreply.github.com> | 2023-03-21 13:00:25 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-21 13:00:25 +0100 |
| commit | 925fbcdf8a1646d5318e82c6d3ffeda41a10a110 (patch) | |
| tree | 6253002cc0f9d198fe8747567aee1dd07636379b /compiler/rustc_middle/src | |
| parent | b2e48edded0955ed95c1824e8ec7ab48694c7f16 (diff) | |
| parent | 5058cc8e62f1557f684d90ff0dde7cedc6c5d529 (diff) | |
| download | rust-925fbcdf8a1646d5318e82c6d3ffeda41a10a110.tar.gz rust-925fbcdf8a1646d5318e82c6d3ffeda41a10a110.zip | |
Rollup merge of #109408 - RalfJung:retags, r=compiler-errors
not *all* retags might be explicit in Runtime MIR In https://github.com/rust-lang/rust/pull/105317 I made Miri treat `Rvalue::Ref/AddrOf` as implicit retagging sites. This updates the MIR docs accordingly. For `Rvalue::Ref` I think this makes a lot more sense: creating a new reference is their entire point, so we can avoid bloating the MIR with retags. Also this seems to be the best way to handle cases like `*ptr = &[mut] ...`, where doing a retag is somewhat questionable since maybe `*ptr` points to another place now? For `Rvalue::AddrOf`, Stacked Borrows needs this because even raw ptrs need some retagging, but Tree Borrows doesn't do ant retagging here and I hope we'll end up with a model where raw pointers don't get retagged.
Diffstat (limited to 'compiler/rustc_middle/src')
| -rw-r--r-- | compiler/rustc_middle/src/mir/syntax.rs | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler/rustc_middle/src/mir/syntax.rs b/compiler/rustc_middle/src/mir/syntax.rs index a702a6b9ee1..3a893cdabf6 100644 --- a/compiler/rustc_middle/src/mir/syntax.rs +++ b/compiler/rustc_middle/src/mir/syntax.rs @@ -78,7 +78,8 @@ pub enum MirPhase { /// MIR, this is UB. /// - Retags: If `-Zmir-emit-retag` is enabled, analysis MIR has "implicit" retags in the same way /// that Rust itself has them. Where exactly these are is generally subject to change, and so we - /// don't document this here. Runtime MIR has all retags explicit. + /// don't document this here. Runtime MIR has most retags explicit (though implicit retags + /// can still occur at `Rvalue::{Ref,AddrOf}`). /// - Generator bodies: In analysis MIR, locals may actually be behind a pointer that user code has /// access to. This occurs in generator bodies. Such locals do not behave like other locals, /// because they eg may be aliased in surprising ways. Runtime MIR has no such special locals - |
