From: Daniel Dunbar Date: Thu, 20 Aug 2009 17:12:33 +0000 (+0000) Subject: Fix two APFloat bugs in converting hexadecimal constants. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=cdd93d8c35e1e983fd3a37f3de2ebc154731f20d;p=oota-llvm.git Fix two APFloat bugs in converting hexadecimal constants. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79540 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Support/APFloat.cpp b/lib/Support/APFloat.cpp index d15a21b4ff7..c13231d3fe1 100644 --- a/lib/Support/APFloat.cpp +++ b/lib/Support/APFloat.cpp @@ -2153,7 +2153,7 @@ APFloat::convertFromHexadecimalString(const StringRef &s, integerPart hex_value; if(*p == '.') { - assert(dot == 0); + assert(dot == s.end()); dot = p++; } @@ -2190,7 +2190,7 @@ APFloat::convertFromHexadecimalString(const StringRef &s, int expAdjustment; /* Implicit hexadecimal point? */ - if(!dot) + if (dot == s.end()) dot = p; /* Calculate the exponent adjustment implicit in the number of diff --git a/unittests/ADT/APFloatTest.cpp b/unittests/ADT/APFloatTest.cpp index b97810bec4d..7b947c5813d 100644 --- a/unittests/ADT/APFloatTest.cpp +++ b/unittests/ADT/APFloatTest.cpp @@ -60,6 +60,8 @@ TEST(APFloatTest, fromString) { EXPECT_EQ(0.0, APFloat(APFloat::IEEEdouble, "0x0000.00000p1234").convertToDouble()); EXPECT_EQ(0.0, APFloat(APFloat::IEEEdouble, "0x.00000p1234").convertToDouble()); EXPECT_EQ(0.0, APFloat(APFloat::IEEEdouble, "0x0.p1234").convertToDouble()); + EXPECT_EQ(1.0625, APFloat(APFloat::IEEEdouble, "0x1.1p0").convertToDouble()); + EXPECT_EQ(1.0, APFloat(APFloat::IEEEdouble, "0x1p0").convertToDouble()); EXPECT_EQ(0.0, APFloat(APFloat::IEEEdouble, StringRef("0e1\02", 3)).convertToDouble()); }