Skip to content

Commit 6d033a9

Browse files
committed
Use HybridBitSets in possible_borrower
1 parent a85e480 commit 6d033a9

File tree

2 files changed

+53
-4
lines changed

2 files changed

+53
-4
lines changed

clippy_utils/src/mir/possible_borrower.rs

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,46 @@ struct PossibleBorrowerAnalysis<'b, 'tcx> {
2424
possible_origin: FxHashMap<mir::Local, HybridBitSet<mir::Local>>,
2525
}
2626

27-
#[derive(Clone, Debug, Eq, PartialEq)]
27+
#[derive(Clone, Debug)]
2828
struct PossibleBorrowerState {
29-
map: FxIndexMap<Local, BitSet<Local>>,
29+
map: FxIndexMap<Local, HybridBitSet<Local>>,
3030
domain_size: usize,
3131
}
3232

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+
3367
impl PossibleBorrowerState {
3468
fn new(domain_size: usize) -> Self {
3569
Self {
@@ -42,7 +76,7 @@ impl PossibleBorrowerState {
4276
fn add(&mut self, borrowed: Local, borrower: Local) {
4377
self.map
4478
.entry(borrowed)
45-
.or_insert(BitSet::new_empty(self.domain_size))
79+
.or_insert_with(|| HybridBitSet::new_empty(self.domain_size))
4680
.insert(borrower);
4781
}
4882
}
@@ -64,7 +98,7 @@ impl JoinSemiLattice for PossibleBorrowerState {
6498
changed |= self
6599
.map
66100
.entry(borrowed)
67-
.or_insert(BitSet::new_empty(self.domain_size))
101+
.or_insert_with(|| HybridBitSet::new_empty(self.domain_size))
68102
.union(borrowers);
69103
}
70104
}

tests/ui/possible_borrower.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
fn meow(_s: impl AsRef<str>) {}
2+
3+
macro_rules! quad {
4+
($x:stmt) => {
5+
$x
6+
$x
7+
$x
8+
$x
9+
};
10+
}
11+
12+
fn main() {
13+
let i = 0;
14+
quad!(quad!(quad!(quad!(quad!(meow(format!("abc{i}")))))));
15+
}

0 commit comments

Comments
 (0)