[Bug c/56463] New: infinite loop when having integer overflow in a simple accumulator
nakacristo at hotmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Feb 26 16:06:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56463
Bug #: 56463
Summary: infinite loop when having integer overflow in a simple
accumulator
Classification: Unclassified
Product: gcc
Version: 4.6.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: nakacristo@hotmail.com
A colleague has showed me a problem and I have reduced it to this code:
#include <stdio.h>
int main()
{
int i,j;
int a=0;
for(i=0;i<20000;i++)
for(j=0;j<600;j++)
a=a+3435345234440;
printf("%d\n",a);
return 0;
}
With 'gcc test.c' or 'gcc test.c -O' works correctly, but with 'gcc test.c -O2'
fails. More exactly, fails with 'gcc test.c -O -fstrict-overflow -ftree-pre
-ftree-vrp'.
With the optimization it becomes an infinite loop
00000000004004f4 <main>:
4004f4: b8 58 02 00 00 mov $0x258,%eax
4004f9: ba 58 02 00 00 mov $0x258,%edx
4004fe: 83 e8 01 sub $0x1,%eax
400501: 0f 44 c2 cmove %edx,%eax
400504: eb f8 jmp 4004fe <main+0xa>
The overflow could make the variable 'a' to take any value, but never to make
the loop infinite.
My gcc version: gcc version 4.6.3 (Gentoo 4.6.3 p1.9, pie-0.5.2)
I have checked that in gcc-4.5.3 works correctly.
More information about the Gcc-bugs
mailing list