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

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

#countcontent
1n/a/* Area: ffi_call
2n/a Purpose: Check uint8_t arguments.
3n/a Limitations: none.
4n/a PR: PR45677.
5n/a Originator: Dan Witte <dwitte@gmail.com> 20100916 */
6n/a
7n/a/* { dg-do run } */
8n/a
9n/a#include "ffitest.h"
10n/a
11n/a#define NARGS 7
12n/a
13n/atypedef unsigned char u8;
14n/a
15n/a#ifdef __GNUC__
16n/a__attribute__((noinline))
17n/a#endif
18n/auint8_t
19n/afoo (uint8_t a, uint8_t b, uint8_t c, uint8_t d,
20n/a uint8_t e, uint8_t f, uint8_t g)
21n/a{
22n/a return a + b + c + d + e + f + g;
23n/a}
24n/a
25n/auint8_t ABI_ATTR
26n/abar (uint8_t a, uint8_t b, uint8_t c, uint8_t d,
27n/a uint8_t e, uint8_t f, uint8_t g)
28n/a{
29n/a return foo (a, b, c, d, e, f, g);
30n/a}
31n/a
32n/aint
33n/amain (void)
34n/a{
35n/a ffi_type *ffitypes[NARGS];
36n/a int i;
37n/a ffi_cif cif;
38n/a ffi_arg result = 0;
39n/a uint8_t args[NARGS];
40n/a void *argptrs[NARGS];
41n/a
42n/a for (i = 0; i < NARGS; ++i)
43n/a ffitypes[i] = &ffi_type_uint8;
44n/a
45n/a CHECK (ffi_prep_cif (&cif, ABI_NUM, NARGS,
46n/a &ffi_type_uint8, ffitypes) == FFI_OK);
47n/a
48n/a for (i = 0; i < NARGS; ++i)
49n/a {
50n/a args[i] = i;
51n/a argptrs[i] = &args[i];
52n/a }
53n/a ffi_call (&cif, FFI_FN (bar), &result, argptrs);
54n/a
55n/a CHECK (result == 21);
56n/a return 0;
57n/a}