Auto merge of #2746 - RalfJung:retag-diagnostic, r=RalfJung

tweaks to retag diagnostic handling

Salvaged from https://github.com/rust-lang/rust/pull/106212
This commit is contained in:
bors 2023-01-02 15:06:40 +00:00
commit 1010099fe3
5 changed files with 9 additions and 13 deletions

View File

@ -88,11 +88,7 @@ impl fmt::Display for InvalidationCause {
match self { match self {
InvalidationCause::Access(kind) => write!(f, "{kind}"), InvalidationCause::Access(kind) => write!(f, "{kind}"),
InvalidationCause::Retag(perm, kind) => InvalidationCause::Retag(perm, kind) =>
if *kind == RetagCause::FnEntry { write!(f, "{perm:?} {retag}", retag = kind.summary()),
write!(f, "{perm:?} FnEntry retag")
} else {
write!(f, "{perm:?} retag")
},
} }
} }
} }
@ -193,7 +189,7 @@ struct RetagOp {
#[derive(Debug, Clone, Copy, PartialEq)] #[derive(Debug, Clone, Copy, PartialEq)]
pub enum RetagCause { pub enum RetagCause {
Normal, Normal,
FnReturn, FnReturnPlace,
FnEntry, FnEntry,
TwoPhase, TwoPhase,
} }
@ -495,8 +491,8 @@ impl RetagCause {
fn summary(&self) -> String { fn summary(&self) -> String {
match self { match self {
RetagCause::Normal => "retag", RetagCause::Normal => "retag",
RetagCause::FnEntry => "FnEntry retag", RetagCause::FnEntry => "function-entry retag",
RetagCause::FnReturn => "FnReturn retag", RetagCause::FnReturnPlace => "return-place retag",
RetagCause::TwoPhase => "two-phase retag", RetagCause::TwoPhase => "two-phase retag",
} }
.to_string() .to_string()

View File

@ -998,7 +998,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> {
access: Some(AccessKind::Write), access: Some(AccessKind::Write),
protector: Some(ProtectorKind::StrongProtector), protector: Some(ProtectorKind::StrongProtector),
}; };
let val = this.sb_retag_reference(&val, new_perm, RetagCause::FnReturn)?; let val = this.sb_retag_reference(&val, new_perm, RetagCause::FnReturnPlace)?;
// And use reborrowed pointer for return place. // And use reborrowed pointer for return place.
let return_place = this.ref_to_mplace(&val)?; let return_place = this.ref_to_mplace(&val)?;
this.frame_mut().return_place = return_place.into(); this.frame_mut().return_place = return_place.into();

View File

@ -5,7 +5,7 @@ LL | pub fn safe(_x: &mut i32, _y: &i32) {}
| ^^ | ^^
| | | |
| trying to retag from <TAG> for SharedReadOnly permission at ALLOC[0x0], but that tag does not exist in the borrow stack for this location | trying to retag from <TAG> for SharedReadOnly permission at ALLOC[0x0], but that tag does not exist in the borrow stack for this location
| this error occurs as part of FnEntry retag at ALLOC[0x0..0x4] | this error occurs as part of function-entry retag at ALLOC[0x0..0x4]
| |
= help: this indicates a potential bug in the program: it performed an invalid operation, but the Stacked Borrows rules it violated are still experimental = help: this indicates a potential bug in the program: it performed an invalid operation, but the Stacked Borrows rules it violated are still experimental
= help: see https://github.com/rust-lang/unsafe-code-guidelines/blob/master/wip/stacked-borrows.md for further information = help: see https://github.com/rust-lang/unsafe-code-guidelines/blob/master/wip/stacked-borrows.md for further information
@ -14,7 +14,7 @@ help: <TAG> was created by a SharedReadOnly retag at offsets [0x0..0x4]
| |
LL | safe_raw(xraw, xshr); LL | safe_raw(xraw, xshr);
| ^^^^ | ^^^^
help: <TAG> was later invalidated at offsets [0x0..0x4] by a Unique FnEntry retag inside this call help: <TAG> was later invalidated at offsets [0x0..0x4] by a Unique function-entry retag inside this call
--> $DIR/aliasing_mut3.rs:LL:CC --> $DIR/aliasing_mut3.rs:LL:CC
| |
LL | safe_raw(xraw, xshr); LL | safe_raw(xraw, xshr);

View File

@ -14,7 +14,7 @@ help: <TAG> was created by a SharedReadWrite retag at offsets [0x0..0x4]
| |
LL | let z = &mut x as *mut i32; LL | let z = &mut x as *mut i32;
| ^^^^^^ | ^^^^^^
help: <TAG> was later invalidated at offsets [0x0..0x4] by a Unique FnEntry retag inside this call help: <TAG> was later invalidated at offsets [0x0..0x4] by a Unique function-entry retag inside this call
--> $DIR/fnentry_invalidation.rs:LL:CC --> $DIR/fnentry_invalidation.rs:LL:CC
| |
LL | x.do_bad(); LL | x.do_bad();

View File

@ -14,7 +14,7 @@ help: <TAG> was created by a SharedReadOnly retag at offsets [0x0..0xc]
| |
LL | let ptr = t.sli.as_ptr(); LL | let ptr = t.sli.as_ptr();
| ^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^
help: <TAG> was later invalidated at offsets [0x0..0xc] by a Unique FnEntry retag inside this call help: <TAG> was later invalidated at offsets [0x0..0xc] by a Unique function-entry retag inside this call
--> $DIR/fnentry_invalidation2.rs:LL:CC --> $DIR/fnentry_invalidation2.rs:LL:CC
| |
LL | let _ = t.sli.as_mut_ptr(); LL | let _ = t.sli.as_mut_ptr();