From 167258a6bf436a8e3b0873c949da1ca3cb776c39 Mon Sep 17 00:00:00 2001 From: Dmitry-Me Date: Wed, 15 Nov 2017 22:40:16 +0300 Subject: [PATCH] Fix FNs when various types are passed as %tu into printf --- lib/checkio.cpp | 4 ++++ test/testio.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/checkio.cpp b/lib/checkio.cpp index 7cd9636a9..e59b828e3 100644 --- a/lib/checkio.cpp +++ b/lib/checkio.cpp @@ -1163,6 +1163,10 @@ void CheckIO::checkFormatString(const Token * const tok, if (!typesMatch(argInfo.typeToken->originalName(), "size_t")) invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); break; + case 't': + if (!typesMatch(argInfo.typeToken->originalName(), "ptrdiff_t")) + invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); + break; case 'I': if (specifier.find("I64") != std::string::npos) { if (argInfo.typeToken->str() != "long" || !argInfo.typeToken->isLong()) diff --git a/test/testio.cpp b/test/testio.cpp index 401f5a2fd..c0fafd95a 100644 --- a/test/testio.cpp +++ b/test/testio.cpp @@ -3741,14 +3741,14 @@ private: TEST_PRINTF_WARN_AKA("%zx", "size_t", "std::intptr_t", "signed long", "signed long long"); TEST_PRINTF_WARN_AKA("%zx", "size_t", "std::uintptr_t", "unsigned long", "unsigned long long"); - //TODO TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "bool"); + TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "bool"); TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "char"); TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "signed char"); - //TODO TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "unsigned char"); + TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "unsigned char"); TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "signed short"); - //TODO TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "unsigned short"); + TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "unsigned short"); TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "signed int"); - //TODO TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "unsigned int"); + TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "unsigned int"); TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "signed long"); TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "unsigned long"); TEST_PRINTF_WARN("%tu", "unsigned ptrdiff_t", "signed long long");