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

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

#countcontent
1n/a/* Area: ffi_call, closure_call
2n/a Purpose: Check passing of multiple signed short/char 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/asigned short test_func_fn(signed char a1, signed short a2,
11n/a signed char a3, signed short a4)
12n/a{
13n/a signed short result;
14n/a
15n/a result = a1 + a2 + a3 + a4;
16n/a
17n/a printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result);
18n/a
19n/a return result;
20n/a
21n/a}
22n/a
23n/astatic void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
24n/a void *data __UNUSED__)
25n/a{
26n/a signed char a1, a3;
27n/a signed short a2, a4;
28n/a
29n/a a1 = *(signed char *)avals[0];
30n/a a2 = *(signed short *)avals[1];
31n/a a3 = *(signed char *)avals[2];
32n/a a4 = *(signed short *)avals[3];
33n/a
34n/a *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4);
35n/a
36n/a}
37n/a
38n/atypedef signed short (*test_type)(signed char, signed short,
39n/a signed char, signed short);
40n/a
41n/aint main (void)
42n/a{
43n/a ffi_cif cif;
44n/a void *code;
45n/a ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
46n/a void * args_dbl[5];
47n/a ffi_type * cl_arg_types[5];
48n/a ffi_arg res_call;
49n/a signed char a, c;
50n/a signed short b, d, res_closure;
51n/a
52n/a a = 1;
53n/a b = 32765;
54n/a c = 127;
55n/a d = -128;
56n/a
57n/a args_dbl[0] = &a;
58n/a args_dbl[1] = &b;
59n/a args_dbl[2] = &c;
60n/a args_dbl[3] = &d;
61n/a args_dbl[4] = NULL;
62n/a
63n/a cl_arg_types[0] = &ffi_type_schar;
64n/a cl_arg_types[1] = &ffi_type_sshort;
65n/a cl_arg_types[2] = &ffi_type_schar;
66n/a cl_arg_types[3] = &ffi_type_sshort;
67n/a cl_arg_types[4] = NULL;
68n/a
69n/a /* Initialize the cif */
70n/a CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
71n/a &ffi_type_sshort, cl_arg_types) == FFI_OK);
72n/a
73n/a ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
74n/a /* { dg-output "1 32765 127 -128: 32765" } */
75n/a printf("res: %d\n", (signed short)res_call);
76n/a /* { dg-output "\nres: 32765" } */
77n/a
78n/a CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK);
79n/a
80n/a res_closure = (*((test_type)code))(1, 32765, 127, -128);
81n/a /* { dg-output "\n1 32765 127 -128: 32765" } */
82n/a printf("res: %d\n", res_closure);
83n/a /* { dg-output "\nres: 32765" } */
84n/a
85n/a exit(0);
86n/a}