Re: [PATCH] Add tests for Bitmapset

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Michael Paquier <michael(at)paquier(dot)xyz>
Cc: Greg Burd <greg(at)burd(dot)me>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Robert Haas <robertmhaas(at)gmail(dot)com>, Nathan Bossart <nathandbossart(at)gmail(dot)com>, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>
Subject: Re: [PATCH] Add tests for Bitmapset
Date: 2025-09-23 16:46:49
Message-ID: 3097370.1758646009@sss.pgh.pa.us
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Michael Paquier <michael(at)paquier(dot)xyz> writes:
> On Tue, Sep 23, 2025 at 01:43:47AM -0400, Tom Lane wrote:
>> This patch seems to be rather full of arbitrary casts to or
>> from Datum, which is no longer okay. You need to be using
>> the appropriate conversion macros, such as PointerGetDatum.

> Right, this can ve reproduced with a -m32 added to gcc.

Curiously, I don't see these warnings on 32-bit FreeBSD
(with clang version 19.1.7). But I tested your patch on
mamba's host and confirmed that it makes that gcc happy.

> I don't see a need for a Datum manipulation in these conversion
> macros, as we already allocate the results to and from "text"
> before/after using the GETARG or RETURN macros. Using directly
> text_to_cstring() and cstring_to_text() takes care of the warnings, as
> well.

Yeah, this is better, but I think the new macros could use a bit
more parenthesis-twiddling:

+#define BITMAPSET_TO_TEXT(bms) cstring_to_text(nodeToString((bms)))

The extra parens around "bms" are surely unnecessary. (If they were
necessary, it could only be because nodeToString was a macro that
failed to parenthesize its argument where needed. But that would
be a bug to fix in nodeToString, not here.)

+#define TEXT_TO_BITMAPSET(str) (Bitmapset *) stringToNode(text_to_cstring(str))

Here, on the other hand, I think an extra outer set of parens
would be a good idea, ie

+#define TEXT_TO_BITMAPSET(str) ((Bitmapset *) stringToNode(text_to_cstring(str)))

It may be that the C cast binds tightly enough that this cannot
be a problem, but I don't think assuming that is project style.

regards, tom lane

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Nathan Bossart 2025-09-23 17:03:31 thoughts on v18 RMT
Previous Message Tom Lane 2025-09-23 16:27:59 Re: Optimize LISTEN/NOTIFY