Skip to content

Commit f0a7365

Browse files
committed
Fix FN for ptrdiff_t passed as %Ix into printf
1 parent 20eaf3f commit f0a7365

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

lib/checkio.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1026,7 +1026,6 @@ void CheckIO::checkFormatString(const Token * const tok,
10261026
if (argInfo.typeToken->str() != "int" || argInfo.typeToken->isLong())
10271027
invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo);
10281028
} else if (!(typesMatch(argInfo.typeToken->originalName(), "size_t") ||
1029-
typesMatch(argInfo.typeToken->originalName(), "ptrdiff_t") ||
10301029
argInfo.typeToken->originalName() == "WPARAM" ||
10311030
argInfo.typeToken->originalName() == "UINT_PTR" ||
10321031
argInfo.typeToken->originalName() == "LONG_PTR" ||

test/testio.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3854,15 +3854,15 @@ class TestIO : public TestFixture {
38543854
TEST_PRINTF_WARN("%Ix", "size_t", "void *");
38553855
TEST_PRINTF_NOWARN("%Ix", "size_t", "size_t");
38563856
TEST_PRINTF_WARN_AKA("%Ix", "size_t", "ssize_t", "signed long", "signed long long");
3857-
//TODO TEST_PRINTF_WARN_AKA("%Ix", "size_t", "ptrdiff_t", "signed long", "signed long long");
3858-
//TODO TEST_PRINTF_WARN_AKA("%Ix", "size_t", "unsigned ptrdiff_t", "unsigned long", "unsigned long long");
3857+
TEST_PRINTF_WARN_AKA("%Ix", "size_t", "ptrdiff_t", "signed long", "signed long long");
3858+
TEST_PRINTF_WARN_AKA("%Ix", "size_t", "unsigned ptrdiff_t", "unsigned long", "unsigned long long");
38593859
TEST_PRINTF_WARN_AKA("%Ix", "size_t", "intmax_t", "signed long", "signed long long");
38603860
TEST_PRINTF_WARN_AKA("%Ix", "size_t", "uintmax_t", "unsigned long", "unsigned long long");
38613861
TEST_PRINTF_WARN_AKA("%Ix", "size_t", "intptr_t", "signed long", "signed long long");
38623862
TEST_PRINTF_WARN_AKA("%Ix", "size_t", "uintptr_t", "unsigned long", "unsigned long long");
38633863
TEST_PRINTF_NOWARN("%Ix", "size_t", "std::size_t");
38643864
TEST_PRINTF_WARN_AKA("%Ix", "size_t", "std::ssize_t", "signed long", "signed long long");
3865-
//TODO TEST_PRINTF_WARN_AKA("%Ix", "size_t", "std::ptrdiff_t", "signed long", "signed long long");
3865+
TEST_PRINTF_WARN_AKA("%Ix", "size_t", "std::ptrdiff_t", "signed long", "signed long long");
38663866
TEST_PRINTF_WARN_AKA("%Ix", "size_t", "std::intmax_t", "signed long", "signed long long");
38673867
TEST_PRINTF_WARN_AKA("%Ix", "size_t", "std::uintmax_t", "unsigned long", "unsigned long long");
38683868
TEST_PRINTF_WARN_AKA("%Ix", "size_t", "std::intptr_t", "signed long", "signed long long");
@@ -4050,6 +4050,7 @@ class TestIO : public TestFixture {
40504050
"}", false, true, Settings::Win32A);
40514051
ASSERT_EQUALS("[test.cpp:8]: (portability) %Id in format string (no. 1) requires 'ptrdiff_t' but the argument type is 'size_t {aka unsigned long}'.\n"
40524052
"[test.cpp:9]: (portability) %Iu in format string (no. 2) requires 'size_t' but the argument type is 'ptrdiff_t {aka signed long}'.\n"
4053+
"[test.cpp:9]: (portability) %Ix in format string (no. 3) requires 'size_t' but the argument type is 'ptrdiff_t {aka signed long}'.\n"
40534054
"[test.cpp:10]: (portability) %I32u in format string (no. 2) requires 'unsigned __int32' but the argument type is '__int32 {aka signed int}'.\n"
40544055
"[test.cpp:11]: (portability) %I32d in format string (no. 1) requires '__int32' but the argument type is 'unsigned __int32 {aka unsigned int}'.\n"
40554056
"[test.cpp:12]: (portability) %I64u in format string (no. 2) requires 'unsigned __int64' but the argument type is '__int64 {aka signed long long}'.\n"
@@ -4071,6 +4072,7 @@ class TestIO : public TestFixture {
40714072
"}", false, true, Settings::Win64);
40724073
ASSERT_EQUALS("[test.cpp:8]: (portability) %Id in format string (no. 1) requires 'ptrdiff_t' but the argument type is 'size_t {aka unsigned long long}'.\n"
40734074
"[test.cpp:9]: (portability) %Iu in format string (no. 2) requires 'size_t' but the argument type is 'ptrdiff_t {aka signed long long}'.\n"
4075+
"[test.cpp:9]: (portability) %Ix in format string (no. 3) requires 'size_t' but the argument type is 'ptrdiff_t {aka signed long long}'.\n"
40744076
"[test.cpp:10]: (portability) %I32u in format string (no. 2) requires 'unsigned __int32' but the argument type is '__int32 {aka signed int}'.\n"
40754077
"[test.cpp:11]: (portability) %I32d in format string (no. 1) requires '__int32' but the argument type is 'unsigned __int32 {aka unsigned int}'.\n"
40764078
"[test.cpp:12]: (portability) %I64u in format string (no. 2) requires 'unsigned __int64' but the argument type is '__int64 {aka signed long long}'.\n"

0 commit comments

Comments
 (0)