postgres.git / summary / log / commit / refs

commit    86ef376bbe1b9568fa71e76ecfd3091d522368bb
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Thu Feb 09 20:49:58 2017 +0000

    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 dcef7175f38..05aabd1cd07 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -1546,9 +1546,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: 1888fad44003]