Fix illegal attribute propagation in LLVM JIT.
authorThomas Munro
Tue, 9 Apr 2024 22:46:15 +0000 (10:46 +1200)
committerThomas Munro
Tue, 9 Apr 2024 22:46:15 +0000 (10:46 +1200)
commitbf1cfe77ed49a4929695ba6c0367f784f2f6a10c
treeb6fe51f891b0aeacd4035902a5d69068ffeaaca2
parentdb4a0280d3671f0f88836e4f6987e333303fc771
Fix illegal attribute propagation in LLVM JIT.

Commit 72559438 started copying more attributes from AttributeTemplate
to the functions we generate on the fly.  In the case of deform
functions, which return void, this meant that "noundef", from
AttributeTemplate's return value (a Datum) was copied to a void type.
Older LLVM releases were OK with that, but LLVM 18 crashes.

Update our llvm_copy_attributes() function to skip copying the attribute
for the return value, if the target function returns void.

Thanks to Dmitry Dolgov for help chasing this down.

Back-patch to all supported releases, like 72559438.

Reported-by: Pavel Stehule
Reviewed-by: Dmitry Dolgov <[email protected]>
Discussion: https://postgr.es/m/CAFj8pRACpVFr7LMdVYENUkScG5FCYMZDDdSGNU-tch%2Bw98OxYg%40mail.gmail.com
src/backend/jit/llvm/llvmjit.c