postgres.git / summary / log / commit / refs
commit cf73c6bfc7148077cda6ff68dae551c0a2674182
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Thu Feb 09 20:49:57 2017 +0000
First released in: 10.0, 9.4.12, 9.5.7, 9.6.3
Blind try to fix portability issue in commit 8f93bd851 et al.
The S/390 members of the buildfarm are showing failures indicating
that they're having trouble with the rint() calls I added yesterday.
There's no good reason for that, and I wonder if it is a compiler bug
similar to the one we worked around in d9476b838. Try to fix it using
the same method as before, namely to store the result of rint() back
into a "double" variable rather than immediately converting to int64.
(This isn't entirely waving a dead chicken, since on machines with
wider-than-double float registers, the extra store forces a width
conversion. I don't know if S/390 is like that, but it seems worth
trying.)
In passing, merge duplicate ereport() calls in float8_timestamptz().
Per buildfarm.
src/backend/utils/adt/timestamp.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index 33aed66edac..3a20b0af1da 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -1539,9 +1539,10 @@ make_interval(PG_FUNCTION_ARGS)
result->day = weeks * 7 + days;
#ifdef HAVE_INT64_TIMESTAMP
+ secs = rint(secs * USECS_PER_SEC);
result->time = hours * ((int64) SECS_PER_HOUR * USECS_PER_SEC) +
mins * ((int64) SECS_PER_MINUTE * USECS_PER_SEC) +
- (int64) rint(secs * USECS_PER_SEC);
+ (int64) secs;
#else
result->time = hours * (double) SECS_PER_HOUR +
mins * (double) SECS_PER_MINUTE +
[parent: 7786b984825e]