Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 01b5520

Browse files
committed
Fix illegal attribute propagation in LLVM JIT.
Commit 7255943 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 7255943. Reported-by: Pavel Stehule <pavel.stehule@gmail.com> Reviewed-by: Dmitry Dolgov <9erthalion6@gmail.com> Discussion: https://postgr.es/m/CAFj8pRACpVFr7LMdVYENUkScG5FCYMZDDdSGNU-tch%2Bw98OxYg%40mail.gmail.com
1 parent 8d9714b commit 01b5520

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

src/backend/jit/llvm/llvmjit.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,8 +570,11 @@ llvm_copy_attributes(LLVMValueRef v_from, LLVMValueRef v_to)
570570
/* copy function attributes */
571571
llvm_copy_attributes_at_index(v_from, v_to, LLVMAttributeFunctionIndex);
572572

573-
/* and the return value attributes */
574-
llvm_copy_attributes_at_index(v_from, v_to, LLVMAttributeReturnIndex);
573+
if (LLVMGetTypeKind(LLVMGetFunctionReturnType(v_to)) != LLVMVoidTypeKind)
574+
{
575+
/* and the return value attributes */
576+
llvm_copy_attributes_at_index(v_from, v_to, LLVMAttributeReturnIndex);
577+
}
575578

576579
/* and each function parameter's attribute */
577580
param_count = LLVMCountParams(v_from);

0 commit comments

Comments
 (0)