From 5b322795e43e311d61d08e0426624b3157ce622f Mon Sep 17 00:00:00 2001 From: blep Date: Thu, 26 May 2011 17:14:26 +0000 Subject: [PATCH] Fixed unit test failure on IBM AIX xlC by hard-coding the maxUInt64AsDouble as double constant instead of relying on double(Value::maxUInt64) which produces an incorrect value. git-svn-id: https://jsoncpp.svn.sourceforge.net/svnroot/jsoncpp/trunk@232 1f120ed1-78a5-a849-adca-83f0a9e25bb6 --- src/lib_json/json_value.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp index 98ce606..79478b8 100644 --- a/src/lib_json/json_value.cpp +++ b/src/lib_json/json_value.cpp @@ -35,6 +35,10 @@ const UInt Value::maxUInt = UInt(-1); const Int64 Value::minInt64 = Int64( ~(UInt64(-1)/2) ); const Int64 Value::maxInt64 = Int64( UInt64(-1)/2 ); const UInt64 Value::maxUInt64 = UInt64(-1); +// The constant is hard-coded because some compiler have trouble +// converting Value::maxUInt64 to a double correctly (AIX/xlC). +// Assumes that UInt64 is a 64 bits integer. +static const double maxUInt64AsDouble = 18446744073709551615.0; #endif // defined(JSON_HAS_INT64) const LargestInt Value::minLargestInt = LargestInt( ~(LargestUInt(-1)/2) ); const LargestInt Value::maxLargestInt = LargestInt( LargestUInt(-1)/2 ); @@ -1443,7 +1447,7 @@ Value::isUInt64() const // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we // require the value to be strictly less than the limit. return value_.real_ >= 0 && - value_.real_ < double(maxUInt64) && + value_.real_ < maxUInt64AsDouble && IsIntegral(value_.real_); default: break;