Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions cppcheckpremium-suppressions
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
3 changes: 3 additions & 0 deletions lib/cppcheck.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,9 @@ static void createDumpFile(const Settings& settings,
<< " int_bit=\"" << static_cast<unsigned>(settings.platform.int_bit) << '\"'
<< " long_bit=\"" << static_cast<unsigned>(settings.platform.long_bit) << '\"'
<< " long_long_bit=\"" << static_cast<unsigned>(settings.platform.long_long_bit) << '\"'
<< " float_bit=\"" << static_cast<unsigned>(settings.platform.float_bit) << '\"'
<< " double_bit=\"" << static_cast<unsigned>(settings.platform.double_bit) << '\"'
<< " long_double_bit=\"" << static_cast<unsigned>(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) << '\"'
Expand Down
32 changes: 6 additions & 26 deletions lib/platform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,7 @@ bool Platform::set(Type t)
defaultSign = std::numeric_limits<char>::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:
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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.
Expand Down Expand Up @@ -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;
}
Expand Down
13 changes: 13 additions & 0 deletions lib/platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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;
Expand Down
12 changes: 12 additions & 0 deletions test/testplatform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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 {
Expand All @@ -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 {
Expand All @@ -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 {
Expand Down