aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Analysis/ReachableCode.cpp
diff options
context:
space:
mode:
authorAlan Zhao <ayzhao@google.com>2022-08-12 19:39:26 -0400
committerAlan Zhao <ayzhao@google.com>2022-08-15 15:24:39 -0400
commitff8aadf58d1a0ea7d8fa2b9a7a17ff0c6059baa5 (patch)
tree0fc5e8982cfce5f7c5bf77ba73891205150c2f0d /clang/lib/Analysis/ReachableCode.cpp
parent3a8d7fe20199aa73590d7a240ac9376624203b7f (diff)
downloadllvm-ff8aadf58d1a0ea7d8fa2b9a7a17ff0c6059baa5.zip
llvm-ff8aadf58d1a0ea7d8fa2b9a7a17ff0c6059baa5.tar.gz
llvm-ff8aadf58d1a0ea7d8fa2b9a7a17ff0c6059baa5.tar.bz2
[clang][diagnostics] Don't warn about unreachable code in constexpr if
The point of a constexpr if statement is to determine which branch to take at compile time, so warning on unreachable code is meaningless in these situations. Fixes #57123. Reviewed By: thakis Differential Revision: https://reviews.llvm.org/D131818
Diffstat (limited to 'clang/lib/Analysis/ReachableCode.cpp')
-rw-r--r--clang/lib/Analysis/ReachableCode.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/Analysis/ReachableCode.cpp b/clang/lib/Analysis/ReachableCode.cpp
index 652bef3..ce0f4f8 100644
--- a/clang/lib/Analysis/ReachableCode.cpp
+++ b/clang/lib/Analysis/ReachableCode.cpp
@@ -299,6 +299,12 @@ static bool shouldTreatSuccessorsAsReachable(const CFGBlock *B,
if (isa<BinaryOperator>(Term)) {
return isConfigurationValue(Term, PP);
}
+ // Do not treat constexpr if statement successors as unreachable in warnings
+ // since the point of these statements is to determine branches at compile
+ // time.
+ if (const auto *IS = dyn_cast<IfStmt>(Term);
+ IS != nullptr && IS->isConstexpr())
+ return true;
}
const Stmt *Cond = B->getTerminatorCondition(/* stripParens */ false);