canonicalize alloc ID before calling tag_static_base_pointer
This commit is contained in:
parent
5da393970d
commit
01d9329347
2 changed files with 4 additions and 1 deletions
|
@ -253,6 +253,8 @@ pub trait Machine<'mir, 'tcx>: Sized {
|
||||||
/// Return the "base" tag for the given *static* allocation: the one that is used for direct
|
/// Return the "base" tag for the given *static* allocation: the one that is used for direct
|
||||||
/// accesses to this static/const/fn allocation. If `id` is not a static allocation,
|
/// accesses to this static/const/fn allocation. If `id` is not a static allocation,
|
||||||
/// this will return an unusable tag (i.e., accesses will be UB)!
|
/// this will return an unusable tag (i.e., accesses will be UB)!
|
||||||
|
///
|
||||||
|
/// Expects `id` to be already canonical, if needed.
|
||||||
fn tag_static_base_pointer(memory_extra: &Self::MemoryExtra, id: AllocId) -> Self::PointerTag;
|
fn tag_static_base_pointer(memory_extra: &Self::MemoryExtra, id: AllocId) -> Self::PointerTag;
|
||||||
|
|
||||||
/// Executes a retagging operation
|
/// Executes a retagging operation
|
||||||
|
|
|
@ -150,7 +150,8 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> {
|
||||||
/// through a pointer that was created by the program.
|
/// through a pointer that was created by the program.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn tag_static_base_pointer(&self, ptr: Pointer) -> Pointer<M::PointerTag> {
|
pub fn tag_static_base_pointer(&self, ptr: Pointer) -> Pointer<M::PointerTag> {
|
||||||
ptr.with_tag(M::tag_static_base_pointer(&self.extra, ptr.alloc_id))
|
let id = M::canonical_alloc_id(self, ptr.alloc_id);
|
||||||
|
ptr.with_tag(M::tag_static_base_pointer(&self.extra, id))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create_fn_alloc(
|
pub fn create_fn_alloc(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue