From 819b01ced894028d41a34ec0178de9e7637b23de Mon Sep 17 00:00:00 2001 From: Anthony Green Date: Wed, 14 Sep 2022 07:07:15 -0400 Subject: Add test case --- testsuite/libffi.call/bpo-38748.c | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 testsuite/libffi.call/bpo-38748.c (limited to 'testsuite') diff --git a/testsuite/libffi.call/bpo-38748.c b/testsuite/libffi.call/bpo-38748.c new file mode 100644 index 0000000..26ea270 --- /dev/null +++ b/testsuite/libffi.call/bpo-38748.c @@ -0,0 +1,40 @@ +/* Area: bpo-38748 + Purpose: test for stdcall alignment problem + Source: github.com/python/cpython/pull/26204 */ + +/* { dg-do run } */ + +#include "ffitest.h" +#include "ffi_common.h" + +static long ABI_ATTR align_arguments(long l1, + long long l2) +{ + return l1 + l2; +} + +int main(void) +{ + ffi_cif cif; + ffi_type *args[4] = { + &ffi_type_uint32, + &ffi_type_uint64 + }; + UINT32 lr1, lr2, l1 = 1; + UINT64 l2 = 2; + void *values[2] = {&l1, &l2}; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, + &ffi_type_uint32, args) == FFI_OK); + + lr1 = align_arguments(l1, l2); + + ffi_call(&cif, FFI_FN(align_arguments), &lr2, values); + + if (lr1 == lr2) + printf("bpo-38748 arguments tests ok!\n"); + else + CHECK(0); + exit(0); +} -- cgit v1.2.1