From c9eb6d8217672b52842060e52a71bccb173fb8cc Mon Sep 17 00:00:00 2001 From: Victor Chernyakin Date: Fri, 10 Oct 2025 08:45:26 -0700 Subject: [PATCH 1/2] [clang-tidy] Fix broken fix-its with `bugprone-not-null-terminated-result` on Windows --- .../clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp | 7 +++---- clang-tools-extra/docs/ReleaseNotes.rst | 4 ++++ .../checkers/bugprone/not-null-terminated-result-strlen.c | 5 ----- .../bugprone/not-null-terminated-result-wcslen.cpp | 5 ----- 4 files changed, 7 insertions(+), 14 deletions(-) diff --git a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp index d4676842a97ff..39e3a542aaf6b 100644 --- a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp @@ -307,10 +307,9 @@ static void lengthExprHandle(const Expr *LengthExpr, // Try to obtain an 'IntegerLiteral' and adjust it. if (!IsMacroDefinition) { if (const auto *LengthIL = dyn_cast(LengthExpr)) { - size_t NewLength = LengthIL->getValue().getZExtValue() + - (LengthHandle == LengthHandleKind::Increase - ? (isInjectUL(Result) ? 1UL : 1) - : -1); + uint64_t NewLength = + LengthIL->getValue().getZExtValue() + + (LengthHandle == LengthHandleKind::Increase ? 1 : -1); const auto NewLengthFix = FixItHint::CreateReplacement( LengthIL->getSourceRange(), diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index d2d79dcc92ec2..f0b21b88dd998 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -274,6 +274,10 @@ Changes in existing checks ` check by fixing false positive from analysis of a conditional expression in C. +- Improved :doc:`bugprone-not-null-terminated-result + ` check by fixing + bogus fix-its for `strncmp` and `wcsncmp` on Windows. + - Improved :doc:`bugprone-reserved-identifier ` check by ignoring declarations and macros in system headers. diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/not-null-terminated-result-strlen.c b/clang-tools-extra/test/clang-tidy/checkers/bugprone/not-null-terminated-result-strlen.c index 366c1698e4f2d..795ab3d652f9f 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/not-null-terminated-result-strlen.c +++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/not-null-terminated-result-strlen.c @@ -1,11 +1,6 @@ // RUN: %check_clang_tidy --match-partial-fixes %s bugprone-not-null-terminated-result %t -- \ // RUN: -- -I %S/Inputs/not-null-terminated-result -// FIXME: Something wrong with the APInt un/signed conversion on Windows: -// in 'strncmp(str6, "string", 7);' it tries to inject '4294967302' as length. - -// UNSUPPORTED: system-windows - #include "not-null-terminated-result-c.h" #define __STDC_LIB_EXT1__ 1 diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/not-null-terminated-result-wcslen.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/not-null-terminated-result-wcslen.cpp index 06e2db9d6e0d6..288c5faabb0ec 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/not-null-terminated-result-wcslen.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/not-null-terminated-result-wcslen.cpp @@ -1,11 +1,6 @@ // RUN: %check_clang_tidy --match-partial-fixes %s bugprone-not-null-terminated-result %t -- \ // RUN: -- -std=c++11 -I %S/Inputs/not-null-terminated-result -// FIXME: Something wrong with the APInt un/signed conversion on Windows: -// in 'wcsncmp(wcs6, L"string", 7);' it tries to inject '4294967302' as length. - -// UNSUPPORTED: system-windows - #include "not-null-terminated-result-cxx.h" #define __STDC_LIB_EXT1__ 1 From ec3700852b6290c5513ed3746cba568cfbd74ca0 Mon Sep 17 00:00:00 2001 From: Victor Chernyakin Date: Fri, 10 Oct 2025 10:20:07 -0700 Subject: [PATCH 2/2] Double backticks for code snippets Co-authored-by: EugeneZelenko --- clang-tools-extra/docs/ReleaseNotes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index f0b21b88dd998..d9a591cc1036f 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -276,7 +276,7 @@ Changes in existing checks - Improved :doc:`bugprone-not-null-terminated-result ` check by fixing - bogus fix-its for `strncmp` and `wcsncmp` on Windows. + bogus fix-its for ``strncmp`` and ``wcsncmp`` on Windows. - Improved :doc:`bugprone-reserved-identifier ` check by ignoring