aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/restricted/libffi/testsuite/libffi.go/closure1.c
blob: 6666ad9236f7a59fc068c32f282c01d9852daae4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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); 
}