Skip to content

Commit 9032733

Browse files
committed
canonicalize alloc ID for ptr-to-int cast
1 parent 8ef303c commit 9032733

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/intptrcast.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::collections::{hash_map::Entry, HashMap};
55
use rand::Rng;
66

77
use rustc::ty::layout::HasDataLayout;
8-
use rustc_mir::interpret::{AllocCheck, AllocId, InterpResult, Memory, Pointer, PointerArithmetic};
8+
use rustc_mir::interpret::{AllocCheck, AllocId, InterpResult, Memory, Machine, Pointer, PointerArithmetic};
99
use rustc_target::abi::Size;
1010

1111
use crate::{Evaluator, Tag, STACK_ADDR};
@@ -80,12 +80,13 @@ impl<'mir, 'tcx> GlobalState {
8080
) -> InterpResult<'tcx, u64> {
8181
let mut global_state = memory.extra.intptrcast.borrow_mut();
8282
let global_state = &mut *global_state;
83+
let id = Evaluator::canonical_alloc_id(memory, ptr.alloc_id);
8384

8485
// There is nothing wrong with a raw pointer being cast to an integer only after
8586
// it became dangling. Hence `MaybeDead`.
86-
let (size, align) = memory.get_size_and_align(ptr.alloc_id, AllocCheck::MaybeDead)?;
87+
let (size, align) = memory.get_size_and_align(id, AllocCheck::MaybeDead)?;
8788

88-
let base_addr = match global_state.base_addr.entry(ptr.alloc_id) {
89+
let base_addr = match global_state.base_addr.entry(id) {
8990
Entry::Occupied(entry) => *entry.get(),
9091
Entry::Vacant(entry) => {
9192
// This allocation does not have a base address yet, pick one.
@@ -102,7 +103,7 @@ impl<'mir, 'tcx> GlobalState {
102103
trace!(
103104
"Assigning base address {:#x} to allocation {:?} (slack: {}, align: {})",
104105
base_addr,
105-
ptr.alloc_id,
106+
id,
106107
slack,
107108
align.bytes(),
108109
);
@@ -112,7 +113,7 @@ impl<'mir, 'tcx> GlobalState {
112113
global_state.next_base_addr = base_addr.checked_add(max(size.bytes(), 1)).unwrap();
113114
// Given that `next_base_addr` increases in each allocation, pushing the
114115
// corresponding tuple keeps `int_to_ptr_map` sorted
115-
global_state.int_to_ptr_map.push((base_addr, ptr.alloc_id));
116+
global_state.int_to_ptr_map.push((base_addr, id));
116117

117118
base_addr
118119
}

0 commit comments

Comments
 (0)