diff options
author | Alan Zhao <ayzhao@google.com> | 2022-08-12 19:39:26 -0400 |
---|---|---|
committer | Alan Zhao <ayzhao@google.com> | 2022-08-15 15:24:39 -0400 |
commit | ff8aadf58d1a0ea7d8fa2b9a7a17ff0c6059baa5 (patch) | |
tree | 0fc5e8982cfce5f7c5bf77ba73891205150c2f0d /clang/lib/Analysis/ReachableCode.cpp | |
parent | 3a8d7fe20199aa73590d7a240ac9376624203b7f (diff) | |
download | llvm-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.cpp | 6 |
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); |