From f84a2fb84afa57f58f24c1ab5c010498fd7c2896 Mon Sep 17 00:00:00 2001 From: Tomas Lindquist Olsen Date: Tue, 3 Mar 2009 19:47:39 +0100 Subject: [PATCH] Updated lifetime.d with a 32bit faster codepath for overflow checks. --- runtime/internal/lifetime.d | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/runtime/internal/lifetime.d b/runtime/internal/lifetime.d index 86772dff..f068d4ec 100644 --- a/runtime/internal/lifetime.d +++ b/runtime/internal/lifetime.d @@ -85,9 +85,20 @@ private size_t length_adjust(size_t sizeelem, size_t newlength) { - size_t newsize = sizeelem * newlength; - if (newsize / newlength != sizeelem) - onOutOfMemoryError(); + size_t newsize = void; + static if (size_t.sizeof < ulong.sizeof) + { + ulong s = cast(ulong)sizeelem * cast(ulong)newlength; + if (s > size_t.max) + onOutOfMemoryError(); + newsize = cast(size_t)s; + } + else + { + newsize = sizeelem * newlength; + if (newsize / newlength != sizeelem) + onOutOfMemoryError(); + } return newsize; } }