[clang] [CIR] Add support for ternary operator as lvalue (PR #163580)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 20 09:24:45 PDT 2025
================
@@ -1978,13 +1978,18 @@ void cir::TernaryOp::build(
result.addOperands(cond);
OpBuilder::InsertionGuard guard(builder);
Region *trueRegion = result.addRegion();
- Block *block = builder.createBlock(trueRegion);
+ builder.createBlock(trueRegion);
trueBuilder(builder, result.location);
Region *falseRegion = result.addRegion();
builder.createBlock(falseRegion);
falseBuilder(builder, result.location);
- auto yield = dyn_cast<YieldOp>(block->getTerminator());
+ // Get result type from whichever branch has a yield (the other may have
+ // unreachable from a throw expression)
+ YieldOp yield = dyn_cast_or_null<YieldOp>(trueRegion->back().getTerminator());
+ if (!yield)
+ yield = dyn_cast_or_null<YieldOp>(falseRegion->back().getTerminator());
----------------
andykaylor wrote:
```suggestion
yield = dyn_cast_or_null<cir::YieldOp>(falseRegion->back().getTerminator());
```
https://github.com/llvm/llvm-project/pull/163580
More information about the cfe-commits
mailing list