Author: baloghadamsoftware Date: Mon May 6 23:16:02 2019 New Revision: 360114
URL: http://llvm.org/viewvc/llvm-project?rev=360114&view=rev Log: [clang-tidy] Extend bugprone-sizeof-expression to check sizeof(pointers to structures) Accidentally taking the size of a struct-pointer type or a value of this type is more common than explicitly using the & operator for the value. This patch extends the check to include these cases. Differential Revision: https://reviews.llvm.org/D61260 Modified: clang-tools-extra/trunk/clang-tidy/bugprone/SizeofExpressionCheck.cpp clang-tools-extra/trunk/test/clang-tidy/bugprone-sizeof-expression.cpp Modified: clang-tools-extra/trunk/clang-tidy/bugprone/SizeofExpressionCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/bugprone/SizeofExpressionCheck.cpp?rev=360114&r1=360113&r2=360114&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/bugprone/SizeofExpressionCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/bugprone/SizeofExpressionCheck.cpp Mon May 6 23:16:02 2019 @@ -145,10 +145,17 @@ void SizeofExpressionCheck::registerMatc unaryOperator(hasOperatorName("&"), hasUnaryOperand(ignoringParenImpCasts(expr( hasType(qualType(hasCanonicalType(recordType()))))))); + const auto PointerToStructType = type(hasUnqualifiedDesugaredType( + pointerType(pointee(recordType())))); + const auto PointerToStructExpr = expr(ignoringParenImpCasts(expr( + hasType(qualType(hasCanonicalType(PointerToStructType))), + unless(cxxThisExpr())))); Finder->addMatcher( - expr(sizeOfExpr(has(expr(ignoringParenImpCasts( - anyOf(ArrayCastExpr, PointerToArrayExpr, StructAddrOfExpr)))))) + expr(anyOf(sizeOfExpr(has(expr(ignoringParenImpCasts( + anyOf(ArrayCastExpr, PointerToArrayExpr, StructAddrOfExpr, + PointerToStructExpr))))), + sizeOfExpr(has(PointerToStructType)))) .bind("sizeof-pointer-to-aggregate"), this); Modified: clang-tools-extra/trunk/test/clang-tidy/bugprone-sizeof-expression.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/bugprone-sizeof-expression.cpp?rev=360114&r1=360113&r2=360114&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/bugprone-sizeof-expression.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/bugprone-sizeof-expression.cpp Mon May 6 23:16:02 2019 @@ -193,11 +193,15 @@ int Test5() { Array10* ptr; }; typedef const MyStruct TMyStruct; + typedef const MyStruct *PMyStruct; + typedef TMyStruct *PMyStruct2; static TMyStruct kGlocalMyStruct = {}; static TMyStruct volatile * kGlocalMyStructPtr = &kGlocalMyStruct; MyStruct S; + PMyStruct PS; + PMyStruct2 PS2; Array10 A10; int sum = 0; @@ -225,6 +229,14 @@ int Test5() { // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof(A*)'; pointer to aggregate sum += sizeof(&S); // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof(A*)'; pointer to aggregate + sum += sizeof(MyStruct*); + // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof(A*)'; pointer to aggregate + sum += sizeof(PMyStruct); + // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof(A*)'; pointer to aggregate + sum += sizeof(PS); + // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof(A*)'; pointer to aggregate + sum += sizeof(PS2); + // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof(A*)'; pointer to aggregate sum += sizeof(&A10); // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof(A*)'; pointer to aggregate _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits