// RUN: %clang_cc1 -triple x86_64-apple-darwin9 %s -std=c++20 \
// RUN:    -ast-dump | FileCheck %s

#include "Inputs/std-coroutine.h"

using namespace std;

struct Chat {
  struct promise_type {
    std::suspend_always initial_suspend() { return {}; }
    Chat get_return_object() {
      return std::coroutine_handle<promise_type>::from_promise(*this);
    }
    std::suspend_always yield_value(int m) { return {}; }
    std::suspend_always final_suspend() noexcept { return {}; }
    std::suspend_always return_value(int) { return {}; }
    void unhandled_exception() {}

    auto await_transform(int s) {
      struct awaiter {
        promise_type *promise;
        bool await_ready() { return true; }
        int await_resume() { return promise->message; }
        void await_suspend(std::coroutine_handle<>) {}
      };

      return awaiter{this};
    }
    int message;
  };

  Chat(std::coroutine_handle<promise_type> promise);

  std::coroutine_handle<promise_type> handle;
};

Chat f(int s)  {
  // CHECK:      CoyieldExpr {{.*}} <col:3, col:12>
  // CHECK-NEXT:   CXXMemberCallExpr {{.*}} <col:3, col:12> {{.*}}
  // CHECK-NEXT:     MemberExpr {{.*}} <col:3> {{.*}}
  // CHECK-NEXT:       DeclRefExpr {{.*}} <col:3> {{.*}}
  // CHECK-NEXT:     ImplicitCastExpr {{.*}} <col:12> {{.*}}
  // CHECK-NEXT:       DeclRefExpr {{.*}} <col:12> {{.*}}
  co_yield s;
  // CHECK:      CoreturnStmt {{.*}} <line:{{.*}}:3, col:13>
  co_return s;
  // CHECK:      CoawaitExpr {{.*}} <col:3, col:12> 'int'
  co_await s;
}
