Subject: Re: (mips): egcs on -current miscompiles strtod.c
To: Jonathan Stone <jonathan@DSG.Stanford.EDU>
From: Simon Burge <simonb@telstra.com.au>
List: tech-toolchain
Date: 02/06/1999 00:43:35
On Thu, 04 Feb 1999 19:29:23 -0800 Jonathan Stone wrote:
> hi all,
>
> There seems to be a bug in an EGCS-compiled strtod.c.
> This breaks Perl ("10" gets printed as ":", etc) an a few other
> things. (someone mentioned top recently on port-pmax).
Here's a quick'n'dirty bit of code based on part of the perl
configuration test program:
#define RES "0.1"
main()
{
char buf[16];
sprintf(buf, "%.*g", 8, 0.1);
printf("\"%s\" vs. \"%s\": %s\n", buf, RES,
strcmp(buf, RES) == 0 ? "pass" : "fail");
exit(0);
}
On pre-1.3.4:
vlad:~ 23> cc -o foo foo.c
vlad:~ 24> ./foo
"0.1" vs. "0.1": pass
On -current (3 weeks old):
mona:~ 23> cc -o foo foo.c
mona:~ 24> ./foo
"0.0:" vs. "0.1": fail
On -current (3 weeks old) with 1.3.4ish strtod.o:
mona:~ 23> cc -o foo foo.c strtod.o
mona:~ 24> ./foo
"0.1" vs. "0.1": pass
I hadn't noticed the problem until now. I just tried a clean perl build
(the original thing, not pkgsrc) and got a "sprinf oddity" error...
AHA! Looking more, it looks like an optimisation error:
mona:~ 77> cc -I/NetBSD/src/lib/libc/{include,stdio} -c -O1 strtod.c
mona:~ 78> cc -o foo foo.o strtod.o
mona:~ 79> ./foo
"0.1" vs. "0.1": pass
mona:~ 80> cc -I/NetBSD/src/lib/libc/{include,stdio} -c -O2 strtod.c
mona:~ 81> cc -o foo foo.o strtod.o
mona:~ 82> ./foo
"0.0:" vs. "0.1": fail
I guess the simple fix is to back out -O2 for mips in sys.mk... I'll
do that now.
Simon.