baloghadamsoftware created this revision.
baloghadamsoftware added reviewers: alexfh, aaron.ballman, lebedev.ri,
JonasToth.
baloghadamsoftware added a project: clang-tools-extra.
Herald added subscribers: gamesh411, rnkovacs.
Herald added a project: clang.
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.
Repository:
rCTE Clang Tools Extra
https://reviews.llvm.org/D61260
Files:
clang-tidy/bugprone/SizeofExpressionCheck.cpp
test/clang-tidy/bugprone-sizeof-expression.cpp
Index: test/clang-tidy/bugprone-sizeof-expression.cpp
===================================================================
--- test/clang-tidy/bugprone-sizeof-expression.cpp
+++ test/clang-tidy/bugprone-sizeof-expression.cpp
@@ -193,11 +193,13 @@
Array10* ptr;
};
typedef const MyStruct TMyStruct;
+ typedef const MyStruct *PMyStruct;
static TMyStruct kGlocalMyStruct = {};
static TMyStruct volatile * kGlocalMyStructPtr = &kGlocalMyStruct;
MyStruct S;
+ PMyStruct PS;
Array10 A10;
int sum = 0;
@@ -225,6 +227,12 @@
// 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(&A10);
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of
'sizeof(A*)'; pointer to aggregate
Index: clang-tidy/bugprone/SizeofExpressionCheck.cpp
===================================================================
--- clang-tidy/bugprone/SizeofExpressionCheck.cpp
+++ clang-tidy/bugprone/SizeofExpressionCheck.cpp
@@ -142,10 +142,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: test/clang-tidy/bugprone-sizeof-expression.cpp
===================================================================
--- test/clang-tidy/bugprone-sizeof-expression.cpp
+++ test/clang-tidy/bugprone-sizeof-expression.cpp
@@ -193,11 +193,13 @@
Array10* ptr;
};
typedef const MyStruct TMyStruct;
+ typedef const MyStruct *PMyStruct;
static TMyStruct kGlocalMyStruct = {};
static TMyStruct volatile * kGlocalMyStructPtr = &kGlocalMyStruct;
MyStruct S;
+ PMyStruct PS;
Array10 A10;
int sum = 0;
@@ -225,6 +227,12 @@
// 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(&A10);
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious usage of 'sizeof(A*)'; pointer to aggregate
Index: clang-tidy/bugprone/SizeofExpressionCheck.cpp
===================================================================
--- clang-tidy/bugprone/SizeofExpressionCheck.cpp
+++ clang-tidy/bugprone/SizeofExpressionCheck.cpp
@@ -142,10 +142,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);
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits