Skip to content

Commit 27d89a8

Browse files
committed
Add float bits in platform
1 parent d69955c commit 27d89a8

4 files changed

Lines changed: 37 additions & 26 deletions

File tree

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+
this->short_bit = this->char_bit * this->sizeof_short;
71+
this->int_bit = this->char_bit * this->sizeof_int;
72+
this->long_bit = this->char_bit * this->sizeof_long;
73+
this->long_long_bit = this->char_bit * this->sizeof_long_long;
74+
this->float_bit = this->char_bit * this->sizeof_float;
75+
this->double_bit = this->char_bit * this->sizeof_double;
76+
this->long_double_bit = this->char_bit * this->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: 15 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,12 @@ 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);
145+
ASSERT_EQUALS(32, platform.float_bit);
146+
ASSERT_EQUALS(64, platform.double_bit);
147+
ASSERT_EQUALS(64, platform.long_double_bit);
139148
}
140149

141150
void valid_config_unix32() const {
@@ -161,6 +170,9 @@ class TestPlatform : public TestFixture {
161170
ASSERT_EQUALS(32, platform.int_bit);
162171
ASSERT_EQUALS(32, platform.long_bit);
163172
ASSERT_EQUALS(64, platform.long_long_bit);
173+
ASSERT_EQUALS(32, platform.float_bit);
174+
ASSERT_EQUALS(64, platform.double_bit);
175+
ASSERT_EQUALS(96, platform.long_double_bit);
164176
}
165177

166178
void valid_config_win64() const {
@@ -186,6 +198,9 @@ class TestPlatform : public TestFixture {
186198
ASSERT_EQUALS(32, platform.int_bit);
187199
ASSERT_EQUALS(32, platform.long_bit);
188200
ASSERT_EQUALS(64, platform.long_long_bit);
201+
ASSERT_EQUALS(32, platform.float_bit);
202+
ASSERT_EQUALS(64, platform.double_bit);
203+
ASSERT_EQUALS(64, platform.long_double_bit);
189204
}
190205

191206
void valid_config_file_1() const {

0 commit comments

Comments
 (0)