From ff60af91ac0bbab12dd5ff5dc9b78bc1636f2d86 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Danny=20M=C3=B6sch?= Date: Sun, 27 Mar 2022 16:41:32 +0200 Subject: [PATCH] [clang-tidy] Utilize comparison operation implemented in APInt This is a fix for #53963. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D122544 --- clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp | 2 +- clang-tools-extra/docs/ReleaseNotes.rst | 3 +++ .../test/clang-tidy/checkers/bugprone-sizeof-expression.cpp | 5 ++++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp index 5bdf01c..4c537af 100644 --- a/clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp @@ -20,7 +20,7 @@ namespace bugprone { namespace { AST_MATCHER_P(IntegerLiteral, isBiggerThan, unsigned, N) { - return Node.getValue().getZExtValue() > N; + return Node.getValue().ugt(N); } AST_MATCHER_P2(Expr, hasSizeOfDescendant, int, Depth, diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 2d144aa..729bb3b 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -122,6 +122,9 @@ Changes in existing checks - Fixed a false positive in :doc:`misc-redundant-expression ` involving overloaded comparison operators. +- Fixed a crash in :doc:`bugprone-sizeof-expression ` when + `sizeof(...)` is compared agains a `__int128_t`. + Removed checks ^^^^^^^^^^^^^^ diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone-sizeof-expression.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone-sizeof-expression.cpp index 21d4532..605243c 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/bugprone-sizeof-expression.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone-sizeof-expression.cpp @@ -172,7 +172,10 @@ int Foo() { int A[T]; return sizeof(T); } template int Bar() { T A[5]; return sizeof(A[0]) / sizeof(T); } // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: suspicious usage of sizeof pointer 'sizeof(T)/sizeof(T)' -int Test3() { return Foo<42>() + Bar(); } +template <__int128_t N> +bool Baz() { return sizeof(A) < N; } +// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: suspicious comparison of 'sizeof(expr)' to a constant +int Test3() { return Foo<42>() + Bar() + Baz<-1>(); } static const char* kABC = "abc"; static const wchar_t* kDEF = L"def"; -- 2.7.4