aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2020-06-16 15:28:37 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2020-06-16 15:28:45 -0400
commit3a990a1263560ef28707bc623e875e75ae42041c (patch)
treeb9a3d0fefb35c7dc7ac813f5b5914eb85bb48ad9
parenteab6e460e00d61e5aae95298a0fe8c79a1653184 (diff)
downloadpostgresql-3a990a1263560ef28707bc623e875e75ae42041c.tar.gz
postgresql-3a990a1263560ef28707bc623e875e75ae42041c.zip
Lobotomize test for float -Inf ^ -2, at least for now.
Per POSIX this case should produce +0, but buildfarm member fossa (with icc (ICC) 19.0.5.281 20190815) is reporting -0. icc has a boatload of unsafe floating-point optimizations, with a corresponding boatload of not-too-well-documented compiler switches, and it seems our default use of "-mp1" isn't whacking it hard enough to keep it from misoptimizing the stanza in dpow() that checks whether y is odd. There's nothing wrong with that code (seeing that no other buildfarm member has trouble with it), so I'm content to blame this on the compiler. But without access to the compiler I'm not going to guess at what switches might be needed to fix it. For now, tweak the test case so it will accept either -0 or +0 as a correct answer. Discussion: https://postgr.es/m/E1jkyFX-0005RR-1Q@gemulon.postgresql.org
-rw-r--r--src/test/regress/expected/float8.out10
-rw-r--r--src/test/regress/sql/float8.sql4
2 files changed, 9 insertions, 5 deletions
diff --git a/src/test/regress/expected/float8.out b/src/test/regress/expected/float8.out
index 12b3d6223c6..c635dd7dcb6 100644
--- a/src/test/regress/expected/float8.out
+++ b/src/test/regress/expected/float8.out
@@ -501,10 +501,12 @@ SELECT power(float8 'inf', float8 '-inf');
0
(1 row)
-SELECT power(float8 '-inf', float8 '-2');
- power
--------
- 0
+-- Intel's icc misoptimizes the code that controls the sign of this result,
+-- even with -mp1. Pending a fix for that, only test for "is it zero".
+SELECT power(float8 '-inf', float8 '-2') = '0';
+ ?column?
+----------
+ t
(1 row)
SELECT power(float8 '-inf', float8 '-3');
diff --git a/src/test/regress/sql/float8.sql b/src/test/regress/sql/float8.sql
index b628cb77b8c..288969aed65 100644
--- a/src/test/regress/sql/float8.sql
+++ b/src/test/regress/sql/float8.sql
@@ -140,7 +140,9 @@ SELECT power(float8 'inf', float8 '-2');
SELECT power(float8 'inf', float8 '2');
SELECT power(float8 'inf', float8 'inf');
SELECT power(float8 'inf', float8 '-inf');
-SELECT power(float8 '-inf', float8 '-2');
+-- Intel's icc misoptimizes the code that controls the sign of this result,
+-- even with -mp1. Pending a fix for that, only test for "is it zero".
+SELECT power(float8 '-inf', float8 '-2') = '0';
SELECT power(float8 '-inf', float8 '-3');
SELECT power(float8 '-inf', float8 '2');
SELECT power(float8 '-inf', float8 '3');