ChuanqiXu added inline comments.
================ 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; ---------------- bruno wrote: > ChuanqiXu wrote: > > What's the case about returning void and the return_object type is > > different from the returning type? > In that case we do `DirectEmit` since there's no reason to delay > initialization, am I missing something? I mean it looks invalid if the function returns void and the return_object_type returns a non-void type. So we can judge this by `hasSameType()` directly. ================ Comment at: clang/test/SemaCXX/coroutine-no-move-ctor.cpp:24-26 invoker f() { co_return; } ---------------- bruno wrote: > ChuanqiXu wrote: > > How about adding a failing case that the types are not matched? > I'm having trouble crafting one. I extracted similar examples from other > testcases and even though I can confirm they correctly apply delayed > initialization, they don't require copies (usually directly call conversion > operators or similar) and we don't trigger the reverse usecase, do you have > one testcase in mind I could use? Oh, I don't have an existing test. Although not the best, maybe you can try to emit the codes to LLVM IR and match that. 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