For PR409: \

Test the range of float constants to ensure we are not attempting to create a \
float constant using a double value that is out of range for a float


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18585 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Reid Spencer 2004-12-06 22:18:37 +00:00
parent 9f9b3acfce
commit b9ce8b3f1b

View File

@ -21,6 +21,7 @@
#include "llvm/ADT/StringExtras.h"
#include <algorithm>
#include <iostream>
#include <limits>
using namespace llvm;
ConstantBool *ConstantBool::True = new ConstantBool(true);
@ -442,6 +443,16 @@ 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:
return
(std::numeric_limits<double>::has_infinity &&
std::numeric_limits<float>::has_infinity &&
Val == std::numeric_limits<double>::infinity()) ||
(std::numeric_limits<double>::has_quiet_NaN &&
std::numeric_limits<float>::has_quiet_NaN &&
Val == std::numeric_limits<double>::quiet_NaN()) ||
(Val >= -std::numeric_limits<float>::max() &&
Val <= std::numeric_limits<float>::max());
case Type::DoubleTyID:
return true; // This is the largest type...
}