diff options
Diffstat (limited to 'compilerplugins/clang/unnecessaryparen.cxx')
-rw-r--r-- | compilerplugins/clang/unnecessaryparen.cxx | 20 |
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; } |