Index: clang-tools-extra/trunk/clang-tidy/bugprone/SizeofExpressionCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/bugprone/SizeofExpressionCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/bugprone/SizeofExpressionCheck.cpp @@ -145,10 +145,17 @@ 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); Index: clang-tools-extra/trunk/test/clang-tidy/bugprone-sizeof-expression.cpp =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/bugprone-sizeof-expression.cpp +++ clang-tools-extra/trunk/test/clang-tidy/bugprone-sizeof-expression.cpp @@ -193,11 +193,15 @@ 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 @@ // 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