All of these functions overflow the loop induction variable so only -fwrapv will provide the behavior you want for all of the functions. The inconsistent behavior is due to the overflows happening for induction variables. If it was not an induction variable then -fno-strict-overflow would have worked..-fno-strict-overflow is only defined to work for non loop variables.
Thanks, Andrew On Sep 17, 2013, at 6:28 PM, "mednafen at gmail dot com" <gcc-bugzi...@gcc.gnu.org> wrote: > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58454 > > Bug ID: 58454 > Summary: Potentially wrong(or at least weird/inconsistent) code > generation with -O2 -fno-strict-overflow > Product: gcc > Version: 4.8.1 > Status: UNCONFIRMED > Severity: normal > Priority: P3 > Component: c > Assignee: unassigned at gcc dot gnu.org > Reporter: mednafen at gmail dot com > > Created attachment 30844 > --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30844&action=edit > Testcase program. > > Working: > XXX@willow:~/halt$ /usr/local/gcc-4.8.1/bin/gcc -Wall -O0 -o halt halt.c > XXX@willow:~/halt$ ./halt > IMm3: **** > IMm2: *** > IMm1: ** > IM: * > > > ????: > XXX@willow:~/halt$ /usr/local/gcc-4.8.1/bin/gcc -Wall -O2 -o halt halt.c > XXX@willow:~/halt$ ./halt > IMm3: ****IMm3: ****IMm3: ****IMm3: ****IMm3: ****IMm3: ****IMm3: ****IMm3: > ****IMm3: ****IMm3: ****IMm3: ****IMm3: ****IMm3: ****IMm3: ****IMm3: > ****IMm3: > ****IMm3: ****IMm3: ****IMm3: ****IMm3: ****IMm3: ****IMm3: ****IMm3: > ****IMm3: > ****IMm3: ****Aborted > > > Working: > XXX@willow:~/halt$ /usr/local/gcc-4.8.1/bin/gcc -Wall -O2 > -fno-aggressive-loop-optimizations -o halt halt.c > XXX@willow:~/halt$ ./halt > IMm3: > ****************************************************************************************************Aborted > > > Broken: > XXX@willow:~/halt$ /usr/local/gcc-4.8.1/bin/gcc -Wall -O2 -fno-strict-overflow > -o halt halt.c > XXX@willow:~/halt$ ./halt > IMm3: **** > IMm2: *** > IMm1: > *********************************************************************************************Aborted > > > Broken: > XXX@willow:~/halt$ /usr/local/gcc-4.8.1/bin/gcc -Wall -O2 > -fno-aggressive-loop-optimizations -fno-strict-overflow -o halt halt.c > XXX@willow:~/halt$ ./halt > IMm3: **** > IMm2: *** > IMm1: > *********************************************************************************************Aborted > > > Working: > XXX@willow:~/halt$ /usr/local/gcc-4.8.1/bin/gcc -Wall -O2 -fno-strict-overflow > -fno-tree-vrp -o halt halt.c > XXX@willow:~/halt$ ./halt > IMm3: **** > IMm2: *** > IMm1: ** > IM: * > > > Working: > XXX@willow:~/halt$ /usr/local/gcc-4.8.1/bin/gcc -Wall -O2 -fno-strict-overflow > -fwrapv -o halt halt.c > XXX@willow:~/halt$ ./halt > IMm3: **** > IMm2: *** > IMm1: ** > IM: * > > > XXX@willow:~/halt$ /usr/local/gcc-4.8.1/bin/gcc -v > Using built-in specs. > COLLECT_GCC=/usr/local/gcc-4.8.1/bin/gcc > COLLECT_LTO_WRAPPER=/usr/local/gcc-4.8.1/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper > Target: x86_64-unknown-linux-gnu > Configured with: ../gcc-4.8.1/configure --prefix=/usr/local/gcc-4.8.1 > Thread model: posix > gcc version 4.8.1 (GCC)