This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug other/52609] -Wstrict-aliasing / missed diagnostics
- From: "pluto at agmk dot net" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 18 Mar 2012 09:32:03 +0000
- Subject: [Bug other/52609] -Wstrict-aliasing / missed diagnostics
- Auto-submitted: auto-generated
- References: <bug-52609-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52609
--- Comment #2 from Pawel Sikora <pluto at agmk dot net> 2012-03-18 09:32:03 UTC ---
(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():
$ gcc -Wall -Wstrict-aliasing=3 -O2 alias-bug.c -c
alias-bug.c: In function 'bug1':
alias-bug.c:6:2: warning: dereferencing type-punned pointer will break
strict-aliasing rules [-Wstrict-aliasing]