Update to rustc changes
This commit is contained in:
parent
8a6396ffa5
commit
3fdab9c446
3 changed files with 6 additions and 7 deletions
|
|
@ -427,7 +427,7 @@ impl<'mir, 'tcx> Machine<'mir, 'tcx> for Evaluator<'mir, 'tcx> {
|
|||
fn canonical_alloc_id(mem: &Memory<'mir, 'tcx, Self>, id: AllocId) -> AllocId {
|
||||
let tcx = mem.tcx;
|
||||
// Figure out if this is an extern static, and if yes, which one.
|
||||
let def_id = match tcx.alloc_map.lock().get(id) {
|
||||
let def_id = match tcx.get_global_alloc(id) {
|
||||
Some(GlobalAlloc::Static(def_id)) if tcx.is_foreign_item(def_id) => def_id,
|
||||
_ => {
|
||||
// No need to canonicalize anything.
|
||||
|
|
@ -494,7 +494,7 @@ impl<'mir, 'tcx> Machine<'mir, 'tcx> for Evaluator<'mir, 'tcx> {
|
|||
if Some(id) == memory_extra.tracked_alloc_id {
|
||||
register_diagnostic(NonHaltingDiagnostic::FreedAlloc(id));
|
||||
}
|
||||
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -428,7 +428,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
|
|||
match *val {
|
||||
mir::interpret::ConstValue::Scalar(Scalar::Ptr(ref mut ptr)) => {
|
||||
let alloc_id = ptr.alloc_id;
|
||||
let alloc = this.tcx.alloc_map.lock().get(alloc_id);
|
||||
let alloc = this.tcx.get_global_alloc(alloc_id);
|
||||
let tcx = this.tcx;
|
||||
let is_thread_local = |def_id| {
|
||||
tcx.codegen_fn_attrs(def_id).flags.contains(CodegenFnAttrFlags::THREAD_LOCAL)
|
||||
|
|
@ -489,13 +489,12 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
|
|||
})?;
|
||||
let id = raw_const.alloc_id;
|
||||
// Extract the allocation from the query result.
|
||||
let mut alloc_map = tcx.alloc_map.lock();
|
||||
let allocation = alloc_map.unwrap_memory(id);
|
||||
let allocation = tcx.global_alloc(id).unwrap_memory();
|
||||
// Create a new allocation id for the same allocation in this hacky
|
||||
// way. Internally, `alloc_map` deduplicates allocations, but this
|
||||
// is fine because Miri will make a copy before a first mutable
|
||||
// access.
|
||||
let new_alloc_id = alloc_map.create_memory_alloc(allocation);
|
||||
let new_alloc_id = tcx.create_memory_alloc(allocation);
|
||||
this.machine.threads.set_thread_local_alloc_id(def_id, new_alloc_id);
|
||||
Ok(new_alloc_id)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,5 +6,5 @@ fn main() {
|
|||
struct S {
|
||||
x: * mut dyn T
|
||||
}
|
||||
dbg!(S { x: unsafe { std::mem::transmute((0usize, 0usize)) } }); //~ ERROR: encountered dangling vtable pointer
|
||||
dbg!(S { x: unsafe { std::mem::transmute((0usize, 0usize)) } }); //~ ERROR: encountered dangling vtable pointer in wide pointer
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue