From f69a11209a5eb346e0e79ea95060d7c22999c210 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 21 May 2004 00:11:06 +0000 Subject: [PATCH] re PR target/15302 ([3.3/3.4 only] gcc not consistent for passing structures with complex in them) 2004-05-20 H.J. Lu PR target/15302 * gcc.dg/compat/struct-complex-1.h: New file. * gcc.dg/compat/struct-complex-1_main.c: Likewise. * gcc.dg/compat/struct-complex-1_x.c: Likewise. * gcc.dg/compat/struct-complex-1_y.c: Likewise. From-SVN: r82076 --- gcc/testsuite/ChangeLog | 8 +++++ .../gcc.dg/compat/struct-complex-1.h | 17 +++++++++++ .../gcc.dg/compat/struct-complex-1_main.c | 21 ++++++++++++++ .../gcc.dg/compat/struct-complex-1_x.c | 29 +++++++++++++++++++ .../gcc.dg/compat/struct-complex-1_y.c | 21 ++++++++++++++ 5 files changed, 96 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/compat/struct-complex-1.h create mode 100644 gcc/testsuite/gcc.dg/compat/struct-complex-1_main.c create mode 100644 gcc/testsuite/gcc.dg/compat/struct-complex-1_x.c create mode 100644 gcc/testsuite/gcc.dg/compat/struct-complex-1_y.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9a9b2daaa81..f2fa8f4a0e0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2004-05-20 H.J. Lu + + PR target/15302 + * gcc.dg/compat/struct-complex-1.h: New file. + * gcc.dg/compat/struct-complex-1_main.c: Likewise. + * gcc.dg/compat/struct-complex-1_x.c: Likewise. + * gcc.dg/compat/struct-complex-1_y.c: Likewise. + 2004-05-20 Roger Sayle PR middle-end/3074 diff --git a/gcc/testsuite/gcc.dg/compat/struct-complex-1.h b/gcc/testsuite/gcc.dg/compat/struct-complex-1.h new file mode 100644 index 00000000000..8b5393774c4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/compat/struct-complex-1.h @@ -0,0 +1,17 @@ +#include + +struct st +{ + int s1; + float complex x; + int s2; +}; + +typedef struct { float r, i; } _complex; + +struct stc +{ + int s1; + _complex x; + int s2; +}; diff --git a/gcc/testsuite/gcc.dg/compat/struct-complex-1_main.c b/gcc/testsuite/gcc.dg/compat/struct-complex-1_main.c new file mode 100644 index 00000000000..92e886acf33 --- /dev/null +++ b/gcc/testsuite/gcc.dg/compat/struct-complex-1_main.c @@ -0,0 +1,21 @@ +/* { dg-options "-O" } */ + +#ifdef __x86_64__ +/* Test function argument passing. PR target/15302. */ + +extern void struct_complex_1_x (void); +extern void exit (int); + +int +main () +{ + struct_complex_1_x (); + exit (0); +} +#else +int +main () +{ + return 0; +} +#endif diff --git a/gcc/testsuite/gcc.dg/compat/struct-complex-1_x.c b/gcc/testsuite/gcc.dg/compat/struct-complex-1_x.c new file mode 100644 index 00000000000..180d58a48e6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/compat/struct-complex-1_x.c @@ -0,0 +1,29 @@ +/* { dg-options "-O" } */ + +#ifdef __x86_64__ +#include "struct-complex-1.h" + +struct st st1; +struct stc st2; + +extern void foo (); +extern void bar (); + +int +struct_complex_1_x () +{ + st1.s1 = 1; + st1.s2 = 2; + __real__ st1.x = 2; + __imag__ st1.x = 4; + st2.s1 = 1; + st2.s2 = 2; + st2.x.r = 2; + st2.x.i = 4; + foo (st1); + foo (st2); + bar (st1); + bar (st2); + return 0; +} +#endif diff --git a/gcc/testsuite/gcc.dg/compat/struct-complex-1_y.c b/gcc/testsuite/gcc.dg/compat/struct-complex-1_y.c new file mode 100644 index 00000000000..0f0c3f3f2e5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/compat/struct-complex-1_y.c @@ -0,0 +1,21 @@ +/* { dg-options "-O" } */ + +#ifdef __x86_64__ +#include +#include "struct-complex-1.h" + +void +bar(struct st x) +{ + if (x.s1 != 1 || x.s2 != 2 + || __real__ x.x != 2 || __imag__ x.x != 4) + abort (); +} + +void +foo(struct stc x) +{ + if (x.s1 != 1 || x.s2 != 2 || x.x.r != 2 || x.x.i != 4) + abort (); +} +#endif