use std::cell::RefCell;
use std::fmt;
+use std::num::NonZeroU64;
use log::trace;
/// Miri specific diagnostics
pub enum NonHaltingDiagnostic {
+ CreatedPointerTag(NonZeroU64),
PoppedPointerTag(Item),
CreatedCallId(CallId),
CreatedAlloc(AllocId),
for e in diagnostics.drain(..) {
use NonHaltingDiagnostic::*;
let msg = match e {
+ CreatedPointerTag(tag) =>
+ format!("created tag {:?}", tag),
PoppedPointerTag(item) =>
format!("popped tracked tag for item {:?}", item),
CreatedCallId(id) =>
fn new_ptr(&mut self) -> PtrId {
let id = self.next_ptr_id;
+ if Some(id) == self.tracked_pointer_tag {
+ register_diagnostic(NonHaltingDiagnostic::CreatedPointerTag(id));
+ }
self.next_ptr_id = NonZeroU64::new(id.get() + 1).unwrap();
id
}