http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52609
--- Comment #3 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-03-19 10:54:24 UTC --- (In reply to comment #2) > (In reply to comment #1) > > >accessing unsigned* via float* looks buggy > > > > It does not have to be if the original argument was originally of type > > float. > > Aliasing is not about type of pointers but the type which is used to access > > and > > such. > > ok, here's an updated testcase: > > $ cat alias-bug.c > unsigned buffer[1]; > > float bug1( unsigned u ) > { > buffer[0]=u; > return *(float*)(&buffer[0]); // warning. > } > > float bug2( unsigned u ) > { > buffer[0]=u; > float* ptr=(float*)&buffer[0]; > return *ptr; // missed strict aliasing warning. > } > > gcc repots warning only for bug1() and misses warning for bug2(): There is a duplicate bug for this somewhere. The warning machinery only looks at a single stmt.