2009-07-17 Richard Guenther <rguenther@suse.de>
[official-gcc.git] / libffi / testsuite / libffi.call / cls_ulonglong.c
blobc3cf0d6ec017810a6e8fd4d9866df244e2347836
1 /* Area: closure_call
2 Purpose: Check return value long long.
3 Limitations: none.
4 PR: none.
5 Originator: <andreast@gcc.gnu.org> 20030828 */
7 /* { dg-do run } */
8 #include "ffitest.h"
10 static void cls_ret_ulonglong_fn(ffi_cif* cif __UNUSED__, void* resp,
11 void** args, void* userdata __UNUSED__)
13 *(unsigned long long *)resp= *(unsigned long long *)args[0];
15 printf("%" PRIuLL ": %" PRIuLL "\n",*(unsigned long long *)args[0],
16 *(unsigned long long *)(resp));
18 typedef unsigned long long (*cls_ret_ulonglong)(unsigned long long);
20 int main (void)
22 ffi_cif cif;
23 void *code;
24 ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
25 ffi_type * cl_arg_types[2];
26 unsigned long long res;
28 cl_arg_types[0] = &ffi_type_uint64;
29 cl_arg_types[1] = NULL;
31 /* Initialize the cif */
32 CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
33 &ffi_type_uint64, cl_arg_types) == FFI_OK);
34 CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_ulonglong_fn, NULL, code) == FFI_OK);
35 res = (*((cls_ret_ulonglong)code))(214LL);
36 /* { dg-output "214: 214" } */
37 printf("res: %" PRIdLL "\n", res);
38 /* { dg-output "\nres: 214" } */
40 res = (*((cls_ret_ulonglong)code))(9223372035854775808LL);
41 /* { dg-output "\n9223372035854775808: 9223372035854775808" } */
42 printf("res: %" PRIdLL "\n", res);
43 /* { dg-output "\nres: 9223372035854775808" } */
45 exit(0);