From d935129a2c3dd7d745d8ee16956db1258491a7f9 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Mon, 19 Oct 2015 12:13:19 -0700 Subject: [PATCH] lexer.d: avoid expensive overflow check --- src/lexer.d | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/lexer.d b/src/lexer.d index 01aec16221c7..f164387ef51c 100644 --- a/src/lexer.d +++ b/src/lexer.d @@ -1832,16 +1832,14 @@ public: default: goto Ldone; } - uinteger_t n2 = n * base; - if ((n2 / base != n || n2 + d < n)) - { - overflow = true; - } - n = n2 + d; - // if n needs more than 64 bits - if (n.sizeof > 8 && n > 0xFFFFFFFFFFFFFFFFUL) + // Avoid expensive overflow check if we aren't at risk of overflow + if (n <= 0x0FFF_FFFF_FFFF_FFFFUL) + n = n * base + d; + else { - overflow = true; + import core.checkedint; + n = mulu(n, base, overflow); + n = addu(n, d, overflow); } } Ldone: