Skip to content

Commit f3e2845

Browse files
authored
fixed #14197: Add float bits in platform (#7886)
1 parent 59d9ba3 commit f3e2845

File tree

5 files changed

+37
-26
lines changed

5 files changed

+37
-26
lines changed

cppcheckpremium-suppressions

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@ premium-misra-cpp-2023-7.0.3
115115
# signed integer expression in bitwise rhs by intention
116116
premium-misra-cpp-2023-7.0.4
117117

118+
# integer promotions
119+
premium-misra-cpp-2023-7.0.5
120+
118121
# sign conversions in assignments by intention
119122
premium-misra-cpp-2023-7.0.6
120123

lib/cppcheck.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,9 @@ static void createDumpFile(const Settings& settings,
397397
<< " int_bit=\"" << static_cast<unsigned>(settings.platform.int_bit) << '\"'
398398
<< " long_bit=\"" << static_cast<unsigned>(settings.platform.long_bit) << '\"'
399399
<< " long_long_bit=\"" << static_cast<unsigned>(settings.platform.long_long_bit) << '\"'
400+
<< " float_bit=\"" << static_cast<unsigned>(settings.platform.float_bit) << '\"'
401+
<< " double_bit=\"" << static_cast<unsigned>(settings.platform.double_bit) << '\"'
402+
<< " long_double_bit=\"" << static_cast<unsigned>(settings.platform.long_double_bit) << '\"'
400403
<< " pointer_bit=\"" << (settings.platform.sizeof_pointer * settings.platform.char_bit) << '\"'
401404
<< " wchar_t_bit=\"" << (settings.platform.sizeof_wchar_t * settings.platform.char_bit) << '\"'
402405
<< " size_t_bit=\"" << (settings.platform.sizeof_size_t * settings.platform.char_bit) << '\"'

lib/platform.cpp

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,7 @@ bool Platform::set(Type t)
5656
defaultSign = std::numeric_limits<char>::is_signed ? 's' : 'u';
5757
}
5858
char_bit = 8;
59-
short_bit = char_bit * sizeof_short;
60-
int_bit = char_bit * sizeof_int;
61-
long_bit = char_bit * sizeof_long;
62-
long_long_bit = char_bit * sizeof_long_long;
59+
calculateBitMembers();
6360
return true;
6461
case Type::Win32W:
6562
case Type::Win32A:
@@ -77,10 +74,7 @@ bool Platform::set(Type t)
7774
sizeof_pointer = 4;
7875
defaultSign = '\0';
7976
char_bit = 8;
80-
short_bit = char_bit * sizeof_short;
81-
int_bit = char_bit * sizeof_int;
82-
long_bit = char_bit * sizeof_long;
83-
long_long_bit = char_bit * sizeof_long_long;
77+
calculateBitMembers();
8478
return true;
8579
case Type::Win64:
8680
type = t;
@@ -97,10 +91,7 @@ bool Platform::set(Type t)
9791
sizeof_pointer = 8;
9892
defaultSign = '\0';
9993
char_bit = 8;
100-
short_bit = char_bit * sizeof_short;
101-
int_bit = char_bit * sizeof_int;
102-
long_bit = char_bit * sizeof_long;
103-
long_long_bit = char_bit * sizeof_long_long;
94+
calculateBitMembers();
10495
return true;
10596
case Type::Unix32:
10697
type = t;
@@ -117,10 +108,7 @@ bool Platform::set(Type t)
117108
sizeof_pointer = 4;
118109
defaultSign = '\0';
119110
char_bit = 8;
120-
short_bit = char_bit * sizeof_short;
121-
int_bit = char_bit * sizeof_int;
122-
long_bit = char_bit * sizeof_long;
123-
long_long_bit = char_bit * sizeof_long_long;
111+
calculateBitMembers();
124112
return true;
125113
case Type::Unix64:
126114
type = t;
@@ -137,10 +125,7 @@ bool Platform::set(Type t)
137125
sizeof_pointer = 8;
138126
defaultSign = '\0';
139127
char_bit = 8;
140-
short_bit = char_bit * sizeof_short;
141-
int_bit = char_bit * sizeof_int;
142-
long_bit = char_bit * sizeof_long;
143-
long_long_bit = char_bit * sizeof_long_long;
128+
calculateBitMembers();
144129
return true;
145130
case Type::File:
146131
// sizes are not set.
@@ -294,12 +279,7 @@ bool Platform::loadFromXmlDocument(const tinyxml2::XMLDocument *doc)
294279
}
295280
}
296281
}
297-
298-
short_bit = char_bit * sizeof_short;
299-
int_bit = char_bit * sizeof_int;
300-
long_bit = char_bit * sizeof_long;
301-
long_long_bit = char_bit * sizeof_long_long;
302-
282+
calculateBitMembers();
303283
type = Type::File;
304284
return !error;
305285
}

