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

pull/35/head
Jeffrey Walton 2015-07-30 10:57:25 -04:00
parent 5a35640912
commit e5171450e2
1 changed files with 33 additions and 19 deletions

View File

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