| /* PR middle-end/48335 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fno-tree-sra" } */ |
| |
| typedef long long T __attribute__((may_alias)); |
| |
| struct S |
| { |
| _Complex float d __attribute__((aligned (8))); |
| }; |
| |
| void bar (struct S); |
| |
| void |
| f1 (T x) |
| { |
| struct S s; |
| *(T *) &s.d = x; |
| __real__ s.d *= 7.0; |
| bar (s); |
| } |
| |
| void |
| f2 (int x) |
| { |
| struct S s = { .d = 0.0f }; |
| *(char *) &s.d = x; |
| __real__ s.d *= 7.0; |
| bar (s); |
| } |
| |
| void |
| f3 (int x) |
| { |
| struct S s = { .d = 0.0f }; |
| ((char *) &s.d)[2] = x; |
| __real__ s.d *= 7.0; |
| bar (s); |
| } |
| |
| void |
| f4 (int x, int y) |
| { |
| struct S s = { .d = 0.0f }; |
| ((char *) &s.d)[y] = x; |
| __real__ s.d *= 7.0; |
| bar (s); |
| } |