From dcdf9119a8e4a75cc5a0ad4db79ac2a1b5c42d95 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 21 Nov 2001 18:29:48 +0000 Subject: [PATCH] Tweak interval_avg support to avoid coredump with Alpha/Tru64 compiler. Per report from Bernd Tegge. --- src/backend/utils/adt/timestamp.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 7bb5bcab88..490e7beb1d 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.59 2001/10/25 05:49:45 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.60 2001/11/21 18:29:48 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1570,9 +1570,12 @@ interval_accum(PG_FUNCTION_ARGS) * buggy array code: it won't ensure proper alignment of Interval * objects on machines where double requires 8-byte alignment. That * should be fixed, but in the meantime... + * + * Note: must use DatumGetPointer here, not DatumGetIntervalP, + * else some compilers optimize into double-aligned load/store anyway. */ - memcpy(&sumX, DatumGetIntervalP(transdatums[0]), sizeof(Interval)); - memcpy(&N, DatumGetIntervalP(transdatums[1]), sizeof(Interval)); + memcpy((void *) &sumX, DatumGetPointer(transdatums[0]), sizeof(Interval)); + memcpy((void *) &N, DatumGetPointer(transdatums[1]), sizeof(Interval)); newsum = DatumGetIntervalP(DirectFunctionCall2(interval_pl, IntervalPGetDatum(&sumX), @@ -1609,9 +1612,12 @@ interval_avg(PG_FUNCTION_ARGS) * buggy array code: it won't ensure proper alignment of Interval * objects on machines where double requires 8-byte alignment. That * should be fixed, but in the meantime... + * + * Note: must use DatumGetPointer here, not DatumGetIntervalP, + * else some compilers optimize into double-aligned load/store anyway. */ - memcpy(&sumX, DatumGetIntervalP(transdatums[0]), sizeof(Interval)); - memcpy(&N, DatumGetIntervalP(transdatums[1]), sizeof(Interval)); + memcpy((void *) &sumX, DatumGetPointer(transdatums[0]), sizeof(Interval)); + memcpy((void *) &N, DatumGetPointer(transdatums[1]), sizeof(Interval)); /* SQL92 defines AVG of no values to be NULL */ if (N.time == 0) -- 2.11.0