Date: Tue, 28 Nov 1995 23:53:01 +1100 From: Bruce Evans <bde@zeta.org.au> To: hsu@freefall.freebsd.org, kaleb@x.org Cc: hackers@freefall.freebsd.org Subject: Re: gcc-2.7.1 compiled kernel Message-ID: <199511281253.XAA29508@godzilla.zeta.org.au>
next in thread | raw e-mail | index | archive | help
>Is the -O2 -fno-strength-reduce bug fixed? No, according to this. Bruce Article 4048 of gnu.gcc.bug: Path: gidora.kralizec.net.au!warrane.connect.com.au!news.syd.connect.com.au!news.mel.connect.com.au!harbinger.cc.monash.edu.au!simtel!lll-winken.llnl.gov!uwm.edu!math.ohio-state.edu!cis.ohio-state.edu!crunch.ikp.physik.th-darmstadt.de!anlauf From: anlauf@crunch.ikp.physik.th-darmstadt.de (Harald Anlauf) Newsgroups: gnu.gcc.bug Subject: Bug on i386/Linux with unsigned and -fstrength-reduce Date: 22 Nov 1995 17:42:17 -0500 Organization: GNUs Not Usenet Lines: 60 Sender: daemon@cis.ohio-state.edu Approved: bug-gcc@prep.ai.mit.edu Distribution: gnu Message-ID: <9511222241.AA19094@crunch> Hi, I found an interesting bug in gcc versions 2.5.8, 2.7.0, and 2.7.1, compiled as i486-*-linuxoldld and running under Linux. Compiling the program given below with options: -O2, -O[123] -fstrength-reduce -O[123] -fstrength-reduce -fno-unroll-loops produces the (wrong) output: A[0] = -3 A[1] = 0 A[2] = 0 whereas it gives the correct result with -O[123] -fno-strength-reduce -O[123] -fstrength-reduce -funroll-loops produces the (correct) result: A[0] = -3 A[1] = -2 A[2] = -1 The funny thing is that changing the unsigned integer B to a signed integer fixes the problem. The problem persists with "unsigned long", but goes away for "unsigned short", "unsigned char", or "unsigned long long". Anybody knows what's going on? Ciao, Harald [I am not the original author of this little demo program. Somebody posted it to gnu.gcc.bug some time ago, but unfortunately I didn't keep the reference. So please don't flame me.] ------------------------------> cut here <------------------------------ #include <stdio.h> int A[3]; unsigned int B = 3; void printit(void) { int i; for(i = 0; i < B; i++) fprintf(stdout, "A[%d] = %d\n", i, A[i]); } int main() { int i; for(i = 0; i < B; i++) A[i] = i - 3; printit(); return 0; } ------------------------------> cut here <------------------------------
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199511281253.XAA29508>