aboutsummaryrefslogtreecommitdiff
path: root/src/backend/jit/llvm/llvmjit_expr.c
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2018-07-22 16:47:00 -0700
committerAndres Freund <andres@anarazel.de>2018-07-22 17:00:41 -0700
commit6b4d860311e99621681f25db5db82f88348d8ea6 (patch)
treec3b6aa1163051a9eaf1d35e838698495debf8053 /src/backend/jit/llvm/llvmjit_expr.c
parent86eaf208ea048936df6be77276a246d3f92e9620 (diff)
downloadpostgresql-6b4d860311e99621681f25db5db82f88348d8ea6.tar.gz
postgresql-6b4d860311e99621681f25db5db82f88348d8ea6.zip
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
Diffstat (limited to 'src/backend/jit/llvm/llvmjit_expr.c')
-rw-r--r--src/backend/jit/llvm/llvmjit_expr.c22
1 files changed, 22 insertions, 0 deletions
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;