alias CoroHandle = void*;
pragma(LDC_intrinsic, "llvm.coro.resume")
void coro_resume(CoroHandle hdl);
pragma(LDC_intrinsic, "llvm.coro.destroy")
void coro_destroy(CoroHandle hdl);
pragma(LDC_intrinsic, "llvm.coro.done")
bool coro_done(CoroHandle hdl);
pragma(LDC_intrinsic, "llvm.coro.promise")
void* coro_promise(CoroHandle hdl_or_promise, int alignment, bool from);
pragma(LDC_intrinsic, "llvm.coro.id")
CoroToken coro_id(int alignment, void* promise, void* coroaddr, void* fnaddrs);
pragma(LDC_intrinsic, "llvm.coro.free")
void coro_free(CoroToken id, CoroHandle hdl);
pragma(LDC_intrinsic, "llvm.coro.end")
bool coro_end(CoroHandle hdl, bool);
pragma(LDC_intrinsic, "llvm.coro.size.i32")
pragma(LDC_intrinsic, "llvm.coro.size.i64")
pragma(LDC_intrinsic, "llvm.coro.begin")
CoroFrame coro_begin(CoroToken id, void* mem);
pragma(LDC_intrinsic, "llvm.coro.suspend")
bool coro_suspend(CoroToken id, bool is_final);
pragma(LDC_intrinsic, "llvm.coro.frame")
pragma(LDC_intrinsic, "llvm.coro.alloc")
bool coro_alloc(CoroToken id);
pragma(LDC_intrinsic, "llvm.coro.noop")
extern(C) int main(int argc, char** argv){
auto id = coro_id(0, null, null, null);
const size = coro_size_32();
auto alloc = malloc(size);
auto hdl = coro_begin(id, alloc);