1 // RUN: %clang_cc1 -std=c++20 -ast-dump %s | FileCheck %s 2 #include "Inputs/std-coroutine.h" 3 4 // Github issue: https://github.com/llvm/llvm-project/issues/78290 5 namespace GH78290 { 6 class Gen { 7 public: 8 class promise_type { 9 public: 10 template<typename... Args> promise_type(Args...)11 explicit promise_type(Args...) {} 12 // CHECK: CXXConstructorDecl {{.*}} used promise_type 'void ()' {{.*}} 13 // CHECK-NEXT: TemplateArgument pack 14 // CHECK-NEXT: CompoundStmt {{.*}} get_return_object()15 Gen get_return_object() { return {}; } 16 unhandled_exception()17 void unhandled_exception() {} return_void()18 void return_void() {} await_transform(Gen gen)19 std::suspend_always await_transform(Gen gen) { return {}; } 20 initial_suspend()21 std::suspend_always initial_suspend() { return {}; } 22 // CHECK: CXXMethodDecl {{.*}} used initial_suspend {{.*}} final_suspend()23 std::suspend_always final_suspend() noexcept { return {}; } 24 // CHECK: CXXMethodDecl {{.*}} used final_suspend {{.*}} 25 }; 26 }; 27 CoroutineBody()28Gen CoroutineBody() { 29 if constexpr (0) { 30 co_await Gen{}; 31 } 32 co_await Gen{}; 33 } 34 } // namespace GH78290 35