diff options
Diffstat (limited to 'testsuite/libffi.go/closure1.c')
-rw-r--r-- | testsuite/libffi.go/closure1.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/testsuite/libffi.go/closure1.c b/testsuite/libffi.go/closure1.c new file mode 100644 index 00000000..7b34afc8 --- /dev/null +++ b/testsuite/libffi.go/closure1.c @@ -0,0 +1,28 @@ +/* { dg-do run } */ + +#include "ffitest.h" + +void doit(ffi_cif *cif, void *rvalue, void **avalue, void *closure) +{ + (void)cif; + (void)avalue; + *(void **)rvalue = closure; +} + +typedef void * (*FN)(void); + +int main() +{ + ffi_cif cif; + ffi_go_closure cl; + void *result; + + CHECK(ffi_prep_cif(&cif, ABI_NUM, 0, &ffi_type_pointer, NULL) == FFI_OK); + CHECK(ffi_prep_go_closure(&cl, &cif, doit) == FFI_OK); + + ffi_call_go(&cif, FFI_FN(*(FN *)&cl), &result, NULL, &cl); + + CHECK(result == &cl); + + exit(0); +} |