On Tue, Jan 18, 2011 at 3:27 PM, Mateusz Loskot <mate...@loskot.net> wrote: > Hi, > > Recently, I have reported mysterious issues on NetBSD 5.1 > emulated on SPARC. The whole first thread is here: > > http://lists.gnu.org/archive/html/qemu-devel/2011-01/msg01509.html > > I decided to investigate the problem deeper and with great help > from NetBSD folks, I managed to find reproducible test case. > Initially, it was AWK command: > > # echo NaN | awk '{print "test"}' > awk: floating point exception 8 > source line number 1 > > and next it boiled down to simple C program (see below). > Details of the investigation are archived in the NetBSD Problem > Report #44389 here: > > http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=44389 > > > Here is final version of the test program which reproduces the problem: > > #include <stdio.h> > #include <stdlib.h> > #include <math.h> > #include <errno.h> > > int is_number(const char *s) > { > double r; > char *ep; > errno = 0; > r = strtod(s, &ep); > if (r == HUGE_VAL) > printf("X:%g\n", r); > > if (ep == s || r == HUGE_VAL || errno == ERANGE) > return 0; > while (*ep == ' ' || *ep == '\t' || *ep == '\n') > ep++; > if (*ep == '\0') > return 1; > else > return 0; > } > > int main(int argc, char **argv) > { > double v; > > if (is_number("NaN")) { > printf("is a number\n"); > v = atof("NaN"); > } else { > printf("not a number\n"); > v = 0.0; > } > printf("%.4f\n", v); > > return 0; > } > > > On NetBSD/SPARC, the program receives SIGFPE: > > $ gcc ./nan_test_2.c > $ ./a.out > [1] Floating point exception (core dumped) ./a.out > > Specifically, it's caused by r == HUGE_VAL condition in > if (ep == s || r == HUGE_VAL || errno == ERANGE) > where r is NaN. > > All the signs indicate there is a bug in QEMU.
I'll install 5.1, but on 4.0 which I had installed, the program works fine: $ ./sigfpe is a number nan