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

Reply via email to