mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-05-14 09:56:33 +00:00

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
24 lines
635 B
C++
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(
|