From 74635dc879b0389214158de50e3ac630e6161b63 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 25 Jul 2004 23:15:44 +0000 Subject: [PATCH] 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 --- llvm/lib/Bytecode/Reader/Reader.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Bytecode/Reader/Reader.cpp b/llvm/lib/Bytecode/Reader/Reader.cpp index 8186a77b0155..6da38dd6c776 100644 --- a/llvm/lib/Bytecode/Reader/Reader.cpp +++ b/llvm/lib/Bytecode/Reader/Reader.cpp @@ -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);