https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85989
Bug ID: 85989 Summary: Incorrect result for example involving unary minus in a loop Product: gcc Version: 6.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: ketan.surender at gmail dot com Target Milestone: --- Created attachment 44208 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44208&action=edit Preprocessed reproduction file Please see the attached file 'standalone.i'. When I run this in -O0 I see the result gcc -Wall -Wstrict-aliasing=0 -O0 standalone.i -o standalone ./standalone --> 0 --> 0 This is what I expect. If I compile with '-O1' I see gcc -Wall -Wstrict-aliasing=0 -O1 standalone.i -o standalone ./standalone --> 8 --> 8 Which is unexpected. I poked around in gdb and stared at the asm in godbolt and it seems like the negation is being omitted in the following loop: for (b_P5 = 0; b_P5 < 8; b_P5++) { P26 = P29; P29 = -(int)*P5; } Here is my gcc info Using built-in specs. COLLECT_GCC=[SNIP]/glnxa64/gcc-6.3.0/bin/gcc COLLECT_LTO_WRAPPER=[SNIP]/glnxa64/gcc-6.3.0/bin/../libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: [SNIP]/sources/gcc-6.3/configure --with-gmp=[SNIP]/glnxa64/gcc-6.3/gmp-4.3 --with-mpfr=[SNIP]/gcc-6.3/mpfr --with-mpc=[SNIP]/gcc-6.3/mpc --enable-languages=c,c++,fortran --with-bugurl=[SNIP],_Debugging --enable-shared --enable-linker-build-id --enable-plugin --enable-checking=release --enable-multiarch --enable-gold --enable-ld=default --enable-libstdcxx-time=no --prefix=[SNIP]/glnxa64/gcc-6.3.0 --with-pkgversion='MW GCC 6.3.0-GLIBC2.12' --with-tune=generic --with-system-zlib --enable-multilib --with-multilib-list=m32,m64 --with-arch-directory=amd64 --with-arch-32=i586 --with-abi=m64 Thread model: posix gcc version 6.3.0 (MW GCC 6.3.0-GLIBC2.12)