lib/platform.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ class CPPCHECKLIB Platform {
6666
return (1ULL << bit) - 1ULL;
6767
}
6868

69+
void calculateBitMembers() {
70+
short_bit = char_bit * sizeof_short;
71+
int_bit = char_bit * sizeof_int;
72+
long_bit = char_bit * sizeof_long;
73+
long_long_bit = char_bit * sizeof_long_long;
74+
float_bit = char_bit * sizeof_float;
75+
double_bit = char_bit * sizeof_double;
76+
long_double_bit = char_bit * sizeof_long_double;
77+
}
78+
6979
/** provides list of defines specified by the limit.h/climits includes */
7080
std::string getLimitsDefines(bool c99) const;
7181
public:
@@ -99,6 +109,9 @@ class CPPCHECKLIB Platform {
99109
std::uint8_t int_bit; /// bits in int
100110
std::uint8_t long_bit; /// bits in long
101111
std::uint8_t long_long_bit; /// bits in long long
112+
std::uint8_t float_bit; /// bits in float
113+
std::uint8_t double_bit; /// bits in double
114+
std::uint8_t long_double_bit; /// bits in long double
102115

103116
/** size of standard types */
104117
std::size_t sizeof_bool;

test/testplatform.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ class TestPlatform : public TestFixture {
111111
ASSERT_EQUALS(32, platform.int_bit);
112112
ASSERT_EQUALS(64, platform.long_bit);
113113
ASSERT_EQUALS(64, platform.long_long_bit);
114+
ASSERT_EQUALS(32, platform.float_bit);
115+
ASSERT_EQUALS(64, platform.double_bit);
116+
ASSERT_EQUALS(128, platform.long_double_bit);
114117
}
115118

116119
void valid_config_win32w() const {
@@ -136,6 +139,9 @@ class TestPlatform : public TestFixture {
136139
ASSERT_EQUALS(32, platform.int_bit);
137140
ASSERT_EQUALS(32, platform.long_bit);
138141
ASSERT_EQUALS(64, platform.long_long_bit);
142+
ASSERT_EQUALS(32, platform.float_bit);
143+
ASSERT_EQUALS(64, platform.double_bit);
144+
ASSERT_EQUALS(64, platform.long_double_bit);
139145
}
140146

141147
void valid_config_unix32() const {
@@ -161,6 +167,9 @@ class TestPlatform : public TestFixture {
161167
ASSERT_EQUALS(32, platform.int_bit);
162168
ASSERT_EQUALS(32, platform.long_bit);
163169
ASSERT_EQUALS(64, platform.long_long_bit);
170+
ASSERT_EQUALS(32, platform.float_bit);
171+
ASSERT_EQUALS(64, platform.double_bit);
172+
ASSERT_EQUALS(96, platform.long_double_bit);
164173
}
165174

166175
void valid_config_win64() const {
@@ -186,6 +195,9 @@ class TestPlatform : public TestFixture {
186195
ASSERT_EQUALS(32, platform.int_bit);
187196
ASSERT_EQUALS(32, platform.long_bit);
188197
ASSERT_EQUALS(64, platform.long_long_bit);
198+
ASSERT_EQUALS(32, platform.float_bit);
199+
ASSERT_EQUALS(64, platform.double_bit);
200+
ASSERT_EQUALS(64, platform.long_double_bit);
189201
}
190202

191203
void valid_config_file_1() const {

0 commit comments

Comments
 (0)