ChuanqiXu added inline comments.
================ Comment at: clang/lib/CodeGen/CGCoroutine.cpp:475 const CoroutineBodyStmt &S; + bool DirectEmit = false; ---------------- nit. Rewords it if you like. ================ Comment at: clang/lib/CodeGen/CGCoroutine.cpp:483-499 + // The call to get_return_object is sequenced before the call to + // initial_suspend and is invoked at most once, but there are caveats + // regarding on whether the prvalue result object may be initialized + // directly/eager or delayed, depending on the types involved. + // + // The general cases: + // 1. Same type of get_return_object and coroutine return type (direct ---------------- I'll feel better if we can attach the conclusion and links from the wg21. ================ Comment at: clang/lib/CodeGen/CGCoroutine.cpp:500-508 + DirectEmit = [&]() { + auto *RVI = S.getReturnValueInit(); + if (!RVI || CGF.FnRetTy->isVoidType()) + return true; + auto GroType = RVI->getType(); + if (GroType->isVoidType()) + return true; ---------------- What's the case about returning void and the return_object type is different from the returning type? ================ Comment at: clang/lib/Sema/SemaCoroutine.cpp:1733 + bool GroMatchesRetType = GroType == FnRetType; + ---------------- Let's have some comments here. ================ Comment at: clang/test/SemaCXX/coroutine-no-move-ctor.cpp:24-26 invoker f() { co_return; } ---------------- How about adding a failing case that the types are not matched? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D145641/new/ https://reviews.llvm.org/D145641 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits