diff --git a/lib/platform.h b/lib/platform.h index 9c729faad9d7..95f735e45d7b 100644 --- a/lib/platform.h +++ b/lib/platform.h @@ -46,7 +46,7 @@ namespace cppcheck { static long long min_value(int bit) { if (bit >= 64) return LLONG_MIN; - return -(1LL << (bit-1)); + return -(1LL << (bit-1)) + 1LL; } static long long max_value(int bit) { diff --git a/test/testplatform.cpp b/test/testplatform.cpp index f367e2a62b56..6304b8bb91d6 100644 --- a/test/testplatform.cpp +++ b/test/testplatform.cpp @@ -42,6 +42,7 @@ class TestPlatform : public TestFixture { TEST_CASE(empty_elements); TEST_CASE(default_platform); TEST_CASE(defines); + TEST_CASE(charMinMax); } static bool readPlatform(cppcheck::Platform& platform, const char* xmldata) { @@ -402,8 +403,8 @@ class TestPlatform : public TestFixture { void defines () { cppcheck::Platform platform; - const std::string defs = "CHAR_BIT=8;SCHAR_MIN=-128;SCHAR_MAX=127;UCHAR_MAX=255;CHAR_MIN=0;CHAR_MAX=127;SHRT_MIN=-32768;SHRT_MAX=32767;USHRT_MAX=65535;INT_MIN=-2147483648;INT_MAX=2147483647;UINT_MAX=4294967295;LONG_MIN=-9223372036854775808;LONG_MAX=9223372036854775807;ULONG_MAX=9223372036854775807"; - const std::string defs_c99 = "CHAR_BIT=8;SCHAR_MIN=-128;SCHAR_MAX=127;UCHAR_MAX=255;CHAR_MIN=0;CHAR_MAX=127;SHRT_MIN=-32768;SHRT_MAX=32767;USHRT_MAX=65535;INT_MIN=-2147483648;INT_MAX=2147483647;UINT_MAX=4294967295;LONG_MIN=-9223372036854775808;LONG_MAX=9223372036854775807;ULONG_MAX=9223372036854775807;LLONG_MIN=-9223372036854775808;LLONG_MAX=9223372036854775807;ULLONG_MAX=9223372036854775807"; + const std::string defs = "CHAR_BIT=8;SCHAR_MIN=-127;SCHAR_MAX=127;UCHAR_MAX=255;CHAR_MIN=0;CHAR_MAX=127;SHRT_MIN=-32767;SHRT_MAX=32767;USHRT_MAX=65535;INT_MIN=-2147483647;INT_MAX=2147483647;UINT_MAX=4294967295;LONG_MIN=-9223372036854775808;LONG_MAX=9223372036854775807;ULONG_MAX=9223372036854775807"; + const std::string defs_c99 = "CHAR_BIT=8;SCHAR_MIN=-127;SCHAR_MAX=127;UCHAR_MAX=255;CHAR_MIN=0;CHAR_MAX=127;SHRT_MIN=-32767;SHRT_MAX=32767;USHRT_MAX=65535;INT_MIN=-2147483647;INT_MAX=2147483647;UINT_MAX=4294967295;LONG_MIN=-9223372036854775808;LONG_MAX=9223372036854775807;ULONG_MAX=9223372036854775807;LLONG_MIN=-9223372036854775808;LLONG_MAX=9223372036854775807;ULLONG_MAX=9223372036854775807"; ASSERT_EQUALS(defs, platform.getLimitDefines(Standards::cstd_t::C89)); ASSERT_EQUALS(defs_c99, platform.getLimitDefines(Standards::cstd_t::C99)); ASSERT_EQUALS(defs_c99, platform.getLimitDefines(Standards::cstd_t::CLatest)); @@ -411,6 +412,13 @@ class TestPlatform : public TestFixture { ASSERT_EQUALS(defs_c99, platform.getLimitDefines(Standards::cppstd_t::CPP11)); ASSERT_EQUALS(defs_c99, platform.getLimitDefines(Standards::cppstd_t::CPPLatest)); } + + void charMinMax() { + cppcheck::Platform platform; + ASSERT_EQUALS(255, platform.unsignedCharMax()); + ASSERT_EQUALS(127, platform.signedCharMax()); + ASSERT_EQUALS(-127, platform.signedCharMin()); + } }; REGISTER_TEST(TestPlatform)