This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/19579] New: -march=i686 generates a bogus program
- From: "abulmo at club-internet dot fr" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 23 Jan 2005 00:28:58 -0000
- Subject: [Bug c/19579] New: -march=i686 generates a bogus program
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
The following program:
/*----------8<-----------------------*/
int printf(const char *, ...);
int f(void)
{
return 0;
}
void g(int a[])
{
int n3, n0;
int even;
int diff = a[1] - a[0];
n3 = 3;
if ((n0 = f()) > 0) {
even = diff + 2 * (n3 - n0);
} else {
even = diff + 2 * n3 + 1;
if (even > 0) even++;
else if (even < 0) even--;
}
if (even % 2 == 0) {
printf("OK! even = %d\n", even);
} else {
printf("WRONG! even = %d\n", even);
}
}
int main(void)
{
int a[2] = {46, 16};
g(a);
return 0;
}
/*----------8<-----------------------*/
when compiled with:
$ gcc-3.4.3 bug.c -o bug -O2 -march=i686
displays when executed:
WRONG! even = -23
whereas when compiled with:
$ gcc-3.4.3 bug.c -o bug -O2
gives the expected output:
OK! even = -24
The bug is also exhibited when some others -march options are used, like
-march=athlon-xp.
gcc-3.4.3 -v output is:
Reading specs from
/home/richard/programs/gcc-3.4.3/lib/gcc/i686-pc-linux-gnu/3.4.3/specs
Configured with: /home/richard/tmp/gcc/gcc-3.4.3/configure
--prefix=/home/richard/programs/gcc-3.4.3 --program-suffix=-3.4.3
--enable-threads=posix --enable-languages=c,c++
Thread model: posix
gcc version 3.4.3
bug.i:
# 1 "bug.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "bug.c"
int printf(const char *, ...);
int f(void)
{
return 0;
}
void g(int a[])
{
int n3, n0;
int even;
int diff = a[1] - a[0];
n3 = 3;
if ((n0 = f()) > 0) {
even = diff + 2 * (n3 - n0);
} else {
even = diff + 2 * n3 + 1;
if (even > 0) even++;
else if (even < 0) even--;
}
if (even % 2 == 0) {
printf("OK! even = %d\n", even);
} else {
printf("WRONG! even = %d\n", even);
}
}
int main(void)
{
int a[2] = {46, 16};
g(a);
return 0;
}
--
Summary: -march=i686 generates a bogus program
Product: gcc
Version: 3.4.3
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: abulmo at club-internet dot fr
CC: gcc-bugs at gcc dot gnu dot org
GCC host triplet: gcc-3.4.3/gentoo-linux/athlon-xp 2500+
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19579