@@ -7,7 +7,7 @@ use std::hash::Hash;
77
88use rustc:: mir;
99use rustc:: ty:: { self , Ty } ;
10- use rustc_span:: Span ;
10+ use rustc_span:: { def_id :: DefId , Span } ;
1111
1212use super :: {
1313 AllocId , Allocation , AllocationExtra , Frame , ImmTy , InterpCx , InterpResult , Memory , MemoryKind ,
@@ -79,7 +79,7 @@ pub trait AllocMap<K: Hash + Eq, V> {
7979/// and some use case dependent behaviour can instead be applied.
8080pub trait Machine < ' mir , ' tcx > : Sized {
8181 /// Additional memory kinds a machine wishes to distinguish from the builtin ones
82- type MemoryKinds : :: std:: fmt:: Debug + MayLeak + Eq + ' static ;
82+ type MemoryKind : :: std:: fmt:: Debug + MayLeak + Eq + ' static ;
8383
8484 /// Tag tracked alongside every pointer. This is used to implement "Stacked Borrows"
8585 /// <https://www.ralfj.de/blog/2018/08/07/stacked-borrows.html>.
@@ -105,16 +105,17 @@ pub trait Machine<'mir, 'tcx>: Sized {
105105 /// Memory's allocation map
106106 type MemoryMap : AllocMap <
107107 AllocId ,
108- ( MemoryKind < Self :: MemoryKinds > , Allocation < Self :: PointerTag , Self :: AllocExtra > ) ,
108+ ( MemoryKind < Self :: MemoryKind > , Allocation < Self :: PointerTag , Self :: AllocExtra > ) ,
109109 > + Default
110110 + Clone ;
111111
112- /// The memory kind to use for copied statics -- or None if statics should not be mutated
113- /// and thus any such attempt will cause a `ModifiedStatic` error to be raised.
112+ /// The memory kind to use for copied global memory (held in `tcx`) --
113+ /// or None if such memory should not be mutated and thus any such attempt will cause
114+ /// a `ModifiedStatic` error to be raised.
114115 /// Statics are copied under two circumstances: When they are mutated, and when
115- /// `tag_allocation` or `find_foreign_static` (see below) returns an owned allocation
116+ /// `tag_allocation` (see below) returns an owned allocation
116117 /// that is added to the memory so that the work is not done twice.
117- const STATIC_KIND : Option < Self :: MemoryKinds > ;
118+ const GLOBAL_KIND : Option < Self :: MemoryKind > ;
118119
119120 /// Whether memory accesses should be alignment-checked.
120121 const CHECK_ALIGN : bool ;
@@ -207,11 +208,13 @@ pub trait Machine<'mir, 'tcx>: Sized {
207208 Ok ( ( ) )
208209 }
209210
210- /// Called before a `Static` value is accessed.
211+ /// Called before a global allocation is accessed.
211212 #[ inline]
212- fn before_access_static (
213+ fn before_access_global (
213214 _memory_extra : & Self :: MemoryExtra ,
214215 _allocation : & Allocation ,
216+ _def_id : Option < DefId > ,
217+ _is_write : bool ,
215218 ) -> InterpResult < ' tcx > {
216219 Ok ( ( ) )
217220 }
@@ -231,10 +234,10 @@ pub trait Machine<'mir, 'tcx>: Sized {
231234 /// it contains (in relocations) tagged. The way we construct allocations is
232235 /// to always first construct it without extra and then add the extra.
233236 /// This keeps uniform code paths for handling both allocations created by CTFE
234- /// for statics , and allocations created by Miri during evaluation.
237+ /// for globals , and allocations created by Miri during evaluation.
235238 ///
236239 /// `kind` is the kind of the allocation being tagged; it can be `None` when
237- /// it's a static and `STATIC_KIND ` is `None`.
240+ /// it's a global and `GLOBAL_KIND ` is `None`.
238241 ///
239242 /// This should avoid copying if no work has to be done! If this returns an owned
240243 /// allocation (because a copy had to be done to add tags or metadata), machine memory will
@@ -243,20 +246,20 @@ pub trait Machine<'mir, 'tcx>: Sized {
243246 ///
244247 /// Also return the "base" tag to use for this allocation: the one that is used for direct
245248 /// accesses to this allocation. If `kind == STATIC_KIND`, this tag must be consistent
246- /// with `tag_static_base_pointer `.
249+ /// with `tag_global_base_pointer `.
247250 fn init_allocation_extra < ' b > (
248251 memory_extra : & Self :: MemoryExtra ,
249252 id : AllocId ,
250253 alloc : Cow < ' b , Allocation > ,
251- kind : Option < MemoryKind < Self :: MemoryKinds > > ,
254+ kind : Option < MemoryKind < Self :: MemoryKind > > ,
252255 ) -> ( Cow < ' b , Allocation < Self :: PointerTag , Self :: AllocExtra > > , Self :: PointerTag ) ;
253256
254- /// Return the "base" tag for the given *static * allocation: the one that is used for direct
255- /// accesses to this static/const/fn allocation. If `id` is not a static allocation,
257+ /// Return the "base" tag for the given *global * allocation: the one that is used for direct
258+ /// accesses to this static/const/fn allocation. If `id` is not a global allocation,
256259 /// this will return an unusable tag (i.e., accesses will be UB)!
257260 ///
258261 /// Expects `id` to be already canonical, if needed.
259- fn tag_static_base_pointer ( memory_extra : & Self :: MemoryExtra , id : AllocId ) -> Self :: PointerTag ;
262+ fn tag_global_base_pointer ( memory_extra : & Self :: MemoryExtra , id : AllocId ) -> Self :: PointerTag ;
260263
261264 /// Executes a retagging operation
262265 #[ inline]
0 commit comments