postgres.git / summary / log / commit / refs
commit a9a0a4d3f88b87564533b87af64d3282ca417dc6
Author: Andres Freund <andres@anarazel.de>
Date: Sun Jul 22 23:47:00 2018 +0000
First released in: 12.0, 11.0
Fix JITed EEOP_AGG_INIT_TRANS, which missed some state.
The JIT compiled implementation missed maintaining
AggState->{current_set,curaggcontext}. That could lead to trouble
because the transition value could be allocated in the wrong context.
Reported-By: Rushabh Lathia
Diagnosed-By: Dmitry Dolgov
Author: Dmitry Dolgov, with minor changes by me
Discussion: https://postgr.es/m/CAGPqQf165-=+Drw3Voim7M5EjHT1zwPF9BQRjLFQzCzYnNZEiQ@mail.gmail.com
Backpatch: 11-, where JIT compilation support was added
src/backend/jit/llvm/llvmjit_expr.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c
index 36c5f7d500e..31b03212751 100644
--- a/src/backend/jit/llvm/llvmjit_expr.c
+++ b/src/backend/jit/llvm/llvmjit_expr.c
@@ -2228,6 +2228,28 @@ llvm_compile_expr(ExprState *state)
{
LLVMValueRef params[3];
+ LLVMValueRef v_curaggcontext;
+ LLVMValueRef v_current_set;
+ LLVMValueRef v_aggcontext;
+
+ v_aggcontext = l_ptr_const(op->d.agg_init_trans.aggcontext,
+ l_ptr(StructExprContext));
+
+ v_current_set =
+ LLVMBuildStructGEP(b,
+ v_aggstatep,
+ FIELDNO_AGGSTATE_CURRENT_SET,
+ "aggstate.current_set");
+ v_curaggcontext =
+ LLVMBuildStructGEP(b,
+ v_aggstatep,
+ FIELDNO_AGGSTATE_CURAGGCONTEXT,
+ "aggstate.curaggcontext");
+
+ LLVMBuildStore(b, l_int32_const(op->d.agg_init_trans.setno),
+ v_current_set);
+ LLVMBuildStore(b, v_aggcontext,
+ v_curaggcontext);
params[0] = v_aggstatep;
params[1] = v_pertransp;
[parent: 04e3492c5c46]