| /* PR middle-end/48335 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fno-tree-sra" } */ |
| |
| typedef long long T __attribute__((may_alias, aligned (1))); |
| typedef short U __attribute__((may_alias, aligned (1))); |
| |
| struct S |
| { |
| _Complex float d __attribute__((aligned (8))); |
| }; |
| |
| T |
| f1 (struct S x) |
| { |
| struct S s = x; |
| return *(T *) ((char *) &s.d + 1); |
| } |
| |
| int |
| f2 (struct S x) |
| { |
| struct S s = x; |
| return ((U *)((char *) &s.d + 1))[0]; |
| } |
| |
| int |
| f3 (struct S x) |
| { |
| struct S s = x; |
| return ((U *)((char *) &s.d + 1))[1]; |
| } |
| |
| int |
| f4 (struct S x) |
| { |
| struct S s = x; |
| return ((U *)((char *) &s.d + 1))[2]; |
| } |
| |
| int |
| f5 (struct S x) |
| { |
| struct S s = x; |
| return ((U *)((char *) &s.d + 1))[3]; |
| } |