github.com/prattmic/llgo-embedded@v0.0.0-20150820070356-41cfecea0e1e/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  }