postgres.git / summary / log / commit / refs

commit    6eb31cedb316d59bf9c63658868ff0fcddcc085a
Author:   Andres Freund <andres@anarazel.de>
Date:     Sat Nov 03 22:55:23 2018 +0000
First released in: 12.0, 11.1

    Prevent generating EEOP_AGG_STRICT_INPUT_CHECK operations when nargs == 0.
    
    This only became a problem with 4c640f4f38, which didn't synchronize
    the value agg_strict_input_check.nargs is set to, with the guard
    condition for emitting the operation.
    
    Besides such instructions being unnecessary overhead, currently the
    LLVM JIT provider doesn't support them. It seems more sensible to
    avoid generating such instruction than supporting them. Add assertions
    to make it easier to debug a potential further occurance.
    
    Discussion: https://postgr.es/m/2a505161-2727-2473-7c46-591ed108ac52@email.cz
    Backpatch: 11-, like 4c640f4f38.


src/backend/executor/execExpr.c | 2 +- src/backend/jit/llvm/llvmjit_expr.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index 5397de4e050..4b44a4a4ead 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -3023,7 +3023,7 @@ ExecBuildAggTrans(AggState *aggstate, AggStatePerPhase phase, * just keep the prior transValue. This is true for both plain and * sorted/distinct aggregates. */ - if (trans_fcinfo->flinfo->fn_strict && numInputs > 0) + if (trans_fcinfo->flinfo->fn_strict && pertrans->numTransInputs > 0) { scratch.opcode = EEOP_AGG_STRICT_INPUT_CHECK; scratch.d.agg_strict_input_check.nulls = strictnulls; diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c index 7454d05acaf..0da318218fd 100644 --- a/src/backend/jit/llvm/llvmjit_expr.c +++ b/src/backend/jit/llvm/llvmjit_expr.c @@ -2124,6 +2124,8 @@ llvm_compile_expr(ExprState *state) LLVMValueRef v_nullp; LLVMBasicBlockRef *b_checknulls; + Assert(nargs > 0); + jumpnull = op->d.agg_strict_input_check.jumpnull; v_nullp = l_ptr_const(nulls, l_ptr(TypeStorageBool)); [parent: fd59b29c8739]