// RUN: %clang_cc1 -std=c++20 -ast-dump %s | FileCheck %s #include "Inputs/std-coroutine.h" // Github issue: https://github.com/llvm/llvm-project/issues/78290 namespace GH78290 { class Gen { public: class promise_type { public: template explicit promise_type(Args...) {} // CHECK: CXXConstructorDecl {{.*}} used promise_type 'void ()' {{.*}} // CHECK-NEXT: TemplateArgument pack // CHECK-NEXT: CompoundStmt {{.*}} Gen get_return_object() { return {}; } void unhandled_exception() {} void return_void() {} std::suspend_always await_transform(Gen gen) { return {}; } std::suspend_always initial_suspend() { return {}; } // CHECK: CXXMethodDecl {{.*}} used initial_suspend {{.*}} std::suspend_always final_suspend() noexcept { return {}; } // CHECK: CXXMethodDecl {{.*}} used final_suspend {{.*}} }; }; Gen CoroutineBody() { if constexpr (0) { co_await Gen{}; } co_await Gen{}; } } // namespace GH78290