summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compilerplugins/clang/simplifydynamiccast.cxx18
-rw-r--r--compilerplugins/clang/simplifypointertobool.cxx14
-rw-r--r--compilerplugins/clang/unnecessaryparen.cxx6
3 files changed, 25 insertions, 13 deletions
diff --git a/compilerplugins/clang/simplifydynamiccast.cxx b/compilerplugins/clang/simplifydynamiccast.cxx
index ffb81658d8c8..3b94f284de1e 100644
--- a/compilerplugins/clang/simplifydynamiccast.cxx
+++ b/compilerplugins/clang/simplifydynamiccast.cxx
@@ -46,15 +46,19 @@ private:
bool SimplifyDynamicCast::TraverseIfStmt(IfStmt* ifStmt)
{
- auto condExpr = ifStmt->getCond()->IgnoreParenImpCasts();
- auto dynamicCastExpr = dyn_cast<CXXDynamicCastExpr>(condExpr);
- if (!dynamicCastExpr)
+ CXXDynamicCastExpr const* dynamicCastExpr = nullptr;
+ if (Expr const* condExpr = ifStmt->getCond())
{
- if (auto binaryOp = dyn_cast<BinaryOperator>(condExpr))
+ condExpr = condExpr->IgnoreParenImpCasts();
+ dynamicCastExpr = dyn_cast<CXXDynamicCastExpr>(condExpr);
+ if (!dynamicCastExpr)
{
- if (binaryOp->getOpcode() == BO_NE)
- dynamicCastExpr
- = dyn_cast<CXXDynamicCastExpr>(binaryOp->getLHS()->IgnoreParenImpCasts());
+ if (auto binaryOp = dyn_cast<BinaryOperator>(condExpr))
+ {
+ if (binaryOp->getOpcode() == BO_NE)
+ dynamicCastExpr
+ = dyn_cast<CXXDynamicCastExpr>(binaryOp->getLHS()->IgnoreParenImpCasts());
+ }
}
}
Decl const* subExprDecl = nullptr;
diff --git a/compilerplugins/clang/simplifypointertobool.cxx b/compilerplugins/clang/simplifypointertobool.cxx
index 097a78e16f67..11aed0f317b7 100644
--- a/compilerplugins/clang/simplifypointertobool.cxx
+++ b/compilerplugins/clang/simplifypointertobool.cxx
@@ -131,14 +131,20 @@ public:
bool PreTraverseIfStmt(IfStmt* stmt)
{
- contextuallyConvertedExprs_.push_back(stmt->getCond()->IgnoreParenImpCasts());
+ if (auto const cond = stmt->getCond())
+ {
+ contextuallyConvertedExprs_.push_back(cond->IgnoreParenImpCasts());
+ }
return true;
}
- bool PostTraverseIfStmt(IfStmt*, bool)
+ bool PostTraverseIfStmt(IfStmt* stmt, bool)
{
- assert(!contextuallyConvertedExprs_.empty());
- contextuallyConvertedExprs_.pop_back();
+ if (stmt->getCond() != nullptr)
+ {
+ assert(!contextuallyConvertedExprs_.empty());
+ contextuallyConvertedExprs_.pop_back();
+ }
return true;
}
diff --git a/compilerplugins/clang/unnecessaryparen.cxx b/compilerplugins/clang/unnecessaryparen.cxx
index 11655d51389e..1d11aca4ab47 100644
--- a/compilerplugins/clang/unnecessaryparen.cxx
+++ b/compilerplugins/clang/unnecessaryparen.cxx
@@ -262,8 +262,10 @@ bool UnnecessaryParen::VisitParenExpr(const ParenExpr* parenExpr)
bool UnnecessaryParen::VisitIfStmt(const IfStmt* ifStmt)
{
- handleUnreachableCodeConditionParens(ifStmt->getCond());
- VisitSomeStmt(ifStmt, ifStmt->getCond(), "if");
+ if (auto const cond = ifStmt->getCond()) {
+ handleUnreachableCodeConditionParens(cond);
+ VisitSomeStmt(ifStmt, cond, "if");
+ }
return true;
}