diff --git a/cranelift/entity/src/map.rs b/cranelift/entity/src/map.rs index 6e04b96841..67cdc11004 100644 --- a/cranelift/entity/src/map.rs +++ b/cranelift/entity/src/map.rs @@ -129,6 +129,13 @@ where pub fn resize(&mut self, n: usize) { self.elems.resize(n, self.default.clone()); } + + /// Slow path for `index_mut` which resizes the vector. + #[cold] + fn resize_for_index_mut(&mut self, i: usize) -> &mut V { + self.elems.resize(i + 1, self.default.clone()); + &mut self.elems[i] + } } impl Default for SecondaryMap @@ -169,7 +176,7 @@ where fn index_mut(&mut self, k: K) -> &mut V { let i = k.index(); if i >= self.elems.len() { - self.elems.resize(i + 1, self.default.clone()); + return self.resize_for_index_mut(i); } &mut self.elems[i] }