llvm-capstone/clang/test/CodeGenCoroutines/coro-function-try-block.cpp
Matthias Braun e00a8d081d Fix codegen for coroutine with function-try-block
This fixes an assertion error when writing a coroutine with a
function-try-block. In this case the function body is not a
`CompoundStmt` so the code constructing an artificial CXXTryStmt must
also construct a `CompoundStmt` for it.

While on it adjust the `CXXStmt::Create` function to only accept
`CompoundStmt*`.

Differential Revision: https://reviews.llvm.org/D146758
2023-03-30 11:16:32 -07:00

24 lines
635 B
C++

// RUN: %clang_cc1 -std=c++20 -triple=x86_64-- -emit-llvm -fcxx-exceptions \
// RUN: -disable-llvm-passes %s -o - | FileCheck %s
#include "Inputs/coroutine.h"
struct task {
struct promise_type {
task get_return_object();
std::suspend_never initial_suspend();
std::suspend_never final_suspend() noexcept;
void return_void();
void unhandled_exception() noexcept;
};
};
task f() try {
co_return;
} catch(...) {
}
// CHECK-LABEL: define{{.*}} void @_Z1fv(
// CHECK: call void @_ZNSt13suspend_never13await_suspendESt16coroutine_handleIvE(
// CHECK: call void @_ZN4task12promise_type11return_voidEv(