https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95017
Bug ID: 95017 Summary: [coroutines] Failure to generate code for co_yield expression if its the only statement in a loop Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: lewissbaker.opensource at gmail dot com Target Milestone: --- See https://godbolt.org/z/v-Tkvi Given a simple coroutine generator<T> type, if I compile the following coroutine with GCC it fails to generate code for the 'co_yield' expression if the co_yield is the only statement in the loop body. However, if I add another statement after the co_yield then it correctly generates code for the co_yield expression. Works: -std=c++2a -fcoroutines -DWITH_EXTRA_STATEMENT Fails: -std=c++2a -fcoroutines --------------------- generator<double> test() { double i = 0; while(i++ < 5) { // If the second statement below is compiled-out then GCC fails to generate // code for the co_yield expression and the loop completes without // ever suspending. co_yield i * 2; #ifdef WITH_EXTRA_STATEMENT (void)i; #endif } } int main() { for (auto i : test()) { printf("%f\t", i); } } ---------------------