summaryrefslogtreecommitdiff
path: root/compilerplugins
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2023-03-16 12:06:43 +0100
committerStephan Bergmann <sbergman@redhat.com>2023-03-16 16:05:29 +0000
commit3a1fbb70a39cff9eea852f6709ecb63f45b29c40 (patch)
treec776a5795d4b5ec94d73bf853cf72b0f75015f0b /compilerplugins
parent9affc1f4eb591cd1bf0ca7d87041d1bdc4936f78 (diff)
Prepare compilerplugins for C++23 `if consteval`
...for which clang::IfStmt::getCond returns null Change-Id: I8b86a033d52de87dedbdf6d867f2b3d3f57c1b5a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148979 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'compilerplugins')
-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;
}