http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47148
Summary: likely wrong code bug Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassig...@gcc.gnu.org ReportedBy: reg...@cs.utah.edu CC: cheny...@cs.utah.edu Host: x86_64-unknown-linux-gnu Target: x86_64-unknown-linux-gnu Build: x86_64-unknown-linux-gnu [reg...@gamow tmp436]$ current-gcc -O1 small.c -o small [reg...@gamow tmp436]$ ./small 0 [reg...@gamow tmp436]$ current-gcc -O2 small.c -o small [reg...@gamow tmp436]$ ./small 1 [reg...@gamow tmp436]$ current-gcc -v Using built-in specs. COLLECT_GCC=current-gcc COLLECT_LTO_WRAPPER=/uusoc/exports/scratch/regehr/z/compiler-install/gcc-r168380-install/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.6.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ../configure --with-libelf=/usr/local --enable-lto --prefix=/home/regehr/z/compiler-install/gcc-r168380-install --program-prefix=r168380- --enable-languages=c,c++ Thread model: posix gcc version 4.6.0 20101231 (experimental) (GCC) [reg...@gamow tmp436]$ cat small.c int printf(const char *format, ...); static unsigned div(unsigned p1, unsigned p2) { return p1 / p2; } static unsigned rshift (unsigned p1, unsigned p2) { if (p2 >= 32) return p1; else return p1 >> p2; } static unsigned g_26 = 1; static unsigned g_78 = 1; static void func_28 (unsigned char p_30, unsigned p_31) { if (p_31) { unsigned l1 = div (0x7000, p_30-2) ^ g_26; unsigned l2 = rshift (g_26, g_26); unsigned l4 = g_26 - l2; g_78 &= (l4 && (g_26-1)) + l1; } } static void func_2 (void) { func_28 (1, 1); } int main(void) { func_2(); func_28 (-1, 1); printf("%d\n", g_78); return 0; }