Mercurial > hg > CbC > CbC_gcc
comparison libffi/testsuite/libffi.call/cls_sint.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* Area: closure_call | |
2 Purpose: Check return value sint32. | |
3 Limitations: none. | |
4 PR: none. | |
5 Originator: <andreast@gcc.gnu.org> 20031108 */ | |
6 | |
7 /* { dg-do run } */ | |
8 #include "ffitest.h" | |
9 | |
10 static void cls_ret_sint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, | |
11 void* userdata __UNUSED__) | |
12 { | |
13 *(ffi_arg*)resp = *(signed int *)args[0]; | |
14 printf("%d: %d\n",*(signed int *)args[0], | |
15 (int)*(ffi_arg *)(resp)); | |
16 } | |
17 typedef signed int (*cls_ret_sint)(signed int); | |
18 | |
19 int main (void) | |
20 { | |
21 ffi_cif cif; | |
22 void *code; | |
23 ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); | |
24 ffi_type * cl_arg_types[2]; | |
25 signed int res; | |
26 | |
27 cl_arg_types[0] = &ffi_type_sint; | |
28 cl_arg_types[1] = NULL; | |
29 | |
30 /* Initialize the cif */ | |
31 CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, | |
32 &ffi_type_sint, cl_arg_types) == FFI_OK); | |
33 | |
34 CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_sint_fn, NULL, code) == FFI_OK); | |
35 | |
36 res = (*((cls_ret_sint)code))(65534); | |
37 /* { dg-output "65534: 65534" } */ | |
38 printf("res: %d\n",res); | |
39 /* { dg-output "\nres: 65534" } */ | |
40 | |
41 exit(0); | |
42 } |