diff --git a/validat0.cpp b/validat0.cpp index a612c8b2..64144e7d 100644 --- a/validat0.cpp +++ b/validat0.cpp @@ -336,20 +336,26 @@ bool TestConversion() { signed int v; bool p = true; { - signed long v1 = std::numeric_limits::min(); p = !SafeConvert(v1, v) && p; - signed long v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; - unsigned long v3 = std::numeric_limits::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::min(); p = !SafeConvert(v1, v) && p; + signed long v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; + unsigned long v3 = std::numeric_limits::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::min(); p = !SafeConvert(v1, v) && p; + signed long long v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; + unsigned long long v3 = std::numeric_limits::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::min(); p = !SafeConvert(v1, v) && p; - signed long long v2 = std::numeric_limits::max(); p = !SafeConvert(v2, v) && p; - unsigned long long v3 = std::numeric_limits::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::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::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::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::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;