From a812bea935350b4346b0444ca97a13454f808f79 Mon Sep 17 00:00:00 2001 From: Christian Poveda Date: Thu, 9 Jan 2020 09:31:55 -0500 Subject: [PATCH 1/2] add MemoryExtra to find_foreign_static --- src/librustc_mir/const_eval/machine.rs | 1 + src/librustc_mir/interpret/machine.rs | 1 + src/librustc_mir/interpret/memory.rs | 2 +- src/librustc_mir/transform/const_prop.rs | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/librustc_mir/const_eval/machine.rs b/src/librustc_mir/const_eval/machine.rs index 1aed91baba6a8..aaac5c09fd4c8 100644 --- a/src/librustc_mir/const_eval/machine.rs +++ b/src/librustc_mir/const_eval/machine.rs @@ -297,6 +297,7 @@ impl<'mir, 'tcx> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter<'mir, fn find_foreign_static( _tcx: TyCtxt<'tcx>, _def_id: DefId, + _memory_extra: &MemoryExtra, ) -> InterpResult<'tcx, Cow<'tcx, Allocation>> { throw_unsup!(ReadForeignStatic) } diff --git a/src/librustc_mir/interpret/machine.rs b/src/librustc_mir/interpret/machine.rs index 3309e9b9b622a..2ddb5dabb2b2a 100644 --- a/src/librustc_mir/interpret/machine.rs +++ b/src/librustc_mir/interpret/machine.rs @@ -185,6 +185,7 @@ pub trait Machine<'mir, 'tcx>: Sized { fn find_foreign_static( tcx: TyCtxt<'tcx>, def_id: DefId, + memory_extra: &Self::MemoryExtra, ) -> InterpResult<'tcx, Cow<'tcx, Allocation>>; /// Called for all binary operations where the LHS has pointer type. diff --git a/src/librustc_mir/interpret/memory.rs b/src/librustc_mir/interpret/memory.rs index 0bcdf9ae3c1f2..36d84659ab8dc 100644 --- a/src/librustc_mir/interpret/memory.rs +++ b/src/librustc_mir/interpret/memory.rs @@ -435,7 +435,7 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> { // We got a "lazy" static that has not been computed yet. if tcx.is_foreign_item(def_id) { trace!("static_alloc: foreign item {:?}", def_id); - M::find_foreign_static(tcx.tcx, def_id)? + M::find_foreign_static(tcx.tcx, def_id, memory_extra)? } else { trace!("static_alloc: Need to compute {:?}", def_id); let instance = Instance::mono(tcx.tcx, def_id); diff --git a/src/librustc_mir/transform/const_prop.rs b/src/librustc_mir/transform/const_prop.rs index d645f6cf183b4..93abdb4bf2b5e 100644 --- a/src/librustc_mir/transform/const_prop.rs +++ b/src/librustc_mir/transform/const_prop.rs @@ -224,6 +224,7 @@ impl<'mir, 'tcx> interpret::Machine<'mir, 'tcx> for ConstPropMachine { fn find_foreign_static( _tcx: TyCtxt<'tcx>, _def_id: DefId, + _memory_extra: &Self::MemoryExtra, ) -> InterpResult<'tcx, Cow<'tcx, Allocation>> { throw_unsup!(ReadForeignStatic) } From 76688887e02a214776ea07849175b09f3ea2b11d Mon Sep 17 00:00:00 2001 From: Christian Poveda Date: Wed, 15 Jan 2020 15:14:32 -0500 Subject: [PATCH 2/2] add `AllocId` as parameter --- src/librustc_mir/const_eval/machine.rs | 1 + src/librustc_mir/interpret/machine.rs | 3 ++- src/librustc_mir/interpret/memory.rs | 2 +- src/librustc_mir/transform/const_prop.rs | 1 + 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/librustc_mir/const_eval/machine.rs b/src/librustc_mir/const_eval/machine.rs index aaac5c09fd4c8..cafb0c6237502 100644 --- a/src/librustc_mir/const_eval/machine.rs +++ b/src/librustc_mir/const_eval/machine.rs @@ -297,6 +297,7 @@ impl<'mir, 'tcx> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter<'mir, fn find_foreign_static( _tcx: TyCtxt<'tcx>, _def_id: DefId, + _id: AllocId, _memory_extra: &MemoryExtra, ) -> InterpResult<'tcx, Cow<'tcx, Allocation>> { throw_unsup!(ReadForeignStatic) diff --git a/src/librustc_mir/interpret/machine.rs b/src/librustc_mir/interpret/machine.rs index 2ddb5dabb2b2a..14822156ca20b 100644 --- a/src/librustc_mir/interpret/machine.rs +++ b/src/librustc_mir/interpret/machine.rs @@ -185,8 +185,9 @@ pub trait Machine<'mir, 'tcx>: Sized { fn find_foreign_static( tcx: TyCtxt<'tcx>, def_id: DefId, + id: AllocId, memory_extra: &Self::MemoryExtra, - ) -> InterpResult<'tcx, Cow<'tcx, Allocation>>; + ) -> InterpResult<'tcx, Cow<'tcx, Allocation>>; /// Called for all binary operations where the LHS has pointer type. /// diff --git a/src/librustc_mir/interpret/memory.rs b/src/librustc_mir/interpret/memory.rs index 36d84659ab8dc..4f0c5940fcccc 100644 --- a/src/librustc_mir/interpret/memory.rs +++ b/src/librustc_mir/interpret/memory.rs @@ -435,7 +435,7 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> { // We got a "lazy" static that has not been computed yet. if tcx.is_foreign_item(def_id) { trace!("static_alloc: foreign item {:?}", def_id); - M::find_foreign_static(tcx.tcx, def_id, memory_extra)? + return Ok(M::find_foreign_static(tcx.tcx, def_id, id, memory_extra)?); } else { trace!("static_alloc: Need to compute {:?}", def_id); let instance = Instance::mono(tcx.tcx, def_id); diff --git a/src/librustc_mir/transform/const_prop.rs b/src/librustc_mir/transform/const_prop.rs index 93abdb4bf2b5e..28ffe32948513 100644 --- a/src/librustc_mir/transform/const_prop.rs +++ b/src/librustc_mir/transform/const_prop.rs @@ -224,6 +224,7 @@ impl<'mir, 'tcx> interpret::Machine<'mir, 'tcx> for ConstPropMachine { fn find_foreign_static( _tcx: TyCtxt<'tcx>, _def_id: DefId, + _id: AllocId, _memory_extra: &Self::MemoryExtra, ) -> InterpResult<'tcx, Cow<'tcx, Allocation>> { throw_unsup!(ReadForeignStatic)