[Bug c/58540] New: Incorrect warning message for '*=' statement and different results based on optimization
bernardwidynski at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Sep 26 04:52:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58540
Bug ID: 58540
Summary: Incorrect warning message for '*=' statement and
different results based on optimization
Product: gcc
Version: 4.7.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: bernardwidynski at gmail dot com
Created attachment 30900
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30900&action=edit
Example program which generates incorrect message
The code shown below generates a warning message
c_ex.c: In function ‘main’:
c_ex.c:15:8: warning: operation on ‘u.y’ may be undefined [-Wsequence-point]
c_ex.c:15:8: warning: ‘u.y’ is used uninitialized in this function
[-Wuninitialized]
Also, when compiled with optimization -O3, it prints the correct result.
When compiled without optimization it prints a zero.
Obviously, u.y is initialized. It is set to x + r.
The compiler should not generate a warning message and should
produce the same results regardless of the optimization level.
-------------------------------------------------------------------------
#include <stdio.h>
static double r = 0.;
static double x = 2.7182818284590452353602;
int main (void) {
union {
double y;
unsigned int w[2];
} u;
/* Set y = (x + r) squared */
u.y *= u.y = x + r;
printf("y = %lf\n",u.y);
return 0;
}
More information about the Gcc-bugs
mailing list