Hello, I'm trying to understand what '-fstrict-aliasing' actually means. Looking at the man page, one can read: -fstrict-aliasing Allow the compiler to assume the strictest aliasing rules applicable to the language being compiled. For C [...] What does "the strictest aliasing rules ..." means ? - Does it mean that Gcc allows only a subset of the standard aliasing rules (which I believe is defined in 6.5p7 ? In this case, which ones ? That would mean that Gcc also miss compiled conforming programs. - Does it mean that the C standard has some 'gray' areas (undefined behaviours) about aliasing and Gcc choose to specify the behaviour for optimisation purposes ? - or something else ? Also I don't really understand the examples provided by the man page. Ok type punning using union is still allowed. But the second example which is: However, this code might not: int f() { union a_union t; int* ip; t.d = 3.0; ip = &t.i; return *ip; } _might_ not work. Why using 'might' ? Does it work or not ? AFAIK, this type of aliasing is defined by the standard. The third example is: Similarly, access by taking the address, casting the resulting pointer and dereferencing the result has undefined behavior, even if the cast uses a union type, e.g.: int f() { double d = 3.0; return ((union a_union *) &d)->i; } Again in my understanding of the standard, this is an undefined behaviour. So why does man page mention this case ? Clarifications would be very appreciated. Thanks. -- Francis