about summary refs log tree commit diff
path: root/src/libtest
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-03-06 11:58:32 -0800
committerAlex Crichton <alex@alexcrichton.com>2015-03-06 12:01:23 -0800
commit946a3963f3cf3f6f4334e89793af77a4da163dc7 (patch)
tree7bac25f57f28d042a9001d695a4ef5ef6a67085f /src/libtest
parent1fe8f221450bad3ffb1351c6549f67c18ce0b94e (diff)
downloadrust-946a3963f3cf3f6f4334e89793af77a4da163dc7.tar.gz
rust-946a3963f3cf3f6f4334e89793af77a4da163dc7.zip
test: Fix an overflow on empty benchmarks
Right now the rust upgrade in cargo is blocked on fixing this overflow. If a
this benchmark is run it will trigger an overflow error today:

    #[bench]
    fn foo(b: &mut test::Bencher) {}

This commit adds a check on each iteration of the loop that the maximum
multiplier (10) doesn't overflow, and if it does just return the results so far.
Diffstat (limited to 'src/libtest')
-rw-r--r--src/libtest/lib.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs
index a855d80f42a..9d1640d10b2 100644
--- a/src/libtest/lib.rs
+++ b/src/libtest/lib.rs
@@ -1108,7 +1108,14 @@ impl Bencher {
                 return summ5;
             }
 
-            n *= 2;
+            // If we overflow here just return the results so far. We check a
+            // multiplier of 10 because we're about to multiply by 2 and the
+            // next iteration of the loop will also multiply by 5 (to calculate
+            // the summ5 result)
+            n = match n.checked_mul(10) {
+                Some(_) => n * 2,
+                None => return summ5,
+            };
         }
     }
 }