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