ยปCore Development>Code coverage>Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_ushort.c

Python code coverage for Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_ushort.c

#countcontent
1n/a/* Area: ffi_call, closure_call
2n/a Purpose: Check passing of multiple unsigned short values.
3n/a Limitations: none.
4n/a PR: PR13221.
5n/a Originator: <andreast@gcc.gnu.org> 20031129 */
6n/a
7n/a/* { dg-do run } */
8n/a#include "ffitest.h"
9n/a
10n/aunsigned short test_func_fn(unsigned short a1, unsigned short a2)
11n/a{
12n/a unsigned short result;
13n/a
14n/a result = a1 + a2;
15n/a
16n/a printf("%d %d: %d\n", a1, a2, result);
17n/a
18n/a return result;
19n/a
20n/a}
21n/a
22n/astatic void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
23n/a void *data __UNUSED__)
24n/a{
25n/a unsigned short a1, a2;
26n/a
27n/a a1 = *(unsigned short *)avals[0];
28n/a a2 = *(unsigned short *)avals[1];
29n/a
30n/a *(ffi_arg *)rval = test_func_fn(a1, a2);
31n/a
32n/a}
33n/a
34n/atypedef unsigned short (*test_type)(unsigned short, unsigned short);
35n/a
36n/aint main (void)
37n/a{
38n/a ffi_cif cif;
39n/a void *code;
40n/a ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
41n/a void * args_dbl[3];
42n/a ffi_type * cl_arg_types[3];
43n/a ffi_arg res_call;
44n/a unsigned short a, b, res_closure;
45n/a
46n/a a = 2;
47n/a b = 32765;
48n/a
49n/a args_dbl[0] = &a;
50n/a args_dbl[1] = &b;
51n/a args_dbl[2] = NULL;
52n/a
53n/a cl_arg_types[0] = &ffi_type_ushort;
54n/a cl_arg_types[1] = &ffi_type_ushort;
55n/a cl_arg_types[2] = NULL;
56n/a
57n/a /* Initialize the cif */
58n/a CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
59n/a &ffi_type_ushort, cl_arg_types) == FFI_OK);
60n/a
61n/a ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
62n/a /* { dg-output "2 32765: 32767" } */
63n/a printf("res: %d\n", (unsigned short)res_call);
64n/a /* { dg-output "\nres: 32767" } */
65n/a
66n/a CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK);
67n/a
68n/a res_closure = (*((test_type)code))(2, 32765);
69n/a /* { dg-output "\n2 32765: 32767" } */
70n/a printf("res: %d\n", res_closure);
71n/a /* { dg-output "\nres: 32767" } */
72n/a
73n/a exit(0);
74n/a}