@@ -24,12 +24,46 @@ 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 seem 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
+ if !self
52
+ . map
53
+ . get ( borrowed)
54
+ . map_or ( their_borrowers. is_empty ( ) , |our_borrowers| {
55
+ their_borrowers. iter ( ) . eq ( our_borrowers. iter ( ) )
56
+ } )
57
+ {
58
+ return false ;
59
+ }
60
+ }
61
+ true
62
+ }
63
+ }
64
+
65
+ impl Eq for PossibleBorrowerState { }
66
+
33
67
impl PossibleBorrowerState {
34
68
fn new ( domain_size : usize ) -> Self {
35
69
Self {
@@ -42,7 +76,7 @@ impl PossibleBorrowerState {
42
76
fn add ( & mut self , borrowed : Local , borrower : Local ) {
43
77
self . map
44
78
. entry ( borrowed)
45
- . or_insert ( BitSet :: new_empty ( self . domain_size ) )
79
+ . or_insert_with ( || HybridBitSet :: new_empty ( self . domain_size ) )
46
80
. insert ( borrower) ;
47
81
}
48
82
}
@@ -64,7 +98,7 @@ impl JoinSemiLattice for PossibleBorrowerState {
64
98
changed |= self
65
99
. map
66
100
. entry ( borrowed)
67
- . or_insert ( BitSet :: new_empty ( self . domain_size ) )
101
+ . or_insert_with ( || HybridBitSet :: new_empty ( self . domain_size ) )
68
102
. union ( borrowers) ;
69
103
}
70
104
}
0 commit comments