http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55075
Bug #: 55075
Summary: GCC optimizer makes bad assumptions on data range
Classification: Unclassified
Product: gcc
Version: 4.6.2
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: c
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: ju...@broadcom.com
Created attachment 28531
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28531
Simple file to demonstrate problem
When compiling a simple program, the compiler makes a bad assumption about the
possible range a value can have. As a result, in the attached example, it
raises a compile error. It is unknown if this can cause other, more subtle
errors at this time, however, it is suspected that it may produce bad code in
certain circumstances.
This bug is visible in gcc versions 4.6.2 (cross compiler for mips) and 4.7.1
(native compiler for pc). This bug does not occur on 4.5.1.
It is also known that the bug only occurs with optimization level -O2. It does
not occur with -O1.
I have attached test1.c. To reproduce the bug, compile with:
gcc -O2 -Werror=array-bounds -c test1.c
test1.c:
static int x = 0;
int main(void) {
while (1) {
{ volatile int somearray[1]; somearray[x] = 0; }
x--;
if (x <= 0) {
return;
}
{ volatile int somearray[1]; somearray[x] = 0; }
}
}