http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55217
--- Comment #2 from Michael Veksler <mickey.veksler at gmail dot com> --- A much more clear-cut, weird, and severe case: $ cat delta.c int bar(); void foo() { int stop= 0; for (int i=10 ; i>=0 && !stop; --i) { stop= bar(); } } $ gcc -c -O3 -Wstrict-overflow=3 delta.c -std=c99 delta.c: In function ‘foo’: delta.c:5:22: warning: assuming signed overflow does not occur when changing X +- C1 cmp C2 to X cmp C1 +- C2 [-Wstrict-overflow] for (int i=10 ; i>=0 && !stop; --i) { ^ This make no sense at all and significantly lowers the usability of -Wstrict-overflow=3. Either VRP or constant-propagation must have realized that overflow is impossible, or does VRP come into play only after the warning is emitted? Or maybe VRP can't do it because such reasoning requires induction? Oh, and: $ gcc -v Using built-in specs. COLLECT_GCC=gcc Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.8.1-10ubuntu9' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu9)