[PATCH] D31670: [coroutines] Implement correct GRO lifetime

Richard Smith via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon May 22 11:45:39 PDT 2017

rsmith added inline comments.

Comment at: lib/CodeGen/CGCoroutine.cpp:273
+    // FIXME: There must be a cleaner way to do this!
+    if (auto *Cleanup = dyn_cast_or_null<EHCleanupScope>(&*CGF.EHStack.begin())) {
It doesn't seem safe to assume that a prior `EHCleanupScope` would be for the GRO variable, nor that it can only have one such cleanup. How about this: grab a stable EHStack iterator before you emit cleanups, grab another afterwards, and iterate over the cleanups in that range modifying them as appropriate.

Even that seems a bit fragile, though. Would it be feasible to thread the 'active' flag through `EmitAutoVarCleanups` (perhaps add it to `AutoVarEmission`)?


More information about the cfe-commits mailing list