summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/misc
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc')
-rw-r--r--clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp9
-rw-r--r--clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp21
-rw-r--r--clang-tools-extra/clang-tidy/misc/InaccurateEraseCheck.cpp11
-rw-r--r--clang-tools-extra/clang-tidy/misc/IncorrectRoundings.cpp3
-rw-r--r--clang-tools-extra/clang-tidy/misc/InefficientAlgorithmCheck.cpp13
-rw-r--r--clang-tools-extra/clang-tidy/misc/MisplacedWideningCastCheck.cpp7
-rw-r--r--clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp4
-rw-r--r--clang-tools-extra/clang-tidy/misc/SizeofExpressionCheck.cpp33
-rw-r--r--clang-tools-extra/clang-tidy/misc/StaticAssertCheck.cpp7
-rw-r--r--clang-tools-extra/clang-tidy/misc/SuspiciousMissingCommaCheck.cpp2
-rw-r--r--clang-tools-extra/clang-tidy/misc/SuspiciousStringCompareCheck.cpp5
-rw-r--r--clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp4
-rw-r--r--clang-tools-extra/clang-tidy/misc/UniqueptrResetReleaseCheck.cpp4
-rw-r--r--clang-tools-extra/clang-tidy/misc/UnusedRAIICheck.cpp15
14 files changed, 78 insertions, 60 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp b/clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp
index cd86fea3dff..f293be45f4f 100644
--- a/clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp
@@ -47,15 +47,18 @@ void BoolPointerImplicitConversionCheck::check(
auto DeclRef = ignoringParenImpCasts(declRefExpr(to(equalsNode(D))));
if (!match(findAll(
unaryOperator(hasOperatorName("*"), hasUnaryOperand(DeclRef))),
- *If, *Result.Context).empty() ||
+ *If, *Result.Context)
+ .empty() ||
!match(findAll(arraySubscriptExpr(hasBase(DeclRef))), *If,
- *Result.Context).empty() ||
+ *Result.Context)
+ .empty() ||
// FIXME: We should still warn if the paremater is implicitly converted to
// bool.
!match(findAll(callExpr(hasAnyArgument(ignoringParenImpCasts(DeclRef)))),
*If, *Result.Context)
.empty() ||
- !match(findAll(cxxDeleteExpr(has(expr(DeclRef)))), *If, *Result.Context)
+ !match(findAll(cxxDeleteExpr(has(ignoringParenImpCasts(expr(DeclRef))))),
+ *If, *Result.Context)
.empty())
return;
diff --git a/clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp b/clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp
index d9040ad0ed7..ed2527e42cf 100644
--- a/clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp
@@ -103,15 +103,17 @@ void DanglingHandleCheck::registerMatchersForVariables(MatchFinder *Finder) {
Finder->addMatcher(
varDecl(hasType(cxxRecordDecl(IsAHandle)),
hasInitializer(
- exprWithCleanups(has(ConvertedHandle)).bind("bad_stmt"))),
+ exprWithCleanups(has(ignoringParenImpCasts(ConvertedHandle)))
+ .bind("bad_stmt"))),
this);
// Find 'Handle foo = ReturnsAValue();'
Finder->addMatcher(
- varDecl(hasType(cxxRecordDecl(IsAHandle)), unless(parmVarDecl()),
- hasInitializer(
- exprWithCleanups(has(handleFrom(IsAHandle, ConvertedHandle)))
- .bind("bad_stmt"))),
+ varDecl(
+ hasType(cxxRecordDecl(IsAHandle)), unless(parmVarDecl()),
+ hasInitializer(exprWithCleanups(has(ignoringParenImpCasts(handleFrom(
+ IsAHandle, ConvertedHandle))))
+ .bind("bad_stmt"))),
this);
// Find 'foo = ReturnsAValue(); // foo is Handle'
Finder->addMatcher(
@@ -133,7 +135,7 @@ void DanglingHandleCheck::registerMatchersForReturn(MatchFinder *Finder) {
// 1. Value to Handle conversion.
// 2. Handle copy construction.
// We have to match both.
- has(handleFrom(
+ has(ignoringParenImpCasts(handleFrom(
IsAHandle,
handleFrom(IsAHandle, declRefExpr(to(varDecl(
// Is function scope ...
@@ -141,7 +143,7 @@ void DanglingHandleCheck::registerMatchersForReturn(MatchFinder *Finder) {
// ... and it is a local array or Value.
anyOf(hasType(arrayType()),
hasType(recordDecl(
- unless(IsAHandle)))))))))),
+ unless(IsAHandle))))))))))),
// Temporary fix for false positives inside lambdas.
unless(hasAncestor(lambdaExpr())))
.bind("bad_stmt"),
@@ -149,8 +151,9 @@ void DanglingHandleCheck::registerMatchersForReturn(MatchFinder *Finder) {
// Return a temporary.
Finder->addMatcher(
- returnStmt(has(exprWithCleanups(has(handleFrom(
- IsAHandle, handleFromTemporaryValue(IsAHandle))))))
+ returnStmt(
+ has(ignoringParenImpCasts(exprWithCleanups(has(ignoringParenImpCasts(
+ handleFrom(IsAHandle, handleFromTemporaryValue(IsAHandle))))))))
.bind("bad_stmt"),
this);
}
diff --git a/clang-tools-extra/clang-tidy/misc/InaccurateEraseCheck.cpp b/clang-tools-extra/clang-tidy/misc/InaccurateEraseCheck.cpp
index 6e69f2a4e41..7c8a132e5e5 100644
--- a/clang-tools-extra/clang-tidy/misc/InaccurateEraseCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/InaccurateEraseCheck.cpp
@@ -25,19 +25,20 @@ void InaccurateEraseCheck::registerMatchers(MatchFinder *Finder) {
return;
const auto CheckForEndCall = hasArgument(
- 1, anyOf(cxxConstructExpr(
- has(cxxMemberCallExpr(callee(cxxMethodDecl(hasName("end"))))
- .bind("InaccEndCall"))),
+ 1, anyOf(cxxConstructExpr(has(ignoringParenImpCasts(
+ cxxMemberCallExpr(callee(cxxMethodDecl(hasName("end"))))
+ .bind("InaccEndCall")))),
anything()));
Finder->addMatcher(
cxxMemberCallExpr(
on(hasType(namedDecl(matchesName("^::std::")))),
callee(cxxMethodDecl(hasName("erase"))), argumentCountIs(1),
- hasArgument(0, has(callExpr(callee(functionDecl(matchesName(
+ hasArgument(0, has(ignoringParenImpCasts(
+ callExpr(callee(functionDecl(matchesName(
"^::std::(remove(_if)?|unique)$"))),
CheckForEndCall)
- .bind("InaccAlgCall"))),
+ .bind("InaccAlgCall")))),
unless(isInTemplateInstantiation()))
.bind("InaccErase"),
this);
diff --git a/clang-tools-extra/clang-tidy/misc/IncorrectRoundings.cpp b/clang-tools-extra/clang-tidy/misc/IncorrectRoundings.cpp
index 9a487b8112a..ee6f666f0ce 100644
--- a/clang-tools-extra/clang-tidy/misc/IncorrectRoundings.cpp
+++ b/clang-tools-extra/clang-tidy/misc/IncorrectRoundings.cpp
@@ -42,7 +42,8 @@ void IncorrectRoundings::registerMatchers(MatchFinder *MatchFinder) {
// Match a floating literal of 0.5 or a floating literal of 0.5 implicitly.
// cast to floating type.
auto FloatOrCastHalf =
- anyOf(FloatHalf, implicitCastExpr(FloatType, has(FloatHalf)));
+ anyOf(FloatHalf,
+ implicitCastExpr(FloatType, has(ignoringParenImpCasts(FloatHalf))));
// Match if either the LHS or RHS is a floating literal of 0.5 or a floating
// literal of 0.5 and the other is of type double or vice versa.
diff --git a/clang-tools-extra/clang-tidy/misc/InefficientAlgorithmCheck.cpp b/clang-tools-extra/clang-tidy/misc/InefficientAlgorithmCheck.cpp
index 0dea909f8ed..810118608da 100644
--- a/clang-tools-extra/clang-tidy/misc/InefficientAlgorithmCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/InefficientAlgorithmCheck.cpp
@@ -45,18 +45,19 @@ void InefficientAlgorithmCheck::registerMatchers(MatchFinder *Finder) {
callExpr(
callee(functionDecl(Algorithms)),
hasArgument(
- 0, cxxConstructExpr(has(cxxMemberCallExpr(
+ 0, cxxConstructExpr(has(ignoringParenImpCasts(cxxMemberCallExpr(
callee(cxxMethodDecl(hasName("begin"))),
on(declRefExpr(
hasDeclaration(decl().bind("IneffContObj")),
anyOf(hasType(ContainerMatcher.bind("IneffCont")),
hasType(pointsTo(
ContainerMatcher.bind("IneffContPtr")))))
- .bind("IneffContExpr")))))),
- hasArgument(1, cxxConstructExpr(has(cxxMemberCallExpr(
- callee(cxxMethodDecl(hasName("end"))),
- on(declRefExpr(hasDeclaration(
- equalsBoundNode("IneffContObj")))))))),
+ .bind("IneffContExpr"))))))),
+ hasArgument(
+ 1, cxxConstructExpr(has(ignoringParenImpCasts(cxxMemberCallExpr(
+ callee(cxxMethodDecl(hasName("end"))),
+ on(declRefExpr(
+ hasDeclaration(equalsBoundNode("IneffContObj"))))))))),
hasArgument(2, expr().bind("AlgParam")),
unless(isInTemplateInstantiation()))
.bind("IneffAlg");
diff --git a/clang-tools-extra/clang-tidy/misc/MisplacedWideningCastCheck.cpp b/clang-tools-extra/clang-tidy/misc/MisplacedWideningCastCheck.cpp
index 101c0a1267d..7919258e650 100644
--- a/clang-tools-extra/clang-tidy/misc/MisplacedWideningCastCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/MisplacedWideningCastCheck.cpp
@@ -37,10 +37,11 @@ void MisplacedWideningCastCheck::registerMatchers(MatchFinder *Finder) {
hasType(isInteger()))
.bind("Calc");
- const auto ExplicitCast =
- explicitCastExpr(hasDestinationType(isInteger()), has(Calc));
+ const auto ExplicitCast = explicitCastExpr(hasDestinationType(isInteger()),
+ has(ignoringParenImpCasts(Calc)));
const auto ImplicitCast =
- implicitCastExpr(hasImplicitDestinationType(isInteger()), has(Calc));
+ implicitCastExpr(hasImplicitDestinationType(isInteger()),
+ has(ignoringParenImpCasts(Calc)));
const auto Cast = expr(anyOf(ExplicitCast, ImplicitCast)).bind("Cast");
Finder->addMatcher(varDecl(hasInitializer(Cast)), this);
diff --git a/clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp b/clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp
index d591e46181d..188d28ae2c4 100644
--- a/clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/SizeofContainerCheck.cpp
@@ -20,12 +20,12 @@ namespace misc {
void SizeofContainerCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(
expr(unless(isInTemplateInstantiation()),
- expr(sizeOfExpr(has(
+ expr(sizeOfExpr(has(ignoringParenImpCasts(
expr(hasType(hasCanonicalType(hasDeclaration(cxxRecordDecl(
matchesName("^(::std::|::string)"),
unless(matchesName("^::std::(bitset|array)$")),
hasMethod(cxxMethodDecl(hasName("size"), isPublic(),
- isConst()))))))))))
+ isConst())))))))))))
.bind("sizeof"),
// Ignore ARRAYSIZE(<array of containers>) pattern.
unless(hasAncestor(binaryOperator(
diff --git a/clang-tools-extra/clang-tidy/misc/SizeofExpressionCheck.cpp b/clang-tools-extra/clang-tidy/misc/SizeofExpressionCheck.cpp
index e310e322a6f..ea40b2cfc39 100644
--- a/clang-tools-extra/clang-tidy/misc/SizeofExpressionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/SizeofExpressionCheck.cpp
@@ -81,21 +81,23 @@ void SizeofExpressionCheck::registerMatchers(MatchFinder *Finder) {
const auto SizeOfExpr =
expr(anyOf(sizeOfExpr(has(type())), sizeOfExpr(has(expr()))));
const auto SizeOfZero = expr(
- sizeOfExpr(has(expr(ignoringParenImpCasts(integerLiteral(equals(0)))))));
+ sizeOfExpr(has(ignoringParenImpCasts(expr(integerLiteral(equals(0)))))));
// Detect expression like: sizeof(ARRAYLEN);
// Note: The expression 'sizeof(sizeof(0))' is a portable trick used to know
// the sizeof size_t.
if (WarnOnSizeOfConstant) {
- Finder->addMatcher(expr(sizeOfExpr(has(ConstantExpr)), unless(SizeOfZero))
- .bind("sizeof-constant"),
- this);
+ Finder->addMatcher(
+ expr(sizeOfExpr(has(ignoringParenImpCasts(ConstantExpr))),
+ unless(SizeOfZero))
+ .bind("sizeof-constant"),
+ this);
}
// Detect expression like: sizeof(this);
if (WarnOnSizeOfThis) {
Finder->addMatcher(
- expr(sizeOfExpr(has(expr(ignoringParenImpCasts(cxxThisExpr())))))
+ expr(sizeOfExpr(has(ignoringParenImpCasts(expr(cxxThisExpr())))))
.bind("sizeof-this"),
this);
}
@@ -105,12 +107,12 @@ void SizeofExpressionCheck::registerMatchers(MatchFinder *Finder) {
const auto ConstStrLiteralDecl =
varDecl(isDefinition(), hasType(qualType(hasCanonicalType(CharPtrType))),
hasInitializer(ignoringParenImpCasts(stringLiteral())));
- Finder->addMatcher(
- expr(sizeOfExpr(has(expr(hasType(qualType(hasCanonicalType(CharPtrType))),
- ignoringParenImpCasts(declRefExpr(
- hasDeclaration(ConstStrLiteralDecl)))))))
- .bind("sizeof-charp"),
- this);
+ Finder->addMatcher(expr(sizeOfExpr(has(ignoringParenImpCasts(expr(
+ hasType(qualType(hasCanonicalType(CharPtrType))),
+ ignoringParenImpCasts(declRefExpr(
+ hasDeclaration(ConstStrLiteralDecl))))))))
+ .bind("sizeof-charp"),
+ this);
// Detect sizeof(ptr) where ptr points to an aggregate (i.e. sizeof(&S)).
const auto ArrayExpr = expr(ignoringParenImpCasts(
@@ -188,10 +190,11 @@ void SizeofExpressionCheck::registerMatchers(MatchFinder *Finder) {
// Detect strange double-sizeof expression like: sizeof(sizeof(...));
// Note: The expression 'sizeof(sizeof(0))' is accepted.
- Finder->addMatcher(expr(sizeOfExpr(has(expr(hasSizeOfDescendant(
- 8, expr(SizeOfExpr, unless(SizeOfZero)))))))
- .bind("sizeof-sizeof-expr"),
- this);
+ Finder->addMatcher(
+ expr(sizeOfExpr(has(ignoringParenImpCasts(expr(
+ hasSizeOfDescendant(8, expr(SizeOfExpr, unless(SizeOfZero))))))))
+ .bind("sizeof-sizeof-expr"),
+ this);
}
void SizeofExpressionCheck::check(const MatchFinder::MatchResult &Result) {
diff --git a/clang-tools-extra/clang-tidy/misc/StaticAssertCheck.cpp b/clang-tools-extra/clang-tidy/misc/StaticAssertCheck.cpp
index 39eb7896a4e..6a7dc6cb565 100644
--- a/clang-tools-extra/clang-tidy/misc/StaticAssertCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/StaticAssertCheck.cpp
@@ -33,12 +33,13 @@ void StaticAssertCheck::registerMatchers(MatchFinder *Finder) {
if (!(getLangOpts().CPlusPlus11 || getLangOpts().C11))
return;
- auto IsAlwaysFalse = expr(ignoringParenImpCasts(
+ auto IsAlwaysFalse =
expr(anyOf(cxxBoolLiteral(equals(false)), integerLiteral(equals(0)),
cxxNullPtrLiteralExpr(), gnuNullExpr()))
- .bind("isAlwaysFalse")));
+ .bind("isAlwaysFalse");
auto IsAlwaysFalseWithCast = ignoringParenImpCasts(anyOf(
- IsAlwaysFalse, cStyleCastExpr(has(IsAlwaysFalse)).bind("castExpr")));
+ IsAlwaysFalse, cStyleCastExpr(has(ignoringParenImpCasts(IsAlwaysFalse)))
+ .bind("castExpr")));
auto AssertExprRoot = anyOf(
binaryOperator(
anyOf(hasOperatorName("&&"), hasOperatorName("==")),
diff --git a/clang-tools-extra/clang-tidy/misc/SuspiciousMissingCommaCheck.cpp b/clang-tools-extra/clang-tidy/misc/SuspiciousMissingCommaCheck.cpp
index be983aa9233..3881a1f404e 100644
--- a/clang-tools-extra/clang-tidy/misc/SuspiciousMissingCommaCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/SuspiciousMissingCommaCheck.cpp
@@ -88,7 +88,7 @@ void SuspiciousMissingCommaCheck::registerMatchers(MatchFinder *Finder) {
const auto StringsInitializerList =
initListExpr(hasType(constantArrayType()),
- has(expr(ignoringImpCasts(ConcatenatedStringLiteral))));
+ has(ignoringParenImpCasts(expr(ConcatenatedStringLiteral))));
Finder->addMatcher(StringsInitializerList.bind("list"), this);
}
diff --git a/clang-tools-extra/clang-tidy/misc/SuspiciousStringCompareCheck.cpp b/clang-tools-extra/clang-tidy/misc/SuspiciousStringCompareCheck.cpp
index f364d118095..9315ff5fb2f 100644
--- a/clang-tools-extra/clang-tidy/misc/SuspiciousStringCompareCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/SuspiciousStringCompareCheck.cpp
@@ -156,8 +156,9 @@ void SuspiciousStringCompareCheck::registerMatchers(MatchFinder *Finder) {
// Detect comparison to invalid constant: 'strcmp() == -1'.
const auto InvalidLiteral = ignoringParenImpCasts(
anyOf(integerLiteral(unless(equals(0))),
- unaryOperator(hasOperatorName("-"),
- has(integerLiteral(unless(equals(0))))),
+ unaryOperator(
+ hasOperatorName("-"),
+ has(ignoringParenImpCasts(integerLiteral(unless(equals(0)))))),
characterLiteral(), cxxBoolLiteral()));
Finder->addMatcher(binaryOperator(matchers::isComparisonOperator(),
diff --git a/clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp b/clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp
index 75d927bcd9b..51c23964ecb 100644
--- a/clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp
@@ -56,8 +56,8 @@ void UnconventionalAssignOperatorCheck::registerMatchers(ast_matchers::MatchFind
cxxMethodDecl(IsSelfAssign, anyOf(isConst(), isVirtual())).bind("cv"),
this);
- const auto IsBadReturnStatement = returnStmt(unless(has(
- unaryOperator(hasOperatorName("*"), hasUnaryOperand(cxxThisExpr())))));
+ const auto IsBadReturnStatement = returnStmt(unless(has(ignoringParenImpCasts(
+ unaryOperator(hasOperatorName("*"), hasUnaryOperand(cxxThisExpr()))))));
const auto IsGoodAssign = cxxMethodDecl(IsAssign, HasGoodReturnType);
Finder->addMatcher(returnStmt(IsBadReturnStatement, forFunction(IsGoodAssign))
diff --git a/clang-tools-extra/clang-tidy/misc/UniqueptrResetReleaseCheck.cpp b/clang-tools-extra/clang-tidy/misc/UniqueptrResetReleaseCheck.cpp
index 32916d13445..9d500697f1a 100644
--- a/clang-tools-extra/clang-tidy/misc/UniqueptrResetReleaseCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UniqueptrResetReleaseCheck.cpp
@@ -30,13 +30,13 @@ void UniqueptrResetReleaseCheck::registerMatchers(MatchFinder *Finder) {
cxxMethodDecl(hasName("reset"),
ofClass(cxxRecordDecl(hasName("::std::unique_ptr"),
decl().bind("left_class"))))),
- has(cxxMemberCallExpr(
+ has(ignoringParenImpCasts(cxxMemberCallExpr(
on(expr().bind("right")),
callee(memberExpr().bind("release_member")),
callee(cxxMethodDecl(
hasName("release"),
ofClass(cxxRecordDecl(hasName("::std::unique_ptr"),
- decl().bind("right_class"))))))))
+ decl().bind("right_class")))))))))
.bind("reset_call"),
this);
}
diff --git a/clang-tools-extra/clang-tidy/misc/UnusedRAIICheck.cpp b/clang-tools-extra/clang-tidy/misc/UnusedRAIICheck.cpp
index a1fac9f7e50..1786627d127 100644
--- a/clang-tools-extra/clang-tidy/misc/UnusedRAIICheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UnusedRAIICheck.cpp
@@ -33,13 +33,16 @@ void UnusedRAIICheck::registerMatchers(MatchFinder *Finder) {
// Look for temporaries that are constructed in-place and immediately
// destroyed. Look for temporaries created by a functional cast but not for
// those returned from a call.
- auto BindTemp = cxxBindTemporaryExpr(unless(has(callExpr()))).bind("temp");
+ auto BindTemp =
+ cxxBindTemporaryExpr(unless(has(ignoringParenImpCasts(callExpr()))))
+ .bind("temp");
Finder->addMatcher(
- exprWithCleanups(
- unless(isInTemplateInstantiation()),
- hasParent(compoundStmt().bind("compound")),
- hasType(cxxRecordDecl(hasNonTrivialDestructor())),
- anyOf(has(BindTemp), has(cxxFunctionalCastExpr(has(BindTemp)))))
+ exprWithCleanups(unless(isInTemplateInstantiation()),
+ hasParent(compoundStmt().bind("compound")),
+ hasType(cxxRecordDecl(hasNonTrivialDestructor())),
+ anyOf(has(ignoringParenImpCasts(BindTemp)),
+ has(ignoringParenImpCasts(cxxFunctionalCastExpr(
+ has(ignoringParenImpCasts(BindTemp)))))))
.bind("expr"),
this);
}
OpenPOWER on IntegriCloud