diff --git a/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp b/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp index 64806cee37ef7..231e565f27e52 100644 --- a/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp @@ -86,11 +86,15 @@ MagicNumbersCheck::MagicNumbersCheck(StringRef Name, ClangTidyContext *Context) IgnoredDoublePointValues.reserve(IgnoredFloatingPointValuesInput.size()); for (const auto &InputValue : IgnoredFloatingPointValuesInput) { llvm::APFloat FloatValue(llvm::APFloat::IEEEsingle()); - FloatValue.convertFromString(InputValue, DefaultRoundingMode); + if (!FloatValue.convertFromString(InputValue, DefaultRoundingMode)) { + assert(false && "Invalid floating point representation"); + } IgnoredFloatingPointValues.push_back(FloatValue.convertToFloat()); llvm::APFloat DoubleValue(llvm::APFloat::IEEEdouble()); - DoubleValue.convertFromString(InputValue, DefaultRoundingMode); + if (!DoubleValue.convertFromString(InputValue, DefaultRoundingMode)) { + assert(false && "Invalid floating point representation"); + } IgnoredDoublePointValues.push_back(DoubleValue.convertToDouble()); } llvm::sort(IgnoredFloatingPointValues.begin(), diff --git a/clang/lib/Lex/LiteralSupport.cpp b/clang/lib/Lex/LiteralSupport.cpp index 66309183a1448..5881852b1424a 100644 --- a/clang/lib/Lex/LiteralSupport.cpp +++ b/clang/lib/Lex/LiteralSupport.cpp @@ -1053,8 +1053,11 @@ NumericLiteralParser::GetFloatValue(llvm::APFloat &Result) { auto StatusOrErr = Result.convertFromString(Str, APFloat::rmNearestTiesToEven); - assert(StatusOrErr && "Invalid floating point representation"); - return StatusOrErr ? *StatusOrErr : APFloat::opInvalidOp; + if (!StatusOrErr) { + assert(false && "Invalid floating point representation"); + return APFloat::opInvalidOp; + } + return *StatusOrErr; } static inline bool IsExponentPart(char c) { diff --git a/llvm/lib/Support/APFloat.cpp b/llvm/lib/Support/APFloat.cpp index f6999a6f236de..d26c5e6cd2e63 100644 --- a/llvm/lib/Support/APFloat.cpp +++ b/llvm/lib/Support/APFloat.cpp @@ -4511,7 +4511,9 @@ hash_code hash_value(const APFloat &Arg) { APFloat::APFloat(const fltSemantics &Semantics, StringRef S) : APFloat(Semantics) { auto StatusOrErr = convertFromString(S, rmNearestTiesToEven); - assert(StatusOrErr && "Invalid floating point representation"); + if (!StatusOrErr) { + assert(false && "Invalid floating point representation"); + } } APFloat::opStatus APFloat::convert(const fltSemantics &ToSemantics, diff --git a/llvm/lib/Support/StringRef.cpp b/llvm/lib/Support/StringRef.cpp index 4142d130d519e..b5db172cc1a3a 100644 --- a/llvm/lib/Support/StringRef.cpp +++ b/llvm/lib/Support/StringRef.cpp @@ -590,7 +590,7 @@ bool StringRef::getAsDouble(double &Result, bool AllowInexact) const { APFloat F(0.0); auto ErrOrStatus = F.convertFromString(*this, APFloat::rmNearestTiesToEven); if (!ErrOrStatus) { - assert("Invalid floating point representation"); + assert(false && "Invalid floating point representation"); return true; } diff --git a/llvm/unittests/ADT/APFloatTest.cpp b/llvm/unittests/ADT/APFloatTest.cpp index 927e1fe136711..db529a094c37d 100644 --- a/llvm/unittests/ADT/APFloatTest.cpp +++ b/llvm/unittests/ADT/APFloatTest.cpp @@ -666,26 +666,12 @@ TEST(APFloatTest, Zero) { TEST(APFloatTest, DecimalStringsWithoutNullTerminators) { // Make sure that we can parse strings without null terminators. // rdar://14323230. - APFloat Val(APFloat::IEEEdouble()); - Val.convertFromString(StringRef("0.00", 3), - llvm::APFloat::rmNearestTiesToEven); - EXPECT_EQ(Val.convertToDouble(), 0.0); - Val.convertFromString(StringRef("0.01", 3), - llvm::APFloat::rmNearestTiesToEven); - EXPECT_EQ(Val.convertToDouble(), 0.0); - Val.convertFromString(StringRef("0.09", 3), - llvm::APFloat::rmNearestTiesToEven); - EXPECT_EQ(Val.convertToDouble(), 0.0); - Val.convertFromString(StringRef("0.095", 4), - llvm::APFloat::rmNearestTiesToEven); - EXPECT_EQ(Val.convertToDouble(), 0.09); - Val.convertFromString(StringRef("0.00e+3", 7), - llvm::APFloat::rmNearestTiesToEven); - EXPECT_EQ(Val.convertToDouble(), 0.00); - Val.convertFromString(StringRef("0e+3", 4), - llvm::APFloat::rmNearestTiesToEven); - EXPECT_EQ(Val.convertToDouble(), 0.00); - + EXPECT_EQ(convertToDoubleFromString(StringRef("0.00", 3)), 0.0); + EXPECT_EQ(convertToDoubleFromString(StringRef("0.01", 3)), 0.0); + EXPECT_EQ(convertToDoubleFromString(StringRef("0.09", 3)), 0.0); + EXPECT_EQ(convertToDoubleFromString(StringRef("0.095", 4)), 0.09); + EXPECT_EQ(convertToDoubleFromString(StringRef("0.00e+3", 7)), 0.00); + EXPECT_EQ(convertToDoubleFromString(StringRef("0e+3", 4)), 0.00); } TEST(APFloatTest, fromZeroDecimalString) {