[Bug other/52609] -Wstrict-aliasing / missed diagnostics
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52609 Pawel Sikora changed: What|Removed |Added Known to fail||7.0 --- Comment #5 from Pawel Sikora --- still missed diagnostics for bug2(): pr52609.c: In function ‘bug1’: pr52609.c:6:9: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] return *(float*)([0]); // warning. ^~
[Bug other/52609] -Wstrict-aliasing / missed diagnostics
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52609 Manuel López-Ibáñez manu at gcc dot gnu.org changed: What|Removed |Added CC||dilyan.palauzov at aegee ||dot org --- Comment #4 from Manuel López-Ibáñez manu at gcc dot gnu.org 2012-10-23 18:47:08 UTC --- *** Bug 55040 has been marked as a duplicate of this bug. ***
[Bug other/52609] -Wstrict-aliasing / missed diagnostics
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.
[Bug other/52609] -Wstrict-aliasing / missed diagnostics
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]
[Bug other/52609] -Wstrict-aliasing / missed diagnostics
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52609 --- Comment #1 from Andrew Pinski pinskia at gcc dot gnu.org 2012-03-17 21:57:19 UTC --- 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.