[Bug other/52609] -Wstrict-aliasing / missed diagnostics

2016-10-25 Thread pawel_sikora at zoho dot com
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

2012-10-23 Thread manu at gcc dot gnu.org

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

2012-03-19 Thread rguenth at gcc dot gnu.org
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

2012-03-18 Thread pluto at agmk dot net
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

2012-03-17 Thread pinskia at gcc dot gnu.org
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.