http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54558
Bug #: 54558 Summary: get wrong answer in {static int a; a = 4; a += (a++);} Classification: Unclassified Product: gcc Version: 4.7.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassig...@gcc.gnu.org ReportedBy: soar...@foxmail.com 1. Code below should output "a=9", however it output "a=5" #include <stdio.h> int main() { static int a; a = 4; a += (a++); printf("a=%d\n", a); return 0; } 2. If omit "static" in "static int a", compile and re-run, it output expected result "a=9" 3. If omit "++" in "a += (a++)", compile and re-run, it output expected result "a=8" 4. Using gcc -S code in 1, below is a segment of assembly code, hope that helps movl $4, a.1817 movl a.1817, %eax movl a.1817, %edx addl %eax, %edx // %edx equals to 8 movl %edx, a.1817 addl $1, %eax // %eax equals to 5 movl %eax, a.1817 movl a.1817, %eax movl %eax, 4(%esp) movl $.LC0, (%esp) call printf movl $0, %eax leave 5. information obtained by "gcc -v -save-temps all-your-options source-file" Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-linux-gnu/4.7.1/lto-wrapper Target: i686-pc-linux-gnu Configured with: /build/src/gcc-4.7-20120721/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --enable-libstdcxx-time --enable-gnu-unique-object --enable-linker-build-id --with-ppl --enable-cloog-backend=isl --disable-ppl-version-check --disable-cloog-version-check --enable-lto --enable-gold --enable-ld=default --enable-plugin --with-plugin-ld=ld.gold --with-linker-hash-style=gnu --disable-multilib --disable-libssp --disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-checking=release Thread model: posix gcc version 4.7.1 20120721 (prerelease) (GCC) COLLECT_GCC_OPTIONS='-v' '-save-temps' '-mtune=generic' '-march=pentiumpro' /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/cc1 -E -quiet -v app.c -mtune=generic -march=pentiumpro -fpch-preprocess -o app.i ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../../i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/include /usr/local/include /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/include-fixed /usr/include End of search list. COLLECT_GCC_OPTIONS='-v' '-save-temps' '-mtune=generic' '-march=pentiumpro' /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/cc1 -fpreprocessed app.i -quiet -dumpbase app.c -mtune=generic -march=pentiumpro -auxbase app -version -o app.s GNU C (GCC) version 4.7.1 20120721 (prerelease) (i686-pc-linux-gnu) compiled by GNU C version 4.7.1 20120721 (prerelease), GMP version 5.0.5, MPFR version 3.1.1, MPC version 1.0 warning: MPC header version 1.0 differs from library version 1.0.1. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C (GCC) version 4.7.1 20120721 (prerelease) (i686-pc-linux-gnu) compiled by GNU C version 4.7.1 20120721 (prerelease), GMP version 5.0.5, MPFR version 3.1.1, MPC version 1.0 warning: MPC header version 1.0 differs from library version 1.0.1. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: b205659ec6a57a28c245e2c9c58a01b0 COLLECT_GCC_OPTIONS='-v' '-save-temps' '-mtune=generic' '-march=pentiumpro' as -v --32 -o app.o app.s GNU assembler version 2.22.0 (i686-pc-linux-gnu) using BFD version (GNU Binutils) 2.22.0.20120323 COMPILER_PATH=/usr/lib/gcc/i686-pc-linux-gnu/4.7.1/:/usr/lib/gcc/i686-pc-linux-gnu/4.7.1/:/usr/lib/gcc/i686-pc-linux-gnu/:/usr/lib/gcc/i686-pc-linux-gnu/4.7.1/:/usr/lib/gcc/i686-pc-linux-gnu/ LIBRARY_PATH=/usr/lib/gcc/i686-pc-linux-gnu/4.7.1/:/usr/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-save-temps' '-mtune=generic' '-march=pentiumpro' /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/collect2 --build-id --eh-frame-hdr --hash-style=gnu -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../crt1.o /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../crti.o /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/crtbegin.o -L/usr/lib/gcc/i686-pc-linux-gnu/4.7.1 -L/usr/lib/gcc/i686-pc-linux-gnu/4.7.1/../../.. app.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/crtend.o /usr/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../crtn.o