Fixed validation failure due to collision of type sizes between int and long

This commit is contained in:
Jeffrey Walton 2015-07-30 10:57:25 -04:00
parent 5a35640912
commit e5171450e2

View File

@ -336,20 +336,26 @@ bool TestConversion()
{
signed int v; bool p = true;
{
signed long v1 = std::numeric_limits<signed long>::min(); p = !SafeConvert(v1, v) && p;
signed long v2 = std::numeric_limits<signed long>::max(); p = !SafeConvert(v2, v) && p;
unsigned long v3 = std::numeric_limits<unsigned long>::max(); p = !SafeConvert(v3, v) && p;
// Guard i686 collision of type sizes
if(sizeof(signed int) != sizeof(signed long))
{
signed long v1 = std::numeric_limits<signed long>::min(); p = !SafeConvert(v1, v) && p;
signed long v2 = std::numeric_limits<signed long>::max(); p = !SafeConvert(v2, v) && p;
unsigned long v3 = std::numeric_limits<unsigned long>::max(); p = !SafeConvert(v3, v) && p;
}
// Guard i686 collision of type sizes
if(sizeof(signed int) != sizeof(signed long long))
{
signed long long v1 = std::numeric_limits<signed long long>::min(); p = !SafeConvert(v1, v) && p;
signed long long v2 = std::numeric_limits<signed long long>::max(); p = !SafeConvert(v2, v) && p;
unsigned long long v3 = std::numeric_limits<unsigned long long>::max(); p = !SafeConvert(v3, v) && p;
}
std::cout << (!p ? "FAILED " : "passed ") << " signed int overflow" << std::endl;
pass &= p;
}
{
signed long long v1 = std::numeric_limits<signed long long>::min(); p = !SafeConvert(v1, v) && p;
signed long long v2 = std::numeric_limits<signed long long>::max(); p = !SafeConvert(v2, v) && p;
unsigned long long v3 = std::numeric_limits<unsigned long long>::max(); p = !SafeConvert(v3, v) && p;
}
std::cout << (!p ? "FAILED " : "passed ") << " signed int overflow" << std::endl;
pass &= p;
}
/********** unsigned int **********/
{
unsigned int v1, v2; bool p = true;
@ -366,14 +372,20 @@ bool TestConversion()
{
unsigned int v; bool p = true;
{
unsigned long v1 = std::numeric_limits<unsigned long>::max(); p = !SafeConvert(v1, v) && p;
// Guard i686 collision of type sizes
if(sizeof(unsigned int) != sizeof(unsigned long))
{
unsigned long v1 = std::numeric_limits<unsigned long>::max(); p = !SafeConvert(v1, v) && p;
}
// Guard i686 collision of type sizes
if(sizeof(unsigned int) != sizeof(unsigned long long))
{
unsigned long long v1 = std::numeric_limits<unsigned long long>::max(); p = !SafeConvert(v1, v) && p;
}
std::cout << (!p ? "FAILED " : "passed ") << " unsigned int overflow" << std::endl;
pass &= p;
}
{
unsigned long long v1 = std::numeric_limits<unsigned long long>::max(); p = !SafeConvert(v1, v) && p;
}
std::cout << (!p ? "FAILED " : "passed ") << " unsigned int overflow" << std::endl;
pass &= p;
}
/********** signed long **********/
@ -393,6 +405,7 @@ bool TestConversion()
/********** signed long overflow **********/
{
// Guard x86_64 collision of type sizes
if(sizeof(signed long) != sizeof(signed long long))
{
signed long v; bool p = true;
@ -425,6 +438,7 @@ bool TestConversion()
/********** unsigned long overflow **********/
{
// Guard x86_64 collision of type sizes
if(sizeof(unsigned long) != sizeof(unsigned long long))
{
unsigned long v; bool p = true;