// This match is just a canary for future changes to `MemoryKind`, which most likely need
// changes in this function.
match kind {
- MemoryKind::Stack | MemoryKind::Vtable => {},
+ MemoryKind::Stack | MemoryKind::Vtable | MemoryKind::CallerLocation => {},
}
// Set allocation mutability as appropriate. This is used by LLVM to put things into
// read-only memory, and also by Miri when evluating other constants/statics that
let file = Scalar::Ptr(self.tag_static_base_pointer(file_ptr));
let file_len = Scalar::from_uint(filename.as_str().len() as u128, ptr_size);
- let location = self.allocate(loc_layout, MemoryKind::Stack);
+ let location = self.allocate(loc_layout, MemoryKind::CallerLocation);
let file_out = self.mplace_field(location, 0)?;
let file_ptr_out = self.force_ptr(self.mplace_field(file_out, 0)?.ptr)?;
#[derive(Debug, PartialEq, Copy, Clone)]
pub enum MemoryKind<T> {
- /// Error if deallocated except during a stack pop
+ /// Stack memory. Error if deallocated except during a stack pop.
Stack,
- /// Error if ever deallocated
+ /// Memory backing vtables. Error if ever deallocated.
Vtable,
- /// Additional memory kinds a machine wishes to distinguish from the builtin ones
+ /// Memory allocated by `caller_location` intrinsic. Error if ever deallocated.
+ CallerLocation,
+ /// Additional memory kinds a machine wishes to distinguish from the builtin ones.
Machine(T),
}
match self {
MemoryKind::Stack => false,
MemoryKind::Vtable => true,
+ MemoryKind::CallerLocation => true,
MemoryKind::Machine(k) => k.may_leak()
}
}
let extra = match kind {
MemoryKind::Stack => " (stack)".to_owned(),
MemoryKind::Vtable => " (vtable)".to_owned(),
+ MemoryKind::CallerLocation => " (caller_location)".to_owned(),
MemoryKind::Machine(m) => format!(" ({:?})", m),
};
self.dump_alloc_helper(