1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-15 19:21:59 +03:00

jit: Create void type in the right context

Commit 3b991f81c4 introduced a specific context for types such
that all no longer referenced types can be dropped periodically
rather than leaking. One void pointer type creation was however
missed leading to an assertion failure in LLVM Debug builds.

Per buildfarm members canebreak and urutu.  Fix with assistance
from Andres. The codepath in question was refactored in version
13 hence why this only affected version 12.

Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/1106876.1700409912@sss.pgh.pa.us
This commit is contained in:
Daniel Gustafsson
2023-12-11 12:02:01 +01:00
parent e81e617f32
commit c922b24106

View File

@ -2620,7 +2620,9 @@ build_EvalXFunc(LLVMBuilderRef b, LLVMModuleRef mod, const char *funcname,
LLVMValueRef v_fn; LLVMValueRef v_fn;
LLVMTypeRef param_types[3]; LLVMTypeRef param_types[3];
LLVMValueRef params[3]; LLVMValueRef params[3];
LLVMContextRef lc;
lc = LLVMGetModuleContext(mod);
v_fn = LLVMGetNamedFunction(mod, funcname); v_fn = LLVMGetNamedFunction(mod, funcname);
if (!v_fn) if (!v_fn)
{ {
@ -2628,7 +2630,7 @@ build_EvalXFunc(LLVMBuilderRef b, LLVMModuleRef mod, const char *funcname,
param_types[1] = l_ptr(StructExprEvalStep); param_types[1] = l_ptr(StructExprEvalStep);
param_types[2] = l_ptr(StructExprContext); param_types[2] = l_ptr(StructExprContext);
sig = LLVMFunctionType(LLVMVoidType(), sig = LLVMFunctionType(LLVMVoidTypeInContext(lc),
param_types, lengthof(param_types), param_types, lengthof(param_types),
false); false);
v_fn = LLVMAddFunction(mod, funcname, sig); v_fn = LLVMAddFunction(mod, funcname, sig);