From d7b34583926e3bd751120a4b827cd5ba6667dea3 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 3 Dec 2009 10:32:06 +0100 Subject: Fix Run-Time Check Failure with MSVC when downcasting. When you cast from a 64-bit type to a 32-bit one, MSVC produces an RTCF, despite the explicit cast. The solution is to add & 0xFFFFFFFF. Task-number: QTBUG-4255 Reviewed-by: Marius Storm-Olsen --- src/corelib/tools/qhash.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h index 1918229..2de03dc 100644 --- a/src/corelib/tools/qhash.h +++ b/src/corelib/tools/qhash.h @@ -69,18 +69,18 @@ inline uint qHash(int key) { return uint(key); } inline uint qHash(ulong key) { if (sizeof(ulong) > sizeof(uint)) { - return uint((key >> (8 * sizeof(uint) - 1)) ^ key); + return uint(((key >> (8 * sizeof(uint) - 1)) ^ key) & (~0U)); } else { - return uint(key); + return uint(key & (~0U)); } } inline uint qHash(long key) { return qHash(ulong(key)); } inline uint qHash(quint64 key) { if (sizeof(quint64) > sizeof(uint)) { - return uint((key >> (8 * sizeof(uint) - 1)) ^ key); + return uint(((key >> (8 * sizeof(uint) - 1)) ^ key) & (~0U)); } else { - return uint(key); + return uint(key & (~0U)); } } inline uint qHash(qint64 key) { return qHash(quint64(key)); } -- cgit v0.12