[Bug c/47148] New: likely wrong code bug
regehr at cs dot utah.edu
gcc-bugzilla@gcc.gnu.org
Sat Jan 1 18:40:00 GMT 2011
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: unassigned@gcc.gnu.org
ReportedBy: regehr@cs.utah.edu
CC: chenyang@cs.utah.edu
Host: x86_64-unknown-linux-gnu
Target: x86_64-unknown-linux-gnu
Build: x86_64-unknown-linux-gnu
[regehr@gamow tmp436]$ current-gcc -O1 small.c -o small
[regehr@gamow tmp436]$ ./small
0
[regehr@gamow tmp436]$ current-gcc -O2 small.c -o small
[regehr@gamow tmp436]$ ./small
1
[regehr@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)
[regehr@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;
}
More information about the Gcc-bugs
mailing list