https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121016

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I think you could just use do { } while(0) instead of a statement expression
here.

That is:

#define COTHREAD_PROTOTHREAD(f) do {                                    \
      using namespace Glow::Cothreads;                                  \
      int result = Completed;                                           \
      do {                                                              \
        int v = f;                                                      \
        result = Completed;                                             \
        if (v & THREAD_READY)    result = Yielded;                      \
        if (v & THREAD_BLOCKED)  result = Blocked;                      \
        if (v & THREAD_SLEEPING) result = Sleeping;                     \
        if (result != Completed)                                        \
          co_yield cothread_result{result};                             \
      } while (result != Completed); } while (false)

Reply via email to