about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorNicholas Nethercote <nnethercote@mozilla.com>2016-10-03 14:31:30 +1100
committerNicholas Nethercote <nnethercote@mozilla.com>2016-10-03 14:31:30 +1100
commit607d2973da7bd5895a5e84a65ba5174527bee904 (patch)
tree289a5b9f4da69dc4d6f2d318a0cfef871bdf78bf /src/libstd
parent6a9b5e4c51e995120c9739cacb305826a35ac496 (diff)
downloadrust-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.rs5
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);
         }