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
This commit is contained in:
Reid Spencer 2005-12-22 21:07:29 +00:00
parent 7a8054f5f2
commit 84c744fe58
4 changed files with 9 additions and 6 deletions

View File

@ -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...
}

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,6 @@
; RUN: llvm-as < %s -o /dev/null -f
; XFAIL: *
; make sure that invalid 'float' values are caught.
global float 0x1