------- Comment #13 from pluto at agmk dot net 2009-01-12 14:43 ------- (In reply to comment #12) > This isn't really a warning from system headers: > > test.cpp:14: warning: dereferencing pointer '__x.13' does break > strict-aliasing > rules > > the location for the dereference is in test.cpp (if that is correct or not > is another issue). There is at least a bug that we will emit the note: part > even if the warning was suppressed - I am going to fix that. > > I can omit the warning for pointers that are declared in system headers > in addition to that. Probably this is what is the better behavior - but > I cannot easily report the dereference location even if it is in a system > header but the pointer is _not_ from a system header -- which is probably > what would be wanted here. > > So, > > t.h: > #pragma GCC system_header > > inline float deref_float (float *p) { return *p; } > > t.C: > #include "t.h" > > float transform(int i) > { > return deref_float ((float *)&i); > } > > _should_ emit a warning? Even if it looks like > > t.h: In function 'float transform(int)': > t.h:3: warning: dereferencing pointer 'i.0' does break strict-aliasing rules > t.C:5: note: initialized from here > > ? > > IMHO we want to warn unless _both_, the declaration and the dereference is > in a system header. >
this will be painfull for users, e.g. boost::optional uses so called aligned_storage via mistic void*/casts/etc and now i'm getting these warnings from boost-system-headers. in this way, the -isystem switch is completely useless. -- pluto at agmk dot net changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pluto at agmk dot net http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38477