Mercurial > projects > ldc
changeset 1039:21691e437c95
Updated lifetime.d with a 32bit faster codepath for overflow checks.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Tue, 03 Mar 2009 19:47:39 +0100 |
parents | c4c6e5e9c23e |
children | 0477f98d357e |
files | runtime/internal/lifetime.d |
diffstat | 1 files changed, 14 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/internal/lifetime.d Tue Mar 03 19:37:47 2009 +0100 +++ b/runtime/internal/lifetime.d Tue Mar 03 19:47:39 2009 +0100 @@ -85,9 +85,20 @@ 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; } }