about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libcore/hashmap.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/libcore/hashmap.rs b/src/libcore/hashmap.rs
index 47f0fcfd381..27b5ddadff9 100644
--- a/src/libcore/hashmap.rs
+++ b/src/libcore/hashmap.rs
@@ -220,6 +220,9 @@ pub mod linear {
                 },
             };
 
+            /* re-inserting buckets may cause changes in size, so remember what
+               our new size is ahead of time before we start insertions */
+            let size = self.size - 1;
             idx = self.next_bucket(idx, len_buckets);
             while self.buckets[idx].is_some() {
                 let mut bucket = None;
@@ -227,7 +230,7 @@ pub mod linear {
                 self.insert_opt_bucket(bucket);
                 idx = self.next_bucket(idx, len_buckets);
             }
-            self.size -= 1;
+            self.size = size;
 
             value
         }