diff --git a/src/tools/miri/src/borrow_tracker/stacked_borrows/diagnostics.rs b/src/tools/miri/src/borrow_tracker/stacked_borrows/diagnostics.rs index c5eb2113f9f8e..9a7b38b13a3ad 100644 --- a/src/tools/miri/src/borrow_tracker/stacked_borrows/diagnostics.rs +++ b/src/tools/miri/src/borrow_tracker/stacked_borrows/diagnostics.rs @@ -455,23 +455,18 @@ impl<'history, 'ecx, 'mir, 'tcx> DiagnosticCx<'history, 'ecx, 'mir, 'tcx> { if !global.tracked_pointer_tags.contains(&item.tag()) { return; } - let summary = match self.operation { - Operation::Dealloc(_) => None, - Operation::Access(AccessOp { kind, tag, .. }) => Some((tag, kind)), + let cause = match self.operation { + Operation::Dealloc(_) => format!(" due to deallocation"), + Operation::Access(AccessOp { kind, tag, .. }) => + format!(" due to {kind:?} access for {tag:?}"), Operation::Retag(RetagOp { orig_tag, permission, .. }) => { - let kind = match permission - .expect("start_grant should set the current permission before popping a tag") - { - Permission::SharedReadOnly => AccessKind::Read, - Permission::Unique => AccessKind::Write, - Permission::SharedReadWrite | Permission::Disabled => { - panic!("Only SharedReadOnly and Unique retags can pop tags"); - } - }; - Some((orig_tag, kind)) + let permission = permission + .expect("start_grant should set the current permission before popping a tag"); + format!(" due to {permission:?} retag from {orig_tag:?}") } }; - self.machine.emit_diagnostic(NonHaltingDiagnostic::PoppedPointerTag(*item, summary)); + + self.machine.emit_diagnostic(NonHaltingDiagnostic::PoppedPointerTag(*item, cause)); } } diff --git a/src/tools/miri/src/diagnostics.rs b/src/tools/miri/src/diagnostics.rs index bc771ca057f09..074fa032dcc42 100644 --- a/src/tools/miri/src/diagnostics.rs +++ b/src/tools/miri/src/diagnostics.rs @@ -6,7 +6,7 @@ use log::trace; use rustc_span::{source_map::DUMMY_SP, SpanData, Symbol}; use rustc_target::abi::{Align, Size}; -use crate::borrow_tracker::{stacked_borrows::diagnostics::TagHistory, AccessKind}; +use crate::borrow_tracker::stacked_borrows::diagnostics::TagHistory; use crate::*; /// Details of premature program termination. @@ -67,9 +67,8 @@ pub enum NonHaltingDiagnostic { /// /// new_kind is `None` for base tags. CreatedPointerTag(NonZeroU64, Option, Option<(AllocId, AllocRange, ProvenanceExtra)>), - /// This `Item` was popped from the borrow stack, either due to an access with the given tag or - /// a deallocation when the second argument is `None`. - PoppedPointerTag(Item, Option<(ProvenanceExtra, AccessKind)>), + /// This `Item` was popped from the borrow stack. The string explains the reason. + PoppedPointerTag(Item, String), CreatedCallId(CallId), CreatedAlloc(AllocId, Size, Align, MemoryKind), FreedAlloc(AllocId), @@ -399,15 +398,7 @@ impl<'mir, 'tcx> MiriMachine<'mir, 'tcx> { format!( "created tag {tag:?} for {kind} at {alloc_id:?}{range:?} derived from {orig_tag:?}" ), - PoppedPointerTag(item, tag) => - match tag { - None => format!("popped tracked tag for item {item:?} due to deallocation",), - Some((tag, access)) => { - format!( - "popped tracked tag for item {item:?} due to {access:?} access for {tag:?}", - ) - } - }, + PoppedPointerTag(item, cause) => format!("popped tracked tag for item {item:?}{cause}"), CreatedCallId(id) => format!("function call with id {id}"), CreatedAlloc(AllocId(id), size, align, kind) => format!(