> diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
> index 25cff56c3d0..e640b48205b 100644
> --- a/src/backend/utils/adt/timestamp.c
> +++ b/src/backend/utils/adt/timestamp.c
> @@ -4954,7 +4954,7 @@ timestamptz_trunc_internal(text *units, TimestampTz timestamp, pg_tz *tzp)
>                            case DTK_SECOND:
>                            case DTK_MILLISEC:
>                            case DTK_MICROSEC:
> -                                  PG_RETURN_TIMESTAMPTZ(timestamp);
> +                                  return timestamp;
>                                    break;
>
>                            default:

This one is an actual bug. With int64-pass-by-reference, PG_RETURN_TIMESTAMPTZ() returns a newly allocated address. This is easily reproduced by

SELECT date_trunc( 'week', timestamp with time zone 'infinity' );

which will return a random value on 32-bit systems. (It correctly returns 'infinity' otherwise.)

I'll see about backpatching fixes for this.




Reply via email to