postgres.git / summary / log / commit / refs

commit    d8c2877b9efafd37505f3cbb2cc2a7072d955667
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Fri Oct 20 17:40:15 2023 +0000
First released in: 17.0, 11.22, 12.17, 13.13, 14.10, 15.5, 16.1

    Dodge a compiler bug affecting timetz_zone/timetz_izone.
    
    This avoids a compiler bug occurring in AIX's xlc, even in pretty
    late-model revisions.  Buildfarm testing has now confirmed that
    only 64-bit xlc is affected.  Although we are contemplating
    dropping support for xlc in v17, it's still supported in the
    back branches, so we need this fix.
    
    Back-patch of code changes from HEAD commit 19fa97731.
    (The test cases were already back-patched, in 4a427b82c et al.)
    
    Discussion: https://postgr.es/m/CA+hUKGK=DOC+hE-62FKfZy=Ybt5uLkrg3zCZD-jFykM-iPn8yw@mail.gmail.com


src/backend/utils/adt/date.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index 8e9473a9e14..bff81eb0804 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -2830,10 +2830,11 @@ timetz_zone(PG_FUNCTION_ARGS) result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); result->time = t->time + (t->zone - tz) * USECS_PER_SEC; + /* C99 modulo has the wrong sign convention for negative input */ while (result->time < INT64CONST(0)) result->time += USECS_PER_DAY; - while (result->time >= USECS_PER_DAY) - result->time -= USECS_PER_DAY; + if (result->time >= USECS_PER_DAY) + result->time %= USECS_PER_DAY; result->zone = tz; @@ -2863,10 +2864,11 @@ timetz_izone(PG_FUNCTION_ARGS) result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); result->time = time->time + (time->zone - tz) * USECS_PER_SEC; + /* C99 modulo has the wrong sign convention for negative input */ while (result->time < INT64CONST(0)) result->time += USECS_PER_DAY; - while (result->time >= USECS_PER_DAY) - result->time -= USECS_PER_DAY; + if (result->time >= USECS_PER_DAY) + result->time %= USECS_PER_DAY; result->zone = tz; [parent: ed697c404065]