diff options
| author | Nicholas Nethercote <nnethercote@mozilla.com> | 2016-10-03 14:31:30 +1100 |
|---|---|---|
| committer | Nicholas Nethercote <nnethercote@mozilla.com> | 2016-10-03 14:31:30 +1100 |
| commit | 607d2973da7bd5895a5e84a65ba5174527bee904 (patch) | |
| tree | 289a5b9f4da69dc4d6f2d318a0cfef871bdf78bf /src/libstd | |
| parent | 6a9b5e4c51e995120c9739cacb305826a35ac496 (diff) | |
| download | rust-607d2973da7bd5895a5e84a65ba5174527bee904.tar.gz rust-607d2973da7bd5895a5e84a65ba5174527bee904.zip | |
Avoid overflow check in `HashMap::reserve`'s fast path.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/collections/hash/map.rs | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/libstd/collections/hash/map.rs b/src/libstd/collections/hash/map.rs index 5fdc6056c68..e8ca2977241 100644 --- a/src/libstd/collections/hash/map.rs +++ b/src/libstd/collections/hash/map.rs @@ -667,8 +667,9 @@ impl<K, V, S> HashMap<K, V, S> /// ``` #[stable(feature = "rust1", since = "1.0.0")] pub fn reserve(&mut self, additional: usize) { - let min_cap = self.len().checked_add(additional).expect("reserve overflow"); - if self.capacity() < min_cap { + let remaining = self.capacity() - self.len(); // this can't overflow + if remaining < additional { + let min_cap = self.len().checked_add(additional).expect("reserve overflow"); let raw_cap = self.resize_policy.raw_capacity(min_cap); self.resize(raw_cap); } |
