diff options
Diffstat (limited to 'gcc/testsuite/c-c++-common/torture/complex-alias-1.c')
-rw-r--r-- | gcc/testsuite/c-c++-common/torture/complex-alias-1.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/gcc/testsuite/c-c++-common/torture/complex-alias-1.c b/gcc/testsuite/c-c++-common/torture/complex-alias-1.c new file mode 100644 index 00000000000..cdf832d630d --- /dev/null +++ b/gcc/testsuite/c-c++-common/torture/complex-alias-1.c @@ -0,0 +1,35 @@ +/* Accesses to complex numbers were sometimes marked as scalar and + sometimes as struct accesses. */ +/* { dg-do run } */ +/* { dg-options "-std=c99" { target c } } */ + +#ifdef __cplusplus +extern "C" { +#endif +extern void abort (void); +#ifdef __cplusplus +} +#endif +static double _Complex *fp_cxd(double _Complex *cx) { + return cx; +} + +int main( ) { + double _Complex cx = 4.0 + 3.0*(__extension__ 1.0iF); + double _Complex cx43 = 4.0 + 3.0*(__extension__ 1.0iF); + double _Complex cx11 = 1.0 + 1.0*(__extension__ 1.0iF); + + *fp_cxd(&cx) *= cx11; + *fp_cxd(&cx) /= cx11; + + double r_cx = __real__(cx); + double i_cx = __imag__(cx); + double r_cx43 = __real__(cx43); + double i_cx43 = __imag__(cx43); + + if( (r_cx == r_cx43) && (i_cx == i_cx43) ) { + return 0; + } else { + abort (); + } +} |