summaryrefslogtreecommitdiff
path: root/core/fxcrt
diff options
context:
space:
mode:
authorweili <weili@chromium.org>2016-03-31 15:08:27 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-31 15:08:27 -0700
commit47ca692c8150cb39abef5737e866b91e6a105b80 (patch)
treecba8531fe7a569cfa7f05dc84f158bf1cf15be23 /core/fxcrt
parentde0d852ed91973deda41f949e132b12a2efff1ef (diff)
downloadpdfium-47ca692c8150cb39abef5737e866b91e6a105b80.tar.xz
Re-enable all the windows warnings except 4267
The code is changed or had been changed to no longer generate these warnings. It is safe to re-enabled these warnings. In this code change, we fixed some code which generates warnings 4018 (signed/unsigned mismatch) and 4146 (unary minus operator applied to unsigned type, result still unsigned). Warning 4333 (right shift by too large amount, data loss) and 4345 (an object of POD type constructed with an initializer of the form () will be default-initialized) are no longer generated. The same setting is applied and verified for GN build as well. BUG=pdfium:29 Review URL: https://codereview.chromium.org/1849443003
Diffstat (limited to 'core/fxcrt')
-rw-r--r--core/fxcrt/fx_basic_gcc.cpp5
-rw-r--r--core/fxcrt/fx_basic_gcc_unittest.cpp11
2 files changed, 10 insertions, 6 deletions
diff --git a/core/fxcrt/fx_basic_gcc.cpp b/core/fxcrt/fx_basic_gcc.cpp
index 1b2f01ec89..c3afe1115b 100644
--- a/core/fxcrt/fx_basic_gcc.cpp
+++ b/core/fxcrt/fx_basic_gcc.cpp
@@ -39,7 +39,10 @@ IntType FXSYS_StrToInt(const CharType* str) {
num = num * 10 + val;
str++;
}
- return neg ? -num : num;
+ // When it is a negative value, -num should be returned. Since num may be of
+ // unsigned type, use ~num + 1 to avoid the warning of applying unary minus
+ // operator to unsigned type.
+ return neg ? ~num + 1 : num;
}
template <typename T, typename UT, typename STR_T>
diff --git a/core/fxcrt/fx_basic_gcc_unittest.cpp b/core/fxcrt/fx_basic_gcc_unittest.cpp
index c6913cfd82..73e7446de0 100644
--- a/core/fxcrt/fx_basic_gcc_unittest.cpp
+++ b/core/fxcrt/fx_basic_gcc_unittest.cpp
@@ -16,15 +16,16 @@ TEST(fxcrt, FXSYS_atoi) {
EXPECT_EQ(2345, FXSYS_atoi("+2345"));
// The max value.
EXPECT_EQ(2147483647, FXSYS_atoi("2147483647"));
- // The min value.
- EXPECT_EQ(-2147483648, FXSYS_atoi("-2147483648"));
+ // The min value. Written in -1 format to avoid "unary minus operator applied
+ // to unsigned type" warning.
+ EXPECT_EQ(-2147483647 - 1, FXSYS_atoi("-2147483648"));
// With invalid char.
EXPECT_EQ(9, FXSYS_atoi("9x9"));
// Out of range values.
EXPECT_EQ(2147483647, FXSYS_atoi("2147483623423412348"));
EXPECT_EQ(2147483647, FXSYS_atoi("2147483648"));
- EXPECT_EQ(-2147483648, FXSYS_atoi("-2147483650"));
+ EXPECT_EQ(-2147483647 - 1, FXSYS_atoi("-2147483650"));
}
TEST(fxcrt, FXSYS_atoi64) {
@@ -58,13 +59,13 @@ TEST(fxcrt, FXSYS_wtoi) {
// The max value.
EXPECT_EQ(2147483647, FXSYS_wtoi(L"2147483647"));
// The min value.
- EXPECT_EQ(-2147483648, FXSYS_wtoi(L"-2147483648"));
+ EXPECT_EQ(-2147483647 - 1, FXSYS_wtoi(L"-2147483648"));
EXPECT_EQ(9, FXSYS_wtoi64(L"9x9"));
// Out of range values.
EXPECT_EQ(2147483647, FXSYS_wtoi(L"2147483623423412348"));
EXPECT_EQ(2147483647, FXSYS_wtoi(L"2147483648"));
- EXPECT_EQ(-2147483648, FXSYS_wtoi(L"-2147483652"));
+ EXPECT_EQ(-2147483647 - 1, FXSYS_wtoi(L"-2147483652"));
}
TEST(fxcrt, FXSYS_wtoi64) {