The following testcase should work with -fstrict-aliasing -O2 but does not:
struct S { short x; }; typedef struct S __attribute__((__may_alias__)) test; test *p; int g(int *a) { p = (test*)a; } int f() { int a; g(&a); a = 10; test s={1}; *p=s; return a; } int main() { if (f() == 10) __builtin_abort(); return 0; } -- Summary: RTL aliasing vs may_alias and structs Product: gcc Version: 4.2.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: rtl-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: pinskia at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28812