]>
Commit | Line | Data |
---|---|---|
8a6b509e AT |
1 | /* Area: closure_call |
2 | Purpose: Check return value uchar. | |
3 | Limitations: none. | |
4 | PR: none. | |
5 | Originator: <andreast@gcc.gnu.org> 20030828 */ | |
6 | ||
dfbb3e36 | 7 | /* { dg-do run } */ |
8a6b509e AT |
8 | #include "ffitest.h" |
9 | ||
9fdeb13b AT |
10 | static void cls_ret_uchar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, |
11 | void* userdata __UNUSED__) | |
8a6b509e AT |
12 | { |
13 | *(ffi_arg*)resp = *(unsigned char *)args[0]; | |
9e3bfa9b | 14 | printf("%d: %d\n",*(unsigned char *)args[0], |
9fdeb13b | 15 | (int)*(ffi_arg *)(resp)); |
8a6b509e AT |
16 | } |
17 | typedef unsigned char (*cls_ret_uchar)(unsigned char); | |
18 | ||
19 | int main (void) | |
20 | { | |
21 | ffi_cif cif; | |
062b8279 AH |
22 | void *code; |
23 | ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); | |
8a6b509e | 24 | ffi_type * cl_arg_types[2]; |
f145ed6b | 25 | unsigned char res; |
9e3bfa9b | 26 | |
8a6b509e AT |
27 | cl_arg_types[0] = &ffi_type_uchar; |
28 | cl_arg_types[1] = NULL; | |
9e3bfa9b | 29 | |
8a6b509e AT |
30 | /* Initialize the cif */ |
31 | CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, | |
32 | &ffi_type_uchar, cl_arg_types) == FFI_OK); | |
9e3bfa9b | 33 | |
062b8279 | 34 | CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_uchar_fn, NULL, code) == FFI_OK); |
9e3bfa9b | 35 | |
062b8279 | 36 | res = (*((cls_ret_uchar)code))(127); |
8a6b509e | 37 | /* { dg-output "127: 127" } */ |
647af4a9 AT |
38 | printf("res: %d\n",res); |
39 | /* { dg-output "\nres: 127" } */ | |
40 | ||
9e3bfa9b | 41 | exit(0); |
8a6b509e | 42 | } |