From 84c744fe582f05721f9b8a1bef0086184fc5f0ff Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Thu, 22 Dec 2005 21:07:29 +0000 Subject: [PATCH] Fix PR409: Implement the suggested check to ensure that out-of-range float constants don't get accepted by LLVM accidentally. Adjust the supporting test cases as well. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24963 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Constants.cpp | 3 +++ test/Assembler/2004-01-22-FloatNormalization.ll | 5 ----- test/Assembler/2004-12-06-ConstantFloatRange.ll | 1 - test/Verifier/2004-01-22-FloatNormalization.ll | 6 ++++++ 4 files changed, 9 insertions(+), 6 deletions(-) delete mode 100644 test/Assembler/2004-01-22-FloatNormalization.ll create mode 100644 test/Verifier/2004-01-22-FloatNormalization.ll diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 080baf8d63b..c1324b6b265 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -482,6 +482,9 @@ bool ConstantFP::isValueValidForType(const Type *Ty, double Val) { // TODO: Figure out how to test if a double can be cast to a float! case Type::FloatTyID: + float FV = float(Val); + double DV = double(FV); + return IsNAN(Val) || Val == DV; case Type::DoubleTyID: return true; // This is the largest type... } diff --git a/test/Assembler/2004-01-22-FloatNormalization.ll b/test/Assembler/2004-01-22-FloatNormalization.ll deleted file mode 100644 index 5eae402dfd0..00000000000 --- a/test/Assembler/2004-01-22-FloatNormalization.ll +++ /dev/null @@ -1,5 +0,0 @@ -; RUN: llvm-as < %s -o /dev/null -f - -; make sure that 'float' values have their value properly truncated. - -global float 0x1 diff --git a/test/Assembler/2004-12-06-ConstantFloatRange.ll b/test/Assembler/2004-12-06-ConstantFloatRange.ll index 30d103c5728..61f2b77b3f9 100644 --- a/test/Assembler/2004-12-06-ConstantFloatRange.ll +++ b/test/Assembler/2004-12-06-ConstantFloatRange.ll @@ -1,5 +1,4 @@ ; RUN: llvm-as %s -o /dev/null 2>&1 | grep "constant invalid for type" -; XFAIL: * ;; This is a testcase for PR409 diff --git a/test/Verifier/2004-01-22-FloatNormalization.ll b/test/Verifier/2004-01-22-FloatNormalization.ll new file mode 100644 index 00000000000..8fbfe194277 --- /dev/null +++ b/test/Verifier/2004-01-22-FloatNormalization.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s -o /dev/null -f +; XFAIL: * + +; make sure that invalid 'float' values are caught. + +global float 0x1