summaryrefslogtreecommitdiff
path: root/compilerplugins
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2014-01-29 15:42:04 +0100
committerStephan Bergmann <sbergman@redhat.com>2014-01-29 15:42:37 +0100
commit81760e2702568ed02f06dbf4639e9218df8aeb2e (patch)
tree80e04f7bc30d376aa0869b72b447d4e7a797212f /compilerplugins
parentdfe30f1e3bc4720054c6ca3bc9813b9a1881084f (diff)
implicitboolconversion: also warn about redundant explicit casts
Change-Id: Ib89b4c12d2cdca873a9fe9a509d7a123977652a7
Diffstat (limited to 'compilerplugins')
-rw-r--r--compilerplugins/clang/implicitboolconversion.cxx16
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;
}