[clang] [LifetimeSafety] Fix crash on ternary operator when one of the expressions is `throw` (PR #190345)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 3 06:49:13 PDT 2026
================
@@ -404,8 +408,18 @@ void FactsGenerator::VisitConditionalOperator(const ConditionalOperator *CO) {
if (hasOrigins(CO)) {
// Merge origins from both branches of the conditional operator.
// We kill to clear the initial state and merge both origins into it.
- killAndFlowOrigin(*CO, *CO->getTrueExpr());
- flowOrigin(*CO, *CO->getFalseExpr());
+ const Expr *TrueExpr = CO->getTrueExpr();
+ const Expr *FalseExpr = CO->getFalseExpr();
+ bool Initialized = false;
+ for (const Expr *Branch : {TrueExpr, FalseExpr}) {
+ if (!producesConditionalResult(Branch))
+ continue;
+ if (!Initialized) {
+ killAndFlowOrigin(*CO, *Branch);
+ Initialized = true;
+ } else
+ flowOrigin(*CO, *Branch);
+ }
----------------
NeKon69 wrote:
To be honest I don't like this code myself, but I couldn't find a way to make it prettier
https://github.com/llvm/llvm-project/pull/190345
More information about the cfe-commits
mailing list