[clang] [clang][CodeGen] Promote point of GRO(CWG2563) (PR #151067)

Chuanqi Xu via cfe-commits cfe-commits at lists.llvm.org
Sun Nov 30 18:43:34 PST 2025


================
@@ -768,6 +779,41 @@ struct GetReturnObjectManager {
     CGF.EmitAutoVarInit(GroEmission);
     Builder.CreateStore(Builder.getTrue(), GroActiveFlag);
   }
+
+  void EmitGroConv() {
+    // GRO conversion is unnecessary when get_return_object's type matches the
+    // coroutine return type.
+    if (DirectEmit)
+      return;
+
+    auto *InsertPt = Builder.GetInsertBlock();
+    auto *PreConvBB = CGF.CurCoro.Data->SuspendBB;
+    auto *AfterConvBB =
+        CGF.createBasicBlock("after.gro.conv", CGF.CurFn, InsertPt);
+    Builder.SetInsertPoint(AfterConvBB);
+    BasicBlock *AfterFinalBB = InsertPt->getSinglePredecessor();
----------------
ChuanqiXu9 wrote:

This is an implicit assumption that InsertPt has only one Predecessor. Let's add it as an explicit assumption.

https://github.com/llvm/llvm-project/pull/151067


More information about the cfe-commits mailing list