------- Comment #3 from pinskia at gmail dot com 2009-07-07 03:44 ------- Subject: Re: New: dereferencing type-punned pointer warnings cannot be disabled
Sent from my iPhone On Jul 6, 2009, at 6:12 PM, "mikulas at artax dot karlin dot mff dot cuni dot cz" <gcc-bugzi...@gcc.gnu.org> wrote: > Gcc became recently (4.4) very bad regarding false positive type- > punned > warnings. In previous versions, the warnings could be suppressed by > casting to > (void *), in 3.x and 4.1 it worked perfectly, in 4.3 it still worked > somehow > (except in -Wstrict-aliasing=3 mode), in 4.4 there are cases where > it doesn't > work at all. > > I don't want to completely disable the warnings with -Wno-strict- > aliasing (this > could leave bugs unnotified), but I need a method to disable them on > case-by-case basis once I verified that the code in question is > correct. > > Simple example, compile with -O2 -Wall: > > extern int c; > int a(void) > { > return *(short *)(void *)&c; > } This is a very bad example of a false positive as you are acessing an int as a short; that is undefined. I will look at your code later on, my laptop for home is currently broken. > > In 4.4 the warning can't be disabled at all! The (void *) cast > doesn't suppress > the warning and none of three options to -Wstrict-aliasing helps. In > 4.3 the > cast to (void *) suppressed the warning in -Wstrict-aliasing 1,2 > modes (and > didn't suppress it in the default mode 3), in 4.4 the warning can't be > suppressed at all. > > Gcc developers tried to made these warnings more "intelligent" with > less false > positives, but unfortunatelly they completely broke the method to > disable them > in the specific case. For me, false positives are not a major > problem --- when > I get a false positive, I just read the code, check it and if I > conclude that > it's OK, I disable the warning with (void *). > > But if there's no way to disable false positives, it makes the > warnings > completely useless. > > > -- > Summary: dereferencing type-punned pointer warnings cannot > be > disabled > Product: gcc > Version: 4.4.1 > Status: UNCONFIRMED > Severity: major > Priority: P3 > Component: regression > AssignedTo: unassigned at gcc dot gnu dot org > ReportedBy: mikulas at artax dot karlin dot mff dot cuni dot cz > GCC build triplet: i686-pc-linux-gnu > GCC host triplet: i686-pc-linux-gnu > GCC target triplet: i686-pc-linux-gnu > > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40665 > -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40665