//  { dg-additional-options "-fsyntax-only" }

#if __has_include(<coroutine>)
#include <coroutine>
#else
#include <experimental/coroutine>
namespace std {
  using namespace std::experimental;
}
#endif

class promise;

struct finalSuspendAwaiter {
  int x;
  finalSuspendAwaiter () : x(0) { }
  finalSuspendAwaiter (int _x) : x(_x) { }
  ~finalSuspendAwaiter() noexcept(false) { }
  bool await_ready() const noexcept(true) { return false; }
  void await_suspend(std::coroutine_handle<>) const noexcept(true) { }
  int await_resume() const noexcept(false) { return x; }
  // { dg-error {the expression 'finalSuspendAwaiter::await_resume' is required to be non-throwing} "" { target *-*-* } .-1 }
};

struct finalSuspendObj {
  int x;
  finalSuspendObj () : x(0) { }
  finalSuspendObj (int _x) : x(_x) { }
  ~finalSuspendObj () noexcept(true) {} 

  finalSuspendAwaiter operator co_await() const & noexcept(true) { 
    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 {}
  };
};

// This should be ill-formed since final_suspend() is potentially throwing.
task f() {  
  co_return;
}
