summaryrefslogtreecommitdiff
path: root/compilerplugins/clang/implicitboolconversion.cxx
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2017-10-26 21:04:03 +0200
committerStephan Bergmann <sbergman@redhat.com>2017-10-26 21:04:03 +0200
commite02e0f4081c0807fa65548159292585c680abff3 (patch)
tree8405d2cd8c363c0e530f673f59e6e9191bf31c0f /compilerplugins/clang/implicitboolconversion.cxx
parent4c1bfd35ae05aca4c71c17d41ebe10634526edac (diff)
Use compat::getSubExprAsWritten; clean up
Change-Id: I8f984c3b3833437f6b4d65ab99da608a6868ff74
Diffstat (limited to 'compilerplugins/clang/implicitboolconversion.cxx')
-rw-r--r--compilerplugins/clang/implicitboolconversion.cxx39
1 files changed, 20 insertions, 19 deletions
diff --git a/compilerplugins/clang/implicitboolconversion.cxx b/compilerplugins/clang/implicitboolconversion.cxx
index 1151a78f4384..bc18e87cf366 100644
--- a/compilerplugins/clang/implicitboolconversion.cxx
+++ b/compilerplugins/clang/implicitboolconversion.cxx
@@ -859,29 +859,30 @@ bool ImplicitBoolConversion::VisitImplicitCastExpr(
}
return true;
}
- ExplicitCastExpr const * sub = dyn_cast<ExplicitCastExpr>(
- expr->getSubExpr()->IgnoreParenImpCasts());
- if (sub != nullptr
- && (sub->getSubExpr()->IgnoreParenImpCasts()->getType().IgnoreParens()
- == expr->getType().IgnoreParens())
- && isBool(sub->getSubExpr()->IgnoreParenImpCasts()))
+ if (auto const sub = dyn_cast<ExplicitCastExpr>(
+ compat::getSubExprAsWritten(expr)))
{
- // Ignore "normalizing cast" bool(b) from sal_Bool b to bool, then
- // implicitly cast back again to sal_Bool:
- if (dyn_cast<CXXFunctionalCastExpr>(sub) != nullptr
- && sub->getType()->isBooleanType() && isSalBool(expr->getType())
- && isSalBool(sub->getSubExpr()->IgnoreParenImpCasts()->getType()))
+ auto const subsub = compat::getSubExprAsWritten(sub);
+ if (subsub->getType().IgnoreParens() == expr->getType().IgnoreParens()
+ && isBool(subsub))
{
+ // Ignore "normalizing cast" bool(b) from sal_Bool b to bool, then
+ // implicitly cast back again to sal_Bool:
+ if (dyn_cast<CXXFunctionalCastExpr>(sub) != nullptr
+ && sub->getType()->isBooleanType() && isSalBool(expr->getType())
+ && isSalBool(subsub->getType()))
+ {
+ return true;
+ }
+ report(
+ DiagnosticsEngine::Warning,
+ ("explicit conversion (%0) from %1 to %2 implicitly cast back"
+ " to %3"),
+ expr->getLocStart())
+ << sub->getCastKindName() << subsub->getType() << sub->getType()
+ << expr->getType() << expr->getSourceRange();
return true;
}
- 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;
}
if (expr->getType()->isBooleanType() && !isBoolExpr(expr->getSubExpr())
&& !calls.empty())