diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2014-01-29 15:42:04 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2014-01-29 15:42:37 +0100 |
commit | 81760e2702568ed02f06dbf4639e9218df8aeb2e (patch) | |
tree | 80e04f7bc30d376aa0869b72b447d4e7a797212f /compilerplugins/clang | |
parent | dfe30f1e3bc4720054c6ca3bc9813b9a1881084f (diff) |
implicitboolconversion: also warn about redundant explicit casts
Change-Id: Ib89b4c12d2cdca873a9fe9a509d7a123977652a7
Diffstat (limited to 'compilerplugins/clang')
-rw-r--r-- | compilerplugins/clang/implicitboolconversion.cxx | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/compilerplugins/clang/implicitboolconversion.cxx b/compilerplugins/clang/implicitboolconversion.cxx index e939295e782b..ae26e01bb501 100644 --- a/compilerplugins/clang/implicitboolconversion.cxx +++ b/compilerplugins/clang/implicitboolconversion.cxx @@ -521,6 +521,22 @@ bool ImplicitBoolConversion::VisitImplicitCastExpr( } else { nested.top().push_back(expr); } + } else { + ExplicitCastExpr const * sub = dyn_cast<ExplicitCastExpr>( + expr->getSubExpr()->IgnoreParenImpCasts()); + if (sub != nullptr + && (sub->getSubExpr()->IgnoreParenImpCasts()->getType().IgnoreParens() + == expr->getType().IgnoreParens()) + && isBool(sub->getSubExpr()->IgnoreParenImpCasts())) + { + report( + DiagnosticsEngine::Warning, + "explicit conversion (%0) from %1 to %2 implicitly cast back to %3", + expr->getLocStart()) + << sub->getCastKindName() + << sub->getSubExpr()->IgnoreParenImpCasts()->getType() + << sub->getType() << expr->getType() << expr->getSourceRange(); + } } return true; } |