]>
Commit | Line | Data |
---|---|---|
ac47cc13 AT |
1 | /* Area: closure_call |
2 | Purpose: Check return value schar. | |
3 | Limitations: none. | |
4 | PR: none. | |
5 | Originator: <andreast@gcc.gnu.org> 20031108 */ | |
6 | ||
4c5f37d5 | 7 | /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */ |
ac47cc13 AT |
8 | #include "ffitest.h" |
9 | ||
9fdeb13b AT |
10 | static void cls_ret_schar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, |
11 | void* userdata __UNUSED__) | |
ac47cc13 AT |
12 | { |
13 | *(ffi_arg*)resp = *(signed char *)args[0]; | |
14 | printf("%d: %d\n",*(signed char *)args[0], | |
9fdeb13b | 15 | (int)*(ffi_arg *)(resp)); |
ac47cc13 AT |
16 | } |
17 | typedef signed char (*cls_ret_schar)(signed char); | |
18 | ||
19 | int main (void) | |
20 | { | |
21 | ffi_cif cif; | |
5196736e | 22 | #ifndef USING_MMAP |
ac47cc13 | 23 | static ffi_closure cl; |
5196736e AJ |
24 | #endif |
25 | ffi_closure *pcl; | |
ac47cc13 AT |
26 | ffi_type * cl_arg_types[2]; |
27 | signed char res; | |
28 | ||
5196736e AJ |
29 | #ifdef USING_MMAP |
30 | pcl = allocate_mmap (sizeof(ffi_closure)); | |
31 | #else | |
32 | pcl = &cl; | |
33 | #endif | |
34 | ||
ac47cc13 AT |
35 | cl_arg_types[0] = &ffi_type_schar; |
36 | cl_arg_types[1] = NULL; | |
37 | ||
38 | /* Initialize the cif */ | |
39 | CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, | |
40 | &ffi_type_schar, cl_arg_types) == FFI_OK); | |
41 | ||
42 | CHECK(ffi_prep_closure(pcl, &cif, cls_ret_schar_fn, NULL) == FFI_OK); | |
43 | ||
44 | res = (*((cls_ret_schar)pcl))(127); | |
45 | /* { dg-output "127: 127" } */ | |
647af4a9 AT |
46 | printf("res: %d\n", res); |
47 | /* { dg-output "\nres: 127" } */ | |
ac47cc13 AT |
48 | |
49 | exit(0); | |
50 | } |