Commit 3a990a12 authored by Tom Lane's avatar Tom Lane

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
parent eab6e460
...@@ -501,10 +501,12 @@ SELECT power(float8 'inf', float8 '-inf'); ...@@ -501,10 +501,12 @@ SELECT power(float8 'inf', float8 '-inf');
0 0
(1 row) (1 row)
SELECT power(float8 '-inf', float8 '-2'); -- Intel's icc misoptimizes the code that controls the sign of this result,
power -- even with -mp1. Pending a fix for that, only test for "is it zero".
------- SELECT power(float8 '-inf', float8 '-2') = '0';
0 ?column?
----------
t
(1 row) (1 row)
SELECT power(float8 '-inf', float8 '-3'); SELECT power(float8 '-inf', float8 '-3');
......
...@@ -140,7 +140,9 @@ SELECT power(float8 'inf', float8 '-2'); ...@@ -140,7 +140,9 @@ SELECT power(float8 'inf', float8 '-2');
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 '-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 '-3');
SELECT power(float8 '-inf', float8 '2'); SELECT power(float8 '-inf', float8 '2');
SELECT power(float8 '-inf', float8 '3'); SELECT power(float8 '-inf', float8 '3');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment