http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60527
Bug ID: 60527 Summary: Incorrectly removed if statement while doing int arithmetics Product: gcc Version: 4.6.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: nicklas.ekstrand at sonymobile dot com Created attachment 32349 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32349&action=edit Test program modtest.c In the following code: static int getZ() { int tmp; Z = Z * A + B; tmp = Z; if (tmp == INT_MIN) tmp++; if (tmp < 0) tmp = -tmp; return tmp % MEMSIZE; } The if-statement tmp==INT_MIN is optimized away when using -O2 or higher, e.g., $ gcc -Wall -Wextra -g -O2 modtest.c -o pc_modtest -lrt $ ./pc_modtest arr=0x7fc1608be010 i=0 A=945 B=411 z1=231029 z2=-7483648 Segmentation fault When using -O0 the problem doesn't happen and the program will not cause a segmentation fault.