Author: Congcong Cai Date: 2024-11-12T11:36:33+08:00 New Revision: e855feac41fd89aebf540a155d21f12a3e82f05b
URL: https://github.com/llvm/llvm-project/commit/e855feac41fd89aebf540a155d21f12a3e82f05b DIFF: https://github.com/llvm/llvm-project/commit/e855feac41fd89aebf540a155d21f12a3e82f05b.diff LOG: [clang-tidy] fix bugprone-sizeof-expression when sizeof expression with template types (#115275) Fixed: #115175. `dependent type` are not the same even pointers are the same. --------- Co-authored-by: whisperity <whisper...@gmail.com> Added: Modified: clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/test/clang-tidy/checkers/bugprone/sizeof-expression.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp index 628d30ce7f73fe..f3d4c2255d86ec 100644 --- a/clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp @@ -400,7 +400,9 @@ void SizeofExpressionCheck::check(const MatchFinder::MatchResult &Result) { "suspicious usage of 'sizeof(array)/sizeof(...)';" " denominator diff ers from the size of array elements") << E->getLHS()->getSourceRange() << E->getRHS()->getSourceRange(); - } else if (NumTy && DenomTy && NumTy == DenomTy) { + } else if (NumTy && DenomTy && NumTy == DenomTy && + !NumTy->isDependentType()) { + // Dependent type should not be compared. diag(E->getOperatorLoc(), "suspicious usage of 'sizeof(...)/sizeof(...)'; both expressions " "have the same type") diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 442fb7180555ea..db971f08ca3dbc 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -175,7 +175,8 @@ Changes in existing checks - Improved :doc:`bugprone-sizeof-expression <clang-tidy/checks/bugprone/sizeof-expression>` check to find suspicious usages of ``sizeof()``, ``alignof()``, and ``offsetof()`` when adding or - subtracting from a pointer directly or when used to scale a numeric value. + subtracting from a pointer directly or when used to scale a numeric value and + fix false positive when sizeof expression with template types. - Improved :doc:`bugprone-throw-keyword-missing <clang-tidy/checks/bugprone/throw-keyword-missing>` by fixing a false positive 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 81efd87345c97e..5e6f394152e9d1 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 @@ -385,3 +385,10 @@ int ValidExpressions() { sum += sizeof(PtrArray) / sizeof(A[0]); return sum; } + +namespace gh115175 { +template<class T> +int ValidateTemplateTypeExpressions(T t) { + return sizeof(t.val) / sizeof(t.val[0]); +} +} // namespace gh115175 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits