Cleanup gcc trick with varattrib_1b_e in VARATT_EXTERNAL_GET_POINTER()

From: Michael Paquier <michael(at)paquier(dot)xyz>
To: Postgres hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Cleanup gcc trick with varattrib_1b_e in VARATT_EXTERNAL_GET_POINTER()
Date: 2025-06-09 08:21:19
Message-ID: aEaZf_45j-D_HNw5@paquier.xyz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

Back in b89e151054a0, the following macro has been introduced to
retrieve the varatt_external of an on-disk external TOAST Datum, stuff
now in detoast.h:
/*
* Macro to fetch the possibly-unaligned contents of an EXTERNAL datum
* into a local "struct varatt_external" toast pointer. This should be
* just a memcpy, but some versions of gcc seem to produce broken code
* that assumes the datum contents are aligned. Introducing an explicit
* intermediate "varattrib_1b_e *" variable seems to fix it.
*/
#define VARATT_EXTERNAL_GET_POINTER(toast_pointer, attr) \
do { \
varattrib_1b_e *attre = (varattrib_1b_e *) (attr); \
Assert(VARATT_IS_EXTERNAL(attre)); \
Assert(VARSIZE_EXTERNAL(attre) == sizeof(toast_pointer) + VARHDRSZ_EXTERNAL); \
memcpy(&(toast_pointer), VARDATA_EXTERNAL(attre), sizeof(toast_pointer)); \
} while (0)

I vaguely recall that this has been mentioned during the unconference
session dedicated to TOAST, or perhaps not. Anyway, I've just bumped
into that again while working on this area, and I am wondering if this
is relevant these days.

varattrib_1b_e should never be referenced directly in the code, so it
would be nice to clean up things like in the attached. The CI is OK
with that, which is not the buildfarm but it's a start.

Comments or opinions?
--
Michael

Attachment Content-Type Size
0001-Simplify-gcc-related-tweak-in-VARATT_EXTERNAL_GET_PO.patch text/x-diff 1.6 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Fujii Masao 2025-06-09 08:27:19 Re: Extend COPY FROM with HEADER <integer> to skip multiple lines
Previous Message wenhui qiu 2025-06-09 07:17:19 Re: [PATCH] Refactor: Extract XLogRecord info