From cdd93d8c35e1e983fd3a37f3de2ebc154731f20d Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Thu, 20 Aug 2009 17:12:33 +0000 Subject: [PATCH] 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 --- lib/Support/APFloat.cpp | 4 ++-- unittests/ADT/APFloatTest.cpp | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) 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()); }