@@ -24,12 +24,47 @@ struct PossibleBorrowerAnalysis<'b, 'tcx> {
24
24
possible_origin : FxHashMap < mir:: Local , HybridBitSet < mir:: Local > > ,
25
25
}
26
26
27
- #[ derive( Clone , Debug , Eq , PartialEq ) ]
27
+ #[ derive( Clone , Debug ) ]
28
28
struct PossibleBorrowerState {
29
- map : FxIndexMap < Local , BitSet < Local > > ,
29
+ map : FxIndexMap < Local , HybridBitSet < Local > > ,
30
30
domain_size : usize ,
31
31
}
32
32
33
+ // `PossibleBorrowerState`'s `PartialEq` implementation doesn't appear to be used currently.
34
+ impl PartialEq for PossibleBorrowerState {
35
+ fn eq ( & self , other : & Self ) -> bool {
36
+ if self . domain_size != other. domain_size {
37
+ return false ;
38
+ }
39
+ for ( borrowed, our_borrowers) in self . map . iter ( ) {
40
+ if !other
41
+ . map
42
+ . get ( borrowed)
43
+ . map_or ( our_borrowers. is_empty ( ) , |their_borrowers| {
44
+ our_borrowers. iter ( ) . eq ( their_borrowers. iter ( ) )
45
+ } )
46
+ {
47
+ return false ;
48
+ }
49
+ }
50
+ for ( borrowed, their_borrowers) in other. map . iter ( ) {
51
+ assert ! ( !their_borrowers. is_empty( ) ) ;
52
+ if !self
53
+ . map
54
+ . get ( borrowed)
55
+ . map_or ( their_borrowers. is_empty ( ) , |our_borrowers| {
56
+ their_borrowers. iter ( ) . eq ( our_borrowers. iter ( ) )
57
+ } )
58
+ {
59
+ return false ;
60
+ }
61
+ }
62
+ true
63
+ }
64
+ }
65
+
66
+ impl Eq for PossibleBorrowerState { }
67
+
33
68
impl PossibleBorrowerState {
34
69
fn new ( domain_size : usize ) -> Self {
35
70
Self {
@@ -42,7 +77,7 @@ impl PossibleBorrowerState {
42
77
fn add ( & mut self , borrowed : Local , borrower : Local ) {
43
78
self . map
44
79
. entry ( borrowed)
45
- . or_insert ( BitSet :: new_empty ( self . domain_size ) )
80
+ . or_insert_with ( || HybridBitSet :: new_empty ( self . domain_size ) )
46
81
. insert ( borrower) ;
47
82
}
48
83
}
@@ -64,7 +99,7 @@ impl JoinSemiLattice for PossibleBorrowerState {
64
99
changed |= self
65
100
. map
66
101
. entry ( borrowed)
67
- . or_insert ( BitSet :: new_empty ( self . domain_size ) )
102
+ . or_insert_with ( || HybridBitSet :: new_empty ( self . domain_size ) )
68
103
. union ( borrowers) ;
69
104
}
70
105
}
0 commit comments