Re: Consistently use palloc_object() and palloc_array()

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Thomas Munro <thomas.munro@gmail.com>
Cc: David Geier <geidav.pg@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, Chao Li <li.evan.chao@gmail.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2025-12-09T23:00:29Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. btree_gist: Fix memory allocation formula

  2. Use palloc_object() and palloc_array(), the last change

  3. pg_buffercache: Fix memory allocation formula

  4. Fix allocation formula in llvmjit_expr.c

  5. Use palloc_object() and palloc_array() in backend code

  6. Use palloc_object() and palloc_array() in more areas of the tree

  7. Use more palloc_object() and palloc_array() in contrib/

On Wed, Dec 10, 2025 at 11:41:25AM +1300, Thomas Munro wrote:
> On Wed, Dec 10, 2025 at 11:38 AM Michael Paquier <michael@paquier.xyz> wrote:
>>             b_checkargnulls =
>> -               palloc(sizeof(LLVMBasicBlockRef *) * op->d.func.nargs);
>> +               palloc_array(LLVMBasicBlockRef *, op->d.func.nargs);
>>
>> This one in llvmjit_expr.c was causing a compilation failure.  I am
>> not exactly sure why, but discarded for now.  I got a reproduction
>> locally as well as in the CI.
> 
> I think the original code is wrong, it should have been
> sizeof(LLVMBasicBlockRef)?  It'll be the same size anyway (these
> LLVM*Ref types are just pointers), but that'd explain why the
> transformation didn't compile.

Yes, perhaps, I would need to double-check to be sure, and you make it
sound like this one should be back-patched.  I was planning to get
back to this one with the batch of non-trivial changes that Bryan has
posted now that I've cleared the path for the stright-forward ones.
--
Michael