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: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 19 Mar 2012 10:54:24 +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 #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.