]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
jit: Create void type in the right context
authorDaniel Gustafsson <dgustafsson@postgresql.org>
Mon, 11 Dec 2023 11:02:01 +0000 (12:02 +0100)
committerDaniel Gustafsson <dgustafsson@postgresql.org>
Mon, 11 Dec 2023 11:02:01 +0000 (12:02 +0100)
Commit 3b991f81c45 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

src/backend/jit/llvm/llvmjit_expr.c

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