Fix a serious bug in the double constant reader. In particular, because
authorChris Lattner <sabre@nondot.org>
Sun, 25 Jul 2004 23:15:44 +0000 (23:15 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 25 Jul 2004 23:15:44 +0000 (23:15 +0000)
(At[3] << 24) is an int type and it is being coerced to uint64_t, it was
getting sign extended, causing us to get FFFFFFFFxxxxxxxx constants all of
the time.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15224 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Bytecode/Reader/Reader.cpp

index 8186a77b0155ab6176f4b610ade7311740eb21f3..6da38dd6c77639189cad4cdc971bba54b5bca93f 100644 (file)
@@ -175,7 +175,8 @@ inline void BytecodeReader::read_double(double& DoubleVal) {
     double d;
     uint64_t i;
   } DoubleUnion;
-  DoubleUnion.i = At[0] | (At[1] << 8) | (At[2] << 16) | (At[3] << 24) |
+  DoubleUnion.i = (uint64_t(At[0]) <<  0) | (uint64_t(At[1]) << 8) | 
+                  (uint64_t(At[2]) << 16) | (uint64_t(At[3]) << 24) |
                   (uint64_t(At[4]) << 32) | (uint64_t(At[5]) << 40) | 
                   (uint64_t(At[6]) << 48) | (uint64_t(At[7]) << 56);
   At+=sizeof(uint64_t);