github.com/llvm-mirror/llgo@v0.0.0-20190322182713-bf6f0a60fce1/third_party/gofrontend/libffi/testsuite/libffi.go/closure1.c (about) 1 /* { dg-do run } */ 2 3 #include "ffitest.h" 4 5 void doit(ffi_cif *cif, void *rvalue, void **avalue, void *closure) 6 { 7 (void)cif; 8 (void)avalue; 9 *(void **)rvalue = closure; 10 } 11 12 typedef void * (*FN)(void); 13 14 int main() 15 { 16 ffi_cif cif; 17 ffi_go_closure cl; 18 void *result; 19 20 CHECK(ffi_prep_cif(&cif, ABI_NUM, 0, &ffi_type_pointer, NULL) == FFI_OK); 21 CHECK(ffi_prep_go_closure(&cl, &cif, doit) == FFI_OK); 22 23 ffi_call_go(&cif, FFI_FN(*(FN *)&cl), &result, NULL, &cl); 24 25 CHECK(result == &cl); 26 27 exit(0); 28 }