4
4
use std:: any:: Any ;
5
5
use std:: borrow:: Cow ;
6
6
use std:: cell:: { Cell , RefCell } ;
7
- use std:: collections:: hash_map:: Entry ;
8
7
use std:: path:: Path ;
9
8
use std:: rc:: Rc ;
10
9
use std:: { fmt, process} ;
@@ -70,32 +69,19 @@ pub struct FrameExtra<'tcx> {
70
69
/// This is used by `MiriMachine::current_span` and `MiriMachine::caller_span`
71
70
pub is_user_relevant : bool ,
72
71
73
- /// We have a cache for the mapping from [`mir::Const`] to resulting [`AllocId`].
74
- /// However, we don't want all frames to always get the same result, so we insert
75
- /// an additional bit of "salt" into the cache key. This salt is fixed per-frame
76
- /// so that within a call, a const will have a stable address.
77
- salt : usize ,
78
-
79
72
/// Data race detector per-frame data.
80
73
pub data_race : Option < data_race:: FrameState > ,
81
74
}
82
75
83
76
impl < ' tcx > std:: fmt:: Debug for FrameExtra < ' tcx > {
84
77
fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
85
78
// Omitting `timing`, it does not support `Debug`.
86
- let FrameExtra {
87
- borrow_tracker,
88
- catch_unwind,
89
- timing : _,
90
- is_user_relevant,
91
- salt,
92
- data_race,
93
- } = self ;
79
+ let FrameExtra { borrow_tracker, catch_unwind, timing : _, is_user_relevant, data_race } =
80
+ self ;
94
81
f. debug_struct ( "FrameData" )
95
82
. field ( "borrow_tracker" , borrow_tracker)
96
83
. field ( "catch_unwind" , catch_unwind)
97
84
. field ( "is_user_relevant" , is_user_relevant)
98
- . field ( "salt" , salt)
99
85
. field ( "data_race" , data_race)
100
86
. finish ( )
101
87
}
@@ -108,7 +94,6 @@ impl VisitProvenance for FrameExtra<'_> {
108
94
borrow_tracker,
109
95
timing : _,
110
96
is_user_relevant : _,
111
- salt : _,
112
97
data_race : _,
113
98
} = self ;
114
99
@@ -578,11 +563,6 @@ pub struct MiriMachine<'tcx> {
578
563
/// diagnostics.
579
564
pub ( crate ) allocation_spans : RefCell < FxHashMap < AllocId , ( Span , Option < Span > ) > > ,
580
565
581
- /// Maps MIR consts to their evaluated result. We combine the const with a "salt" (`usize`)
582
- /// that is fixed per stack frame; this lets us have sometimes different results for the
583
- /// same const while ensuring consistent results within a single call.
584
- const_cache : RefCell < FxHashMap < ( mir:: Const < ' tcx > , usize ) , OpTy < ' tcx > > > ,
585
-
586
566
/// For each allocation, an offset inside that allocation that was deemed aligned even for
587
567
/// symbolic alignment checks. This cannot be stored in `AllocExtra` since it needs to be
588
568
/// tracked for vtables and function allocations as well as regular allocations.
@@ -764,7 +744,6 @@ impl<'tcx> MiriMachine<'tcx> {
764
744
stack_size,
765
745
collect_leak_backtraces : config. collect_leak_backtraces ,
766
746
allocation_spans : RefCell :: new ( FxHashMap :: default ( ) ) ,
767
- const_cache : RefCell :: new ( FxHashMap :: default ( ) ) ,
768
747
symbolic_alignment : RefCell :: new ( FxHashMap :: default ( ) ) ,
769
748
union_data_ranges : FxHashMap :: default ( ) ,
770
749
pthread_mutex_sanity : Cell :: new ( false ) ,
@@ -941,7 +920,6 @@ impl VisitProvenance for MiriMachine<'_> {
941
920
stack_size : _,
942
921
collect_leak_backtraces : _,
943
922
allocation_spans : _,
944
- const_cache : _,
945
923
symbolic_alignment : _,
946
924
union_data_ranges : _,
947
925
pthread_mutex_sanity : _,
@@ -1578,7 +1556,6 @@ impl<'tcx> Machine<'tcx> for MiriMachine<'tcx> {
1578
1556
catch_unwind : None ,
1579
1557
timing,
1580
1558
is_user_relevant : ecx. machine . is_user_relevant ( & frame) ,
1581
- salt : ecx. machine . rng . borrow_mut ( ) . random_range ( 0 ..ADDRS_PER_ANON_GLOBAL ) ,
1582
1559
data_race : ecx
1583
1560
. machine
1584
1561
. data_race
@@ -1737,33 +1714,6 @@ impl<'tcx> Machine<'tcx> for MiriMachine<'tcx> {
1737
1714
interp_ok ( ( ) )
1738
1715
}
1739
1716
1740
- fn eval_mir_constant < F > (
1741
- ecx : & InterpCx < ' tcx , Self > ,
1742
- val : mir:: Const < ' tcx > ,
1743
- span : Span ,
1744
- layout : Option < TyAndLayout < ' tcx > > ,
1745
- eval : F ,
1746
- ) -> InterpResult < ' tcx , OpTy < ' tcx > >
1747
- where
1748
- F : Fn (
1749
- & InterpCx < ' tcx , Self > ,
1750
- mir:: Const < ' tcx > ,
1751
- Span ,
1752
- Option < TyAndLayout < ' tcx > > ,
1753
- ) -> InterpResult < ' tcx , OpTy < ' tcx > > ,
1754
- {
1755
- let frame = ecx. active_thread_stack ( ) . last ( ) . unwrap ( ) ;
1756
- let mut cache = ecx. machine . const_cache . borrow_mut ( ) ;
1757
- match cache. entry ( ( val, frame. extra . salt ) ) {
1758
- Entry :: Vacant ( ve) => {
1759
- let op = eval ( ecx, val, span, layout) ?;
1760
- ve. insert ( op. clone ( ) ) ;
1761
- interp_ok ( op)
1762
- }
1763
- Entry :: Occupied ( oe) => interp_ok ( oe. get ( ) . clone ( ) ) ,
1764
- }
1765
- }
1766
-
1767
1717
fn get_global_alloc_salt (
1768
1718
ecx : & InterpCx < ' tcx , Self > ,
1769
1719
instance : Option < ty:: Instance < ' tcx > > ,
0 commit comments