------- 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