[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