Re: [PATCH] Add tests for Bitmapset

Greg Burd <greg@burd.me>

From: Greg Burd <greg@burd.me>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Michael Paquier <michael@paquier.xyz>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-09-23T18:26:19Z
Lists: pgsql-hackers

Attachments

On Sep 23 2025, at 12:46 pm, Tom Lane <tgl@sss.pgh.pa.us> wrote:

> Michael Paquier <michael@paquier.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.

Tom, thanks for pointing out the oversight.  Apologies, I should have
tried that out in my local tests.

>> 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)))

Agreed, that was my mistake.

> 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)))

Sounds reasonable to me.

> 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

patch attached, best.

-greg

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Minor fixes for test_bitmapset.c

  2. test_bitmapset: Improve random function

  3. Add mem_exceeded_count column to pg_stat_replication_slots.

  4. Tidy-up unneeded NULL parameter checks from SQL function

  5. Remove check for NULL in STRICT function

  6. Fixes for comments in test_bitmapset

  7. Minor fixups of test_bitmapset.c

  8. test_bitmapset: Simplify code of the module

  9. test_bitmapset: Expand more the test coverage

  10. Fix compiler warnings in test_bitmapset

  11. Add a test module for Bitmapset