diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/transparent-union-5.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/transparent-union-5.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/transparent-union-5.c b/gcc/testsuite/gcc.dg/transparent-union-5.c new file mode 100644 index 000000000..47e245e24 --- /dev/null +++ b/gcc/testsuite/gcc.dg/transparent-union-5.c @@ -0,0 +1,37 @@ +/* PR 24255 */ +/* { dg-do run } */ +/* { dg-options "-O" } */ + +extern void abort (void); + +union wait { int w_status; }; + +typedef union +{ + union wait *uptr; + int *iptr; +} WAIT_STATUS __attribute__ ((__transparent_union__)); + +int status; +union wait wstatus; + +void __attribute__((noinline)) +test1 (WAIT_STATUS s) +{ + if (s.iptr != &status) + abort (); +} + +void __attribute__((noinline)) +test2 (WAIT_STATUS s) +{ + if (s.uptr != &wstatus) + abort (); +} + +int main() +{ + test1 (&status); + test2 (&wstatus); + return 0; +} |