Adrian Maier schrieb:
Hello,

While setting up a buildfarm installation for cygwin,  I've
uncountered the following
regression failure :

    float8               ... FAILED

================== pgsql.3132/src/test/regress/regression.diffs
*** ./expected/float8-small-is-zero.out    Tue Jul 18 09:24:52 2006
--- ./results/float8.out    Tue Jul 18 09:53:42 2006
***************
*** 13,29 ****
 SELECT '-10e400'::float8;
 ERROR:  "-10e400" is out of range for type double precision
 SELECT '10e-400'::float8;
!  float8
! --------
!      0
! (1 row)
!
 SELECT '-10e-400'::float8;
!  float8
! --------
!     -0
! (1 row)
!
 -- bad input
 INSERT INTO FLOAT8_TBL(f1) VALUES ('');
 ERROR:  invalid input syntax for type double precision: ""
--- 13,21 ----
 SELECT '-10e400'::float8;
 ERROR:  "-10e400" is out of range for type double precision
 SELECT '10e-400'::float8;
! ERROR:  "10e-400" is out of range for type double precision
 SELECT '-10e-400'::float8;
! ERROR:  "-10e-400" is out of range for type double precision
 -- bad input
 INSERT INTO FLOAT8_TBL(f1) VALUES ('');
 ERROR:  invalid input syntax for type double precision: ""
***************
*** 377,383 ****
--- 369,377 ----
 INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
 ERROR:  "-10e400" is out of range for type double precision
 INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
+ ERROR:  "10e-400" is out of range for type double precision
 INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
+ ERROR:  "-10e-400" is out of range for type double precision
 -- maintain external table consistency across platforms
 -- delete all values and reinsert well-behaved ones
 DELETE FROM FLOAT8_TBL;
=========================================

This happening on cygwin 1.5.20 (running on top of winXP),   gcc 3.4.4.


The entire check.log can be found here :
   http://www.newsoftcontrol.ro/~am/pgfarm/check.log
The other logs generated by the buildfarm can be found here:
  http://www.newsoftcontrol.ro/~am/pgfarm/

Thanks,
Which postgresql version?
Can we have a regular cygwin error report please mailed to cygwin at cygwin.com please. See http://cygwin.com/problems.html (cygcheck -s -v -r > cygcheck.out)

Looks like a strtod() newlib feature, but I haven't inspected closely.
http://sources.redhat.com/ml/newlib/2006/msg00020.html

BTW: HAVE_LONG_LONG_INT_64 is defined, so INT64_IS_BUSTED is defined also.

Does it look the same on redhat fedora?
Our buildfarm doesn't have these issues,
this runs gcc-3.3.3 and gcc-3.4.4

The problem I see is that float8in() in
src/backend/utils/adt/float.c checks only for "-Infinity" and not "-inf" as returned by newlib:
  pg_strncasecmp(num, "-Infinity", 9) == 0

Can you test this?
$ cat test-strtod.c
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <float.h>

double d;
char *tail;

int main() {
    errno = 0;
    d = strtod("-10e400", &tail);
printf("double: %f, errno: %d, tail: '%s', isinf: %d, fabs: %f, inf>max: %d" ,
           d, errno, tail, isinf(d), fabs(d), fabs(d) > DBL_MAX ? 1 : 0);
}

$ gcc test-strtod.c; ./a
double: -inf, errno: 34, tail: '', isinf: 1, fabs: inf, inf>max: 1
--
Reini Urban - postgresql-cygwin maintainer
http://phpwiki.org/  http://murbreak.at/
http://helsinki.at/  http://spacemovie.mur.at/

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Reply via email to