Fix a serious bug in the double constant reader. In particular, because

(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.

llvm-svn: 15224
This commit is contained in:
Chris Lattner 2004-07-25 23:15:44 +00:00
parent 21a015c12f
commit 74635dc879
1 changed files with 2 additions and 1 deletions

View File

@ -175,7 +175,8 @@ inline void BytecodeReader::read_double(double& DoubleVal) {
double d; double d;
uint64_t i; uint64_t i;
} DoubleUnion; } 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[4]) << 32) | (uint64_t(At[5]) << 40) |
(uint64_t(At[6]) << 48) | (uint64_t(At[7]) << 56); (uint64_t(At[6]) << 48) | (uint64_t(At[7]) << 56);
At+=sizeof(uint64_t); At+=sizeof(uint64_t);