summaryrefslogtreecommitdiff
path: root/compilerplugins/clang/unnecessaryparen.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'compilerplugins/clang/unnecessaryparen.cxx')
-rw-r--r--compilerplugins/clang/unnecessaryparen.cxx20
1 files changed, 16 insertions, 4 deletions
diff --git a/compilerplugins/clang/unnecessaryparen.cxx b/compilerplugins/clang/unnecessaryparen.cxx
index 1e01c41d5893..7f0e532585c1 100644
--- a/compilerplugins/clang/unnecessaryparen.cxx
+++ b/compilerplugins/clang/unnecessaryparen.cxx
@@ -109,8 +109,10 @@ bool UnnecessaryParen::VisitParenExpr(const ParenExpr* parenExpr)
if (insideConditionalOperator && parenExpr == insideConditionalOperator)
return true;
- auto subParenExpr = dyn_cast<ParenExpr>(parenExpr->getSubExpr()->IgnoreImpCasts());
- if (subParenExpr) {
+ auto subExpr = parenExpr->getSubExpr()->IgnoreImpCasts();
+
+ if (auto subParenExpr = dyn_cast<ParenExpr>(subExpr))
+ {
if (subParenExpr->getLocStart().isMacroID())
return true;
report(
@@ -119,8 +121,7 @@ bool UnnecessaryParen::VisitParenExpr(const ParenExpr* parenExpr)
<< parenExpr->getSourceRange();
}
- auto declRefExpr = dyn_cast<DeclRefExpr>(parenExpr->getSubExpr()->IgnoreImpCasts());
- if (declRefExpr) {
+ if (auto declRefExpr = dyn_cast<DeclRefExpr>(subExpr)) {
if (declRefExpr->getLocStart().isMacroID())
return true;
@@ -136,6 +137,17 @@ bool UnnecessaryParen::VisitParenExpr(const ParenExpr* parenExpr)
parenExpr->getLocStart())
<< parenExpr->getSourceRange();
}
+
+
+ if (auto cxxNamedCastExpr = dyn_cast<CXXNamedCastExpr>(subExpr)) {
+ if (cxxNamedCastExpr->getLocStart().isMacroID())
+ return true;
+ report(
+ DiagnosticsEngine::Warning, "unnecessary parentheses around cast",
+ parenExpr->getLocStart())
+ << parenExpr->getSourceRange();
+ }
+
return true;
}