| /* PR middle-end/48335 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fno-tree-sra" } */ |
| |
| typedef short U __attribute__((may_alias, aligned (1))); |
| |
| struct S |
| { |
| double d; |
| }; |
| |
| void bar (struct S); |
| |
| void |
| f1 (int x) |
| { |
| struct S s = { .d = 0.0 }; |
| ((U *)((char *) &s.d + 1))[-1] = x; |
| __real__ s.d *= 7.0; |
| bar (s); |
| } |
| |
| void |
| f2 (int x) |
| { |
| struct S s = { .d = 0.0 }; |
| ((U *)((char *) &s.d + 1))[-2] = x; |
| __real__ s.d *= 7.0; |
| bar (s); |
| } |
| |
| void |
| f3 (int x) |
| { |
| struct S s = { .d = 0.0 }; |
| ((U *)((char *) &s.d + 1))[5] = x; |
| __real__ s.d *= 7.0; |
| bar (s); |
| } |