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

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

#countcontent
1n/a/* Area: ffi_call, closure_call
2n/a Purpose: Check long double arguments.
3n/a Limitations: none.
4n/a PR: none.
5n/a Originator: Blake Chaffin */
6n/a
7n/a/* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
8n/a/* This test is known to PASS on armv7l-unknown-linux-gnueabihf, so I have
9n/a remove the xfail for arm*-*-* below, until we know more. */
10n/a/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
11n/a/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
12n/a/* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
13n/a
14n/a#include "ffitest.h"
15n/a
16n/along double cls_ldouble_fn(
17n/a long double a1,
18n/a long double a2,
19n/a long double a3,
20n/a long double a4,
21n/a long double a5,
22n/a long double a6,
23n/a long double a7,
24n/a long double a8)
25n/a{
26n/a long double r = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8;
27n/a
28n/a printf("%Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg: %Lg\n",
29n/a a1, a2, a3, a4, a5, a6, a7, a8, r);
30n/a
31n/a return r;
32n/a}
33n/a
34n/astatic void
35n/acls_ldouble_gn(ffi_cif* cif __UNUSED__, void* resp,
36n/a void** args, void* userdata __UNUSED__)
37n/a{
38n/a long double a1 = *(long double*)args[0];
39n/a long double a2 = *(long double*)args[1];
40n/a long double a3 = *(long double*)args[2];
41n/a long double a4 = *(long double*)args[3];
42n/a long double a5 = *(long double*)args[4];
43n/a long double a6 = *(long double*)args[5];
44n/a long double a7 = *(long double*)args[6];
45n/a long double a8 = *(long double*)args[7];
46n/a
47n/a *(long double*)resp = cls_ldouble_fn(
48n/a a1, a2, a3, a4, a5, a6, a7, a8);
49n/a}
50n/a
51n/aint main(void)
52n/a{
53n/a ffi_cif cif;
54n/a void* code;
55n/a ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
56n/a void* args[9];
57n/a ffi_type* arg_types[9];
58n/a long double res = 0;
59n/a
60n/a long double arg1 = 1;
61n/a long double arg2 = 2;
62n/a long double arg3 = 3;
63n/a long double arg4 = 4;
64n/a long double arg5 = 5;
65n/a long double arg6 = 6;
66n/a long double arg7 = 7;
67n/a long double arg8 = 8;
68n/a
69n/a arg_types[0] = &ffi_type_longdouble;
70n/a arg_types[1] = &ffi_type_longdouble;
71n/a arg_types[2] = &ffi_type_longdouble;
72n/a arg_types[3] = &ffi_type_longdouble;
73n/a arg_types[4] = &ffi_type_longdouble;
74n/a arg_types[5] = &ffi_type_longdouble;
75n/a arg_types[6] = &ffi_type_longdouble;
76n/a arg_types[7] = &ffi_type_longdouble;
77n/a arg_types[8] = NULL;
78n/a
79n/a CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 8, &ffi_type_longdouble,
80n/a arg_types) == FFI_OK);
81n/a
82n/a args[0] = &arg1;
83n/a args[1] = &arg2;
84n/a args[2] = &arg3;
85n/a args[3] = &arg4;
86n/a args[4] = &arg5;
87n/a args[5] = &arg6;
88n/a args[6] = &arg7;
89n/a args[7] = &arg8;
90n/a args[8] = NULL;
91n/a
92n/a ffi_call(&cif, FFI_FN(cls_ldouble_fn), &res, args);
93n/a /* { dg-output "1 2 3 4 5 6 7 8: 36" } */
94n/a printf("res: %Lg\n", res);
95n/a /* { dg-output "\nres: 36" } */
96n/a
97n/a CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ldouble_gn, NULL, code) == FFI_OK);
98n/a
99n/a res = ((long double(*)(long double, long double, long double, long double,
100n/a long double, long double, long double, long double))(code))(arg1, arg2,
101n/a arg3, arg4, arg5, arg6, arg7, arg8);
102n/a /* { dg-output "\n1 2 3 4 5 6 7 8: 36" } */
103n/a printf("res: %Lg\n", res);
104n/a /* { dg-output "\nres: 36" } */
105n/a
106n/a return 0;
107n/a}