From e4eb768e4f91e36d841eb27995a1918a6c5511e1 Mon Sep 17 00:00:00 2001 From: swasti16 Date: Mon, 13 Oct 2025 23:22:25 +0530 Subject: [PATCH] Add float bits in platform --- cppcheckpremium-suppressions | 3 +++ lib/cppcheck.cpp | 3 +++ lib/platform.cpp | 32 ++++++-------------------------- lib/platform.h | 13 +++++++++++++ test/testplatform.cpp | 12 ++++++++++++ 5 files changed, 37 insertions(+), 26 deletions(-) diff --git a/cppcheckpremium-suppressions b/cppcheckpremium-suppressions index 07fce749a80..f4c472f0671 100644 --- a/cppcheckpremium-suppressions +++ b/cppcheckpremium-suppressions @@ -115,6 +115,9 @@ premium-misra-cpp-2023-7.0.3 # signed integer expression in bitwise rhs by intention premium-misra-cpp-2023-7.0.4 +# integer promotions +premium-misra-cpp-2023-7.0.5 + # sign conversions in assignments by intention premium-misra-cpp-2023-7.0.6 diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index 2ff826d0436..cce908ba07d 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -397,6 +397,9 @@ static void createDumpFile(const Settings& settings, << " int_bit=\"" << static_cast(settings.platform.int_bit) << '\"' << " long_bit=\"" << static_cast(settings.platform.long_bit) << '\"' << " long_long_bit=\"" << static_cast(settings.platform.long_long_bit) << '\"' + << " float_bit=\"" << static_cast(settings.platform.float_bit) << '\"' + << " double_bit=\"" << static_cast(settings.platform.double_bit) << '\"' + << " long_double_bit=\"" << static_cast(settings.platform.long_double_bit) << '\"' << " pointer_bit=\"" << (settings.platform.sizeof_pointer * settings.platform.char_bit) << '\"' << " wchar_t_bit=\"" << (settings.platform.sizeof_wchar_t * settings.platform.char_bit) << '\"' << " size_t_bit=\"" << (settings.platform.sizeof_size_t * settings.platform.char_bit) << '\"' diff --git a/lib/platform.cpp b/lib/platform.cpp index 5012083d241..0c09e5cb0a9 100644 --- a/lib/platform.cpp +++ b/lib/platform.cpp @@ -56,10 +56,7 @@ bool Platform::set(Type t) defaultSign = std::numeric_limits::is_signed ? 's' : 'u'; } char_bit = 8; - short_bit = char_bit * sizeof_short; - int_bit = char_bit * sizeof_int; - long_bit = char_bit * sizeof_long; - long_long_bit = char_bit * sizeof_long_long; + calculateBitMembers(); return true; case Type::Win32W: case Type::Win32A: @@ -77,10 +74,7 @@ bool Platform::set(Type t) sizeof_pointer = 4; defaultSign = '\0'; char_bit = 8; - short_bit = char_bit * sizeof_short; - int_bit = char_bit * sizeof_int; - long_bit = char_bit * sizeof_long; - long_long_bit = char_bit * sizeof_long_long; + calculateBitMembers(); return true; case Type::Win64: type = t; @@ -97,10 +91,7 @@ bool Platform::set(Type t) sizeof_pointer = 8; defaultSign = '\0'; char_bit = 8; - short_bit = char_bit * sizeof_short; - int_bit = char_bit * sizeof_int; - long_bit = char_bit * sizeof_long; - long_long_bit = char_bit * sizeof_long_long; + calculateBitMembers(); return true; case Type::Unix32: type = t; @@ -117,10 +108,7 @@ bool Platform::set(Type t) sizeof_pointer = 4; defaultSign = '\0'; char_bit = 8; - short_bit = char_bit * sizeof_short; - int_bit = char_bit * sizeof_int; - long_bit = char_bit * sizeof_long; - long_long_bit = char_bit * sizeof_long_long; + calculateBitMembers(); return true; case Type::Unix64: type = t; @@ -137,10 +125,7 @@ bool Platform::set(Type t) sizeof_pointer = 8; defaultSign = '\0'; char_bit = 8; - short_bit = char_bit * sizeof_short; - int_bit = char_bit * sizeof_int; - long_bit = char_bit * sizeof_long; - long_long_bit = char_bit * sizeof_long_long; + calculateBitMembers(); return true; case Type::File: // sizes are not set. @@ -294,12 +279,7 @@ bool Platform::loadFromXmlDocument(const tinyxml2::XMLDocument *doc) } } } - - short_bit = char_bit * sizeof_short; - int_bit = char_bit * sizeof_int; - long_bit = char_bit * sizeof_long; - long_long_bit = char_bit * sizeof_long_long; - + calculateBitMembers(); type = Type::File; return !error; } diff --git a/lib/platform.h b/lib/platform.h index 86d1ccdfc2f..500db04b51f 100644 --- a/lib/platform.h +++ b/lib/platform.h @@ -66,6 +66,16 @@ class CPPCHECKLIB Platform { return (1ULL << bit) - 1ULL; } + void calculateBitMembers() { + short_bit = char_bit * sizeof_short; + int_bit = char_bit * sizeof_int; + long_bit = char_bit * sizeof_long; + long_long_bit = char_bit * sizeof_long_long; + float_bit = char_bit * sizeof_float; + double_bit = char_bit * sizeof_double; + long_double_bit = char_bit * sizeof_long_double; + } + /** provides list of defines specified by the limit.h/climits includes */ std::string getLimitsDefines(bool c99) const; public: @@ -99,6 +109,9 @@ class CPPCHECKLIB Platform { std::uint8_t int_bit; /// bits in int std::uint8_t long_bit; /// bits in long std::uint8_t long_long_bit; /// bits in long long + std::uint8_t float_bit; /// bits in float + std::uint8_t double_bit; /// bits in double + std::uint8_t long_double_bit; /// bits in long double /** size of standard types */ std::size_t sizeof_bool; diff --git a/test/testplatform.cpp b/test/testplatform.cpp index d01eefcb812..f0c7f6fa596 100644 --- a/test/testplatform.cpp +++ b/test/testplatform.cpp @@ -111,6 +111,9 @@ class TestPlatform : public TestFixture { ASSERT_EQUALS(32, platform.int_bit); ASSERT_EQUALS(64, platform.long_bit); ASSERT_EQUALS(64, platform.long_long_bit); + ASSERT_EQUALS(32, platform.float_bit); + ASSERT_EQUALS(64, platform.double_bit); + ASSERT_EQUALS(128, platform.long_double_bit); } void valid_config_win32w() const { @@ -136,6 +139,9 @@ class TestPlatform : public TestFixture { ASSERT_EQUALS(32, platform.int_bit); ASSERT_EQUALS(32, platform.long_bit); ASSERT_EQUALS(64, platform.long_long_bit); + ASSERT_EQUALS(32, platform.float_bit); + ASSERT_EQUALS(64, platform.double_bit); + ASSERT_EQUALS(64, platform.long_double_bit); } void valid_config_unix32() const { @@ -161,6 +167,9 @@ class TestPlatform : public TestFixture { ASSERT_EQUALS(32, platform.int_bit); ASSERT_EQUALS(32, platform.long_bit); ASSERT_EQUALS(64, platform.long_long_bit); + ASSERT_EQUALS(32, platform.float_bit); + ASSERT_EQUALS(64, platform.double_bit); + ASSERT_EQUALS(96, platform.long_double_bit); } void valid_config_win64() const { @@ -186,6 +195,9 @@ class TestPlatform : public TestFixture { ASSERT_EQUALS(32, platform.int_bit); ASSERT_EQUALS(32, platform.long_bit); ASSERT_EQUALS(64, platform.long_long_bit); + ASSERT_EQUALS(32, platform.float_bit); + ASSERT_EQUALS(64, platform.double_bit); + ASSERT_EQUALS(64, platform.long_double_bit); } void valid_config_file_1() const {