// { dg-additional-options "-fsyntax-only -fno-exceptions" } #if __has_include() #include #else #include namespace std { using namespace std::experimental; } #endif class promise; struct finalSuspendAwaiter { int x; finalSuspendAwaiter () : x(0) { } finalSuspendAwaiter (int _x) : x(_x) { } ~finalSuspendAwaiter() noexcept(true) { } bool await_ready() const noexcept(true) { return false; } void await_suspend(std::coroutine_handle<>) const noexcept(true) { } int await_resume() const noexcept(true) { return x; } }; struct finalSuspendObj { int x; finalSuspendObj () : x(0) { } finalSuspendObj (int _x) : x(_x) { } ~finalSuspendObj () noexcept(true) {} finalSuspendAwaiter operator co_await() const & noexcept(false) // NOTE: not declared noexcept { return {x}; } }; struct task { struct promise_type { task get_return_object() noexcept { return {}; } std::suspend_never initial_suspend() noexcept { return {}; } finalSuspendObj final_suspend() noexcept { return {3}; } void return_void() noexcept {} void unhandled_exception() noexcept {} }; }; // OK when exceptions are disabled. task f() { co_return; }