ChuanqiXu added a comment. In D115219#3177213 <https://reviews.llvm.org/D115219#3177213>, @rjmccall wrote:
> Okay. Well, I'm glad it works. I guess I find it a little strange that > `coro.end` doesn't already mark the coroutine done. I guess the normal C++ > lowering always generates a final suspension before reaching a non-unwind > `coro.end`? Yes, there is always a final suspend before coro.end in normal path. So that the coroutine would be marked done all the time except `unhandled_exception` throws. > There are a lot of semantic differences between throwing out of a C++ > coroutine and returning out of it that I always find surprising. Yes, I guess this is the reason why the coroutine should be marked done if `unhandled_exception` throws. > Something ultimately invalidates the coroutine handle by deallocating the > frame, right? Yes, the coroutine frame is invalided by deallocating. Users (coroutine library writers) need to deallocate it by hand usually (by call `coroutine_handle<>::destroy()`). The coroutine would get destroyed automatically if the coroutine completes and not suspended at the final suspend point. > When does that happen when throwing out of a coroutine? After throwing out of a coroutine, the coroutine frame is still valid. And the owner is responsible to destroy it. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D115219/new/ https://reviews.llvm.org/D115219 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits