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:
commit
1010099fe3
@ -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()
|
||||||
|
@ -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();
|
||||||
|
@ -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);
|
||||||
|
@ -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();
|
||||||
|
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user