Hi Jim, the documentation for -Wstrict-aliasing=2 says:

    It warns about all code which might break the strict aliasing
    rules that the compiler is using for optimization.  This warning
    catches all cases, but it will also give a warning for some
    ambiguous cases that are safe.

However, there are a number of cases of aliasing which it does not
catch.  For example, see PR 23106.  In general, the warning is
disabled by casts through void* or char*.  Also, the warning only
applies to casts of the address of a variable.

In general, I think the risky code is when we see some ordering of
these three statements:
    p2 = (TYPE *) p1;
    *p2;
    *p1;
However, computing that is probably non-trivial.

Anyhow, I think we need to change the documentation for
-Wstrict-aliasing=2.  It warns about more possible problems than
-Wstrict-aliasing, but it does not warn about all possible problems.

Any thoughts?

Ian

Reply via email to