jit: Correct parameter type for generated expression evaluation functions.
clang only uses the 'i1' type for scalar booleans, not for pointers to booleans (as the pointer might be pointing into a larger memory allocation). Therefore a pointer-to-bool needs to the "storage" boolean. There's no known case of wrong code generation due to this, but it seems quite possible that it could cause problems (see e.g. 72559438f92). Author: Andres Freund Discussion: https://postgr.es/m/20201207212142.wz5tnbk2jsaqzogb@alap3.anarazel.de Backpatch: 11-, where jit support was added
This commit is contained in:
parent
4f64daf73a
commit
01c6370a32
@ -155,7 +155,7 @@ llvm_compile_expr(ExprState *state)
|
||||
|
||||
param_types[0] = l_ptr(StructExprState); /* state */
|
||||
param_types[1] = l_ptr(StructExprContext); /* econtext */
|
||||
param_types[2] = l_ptr(TypeParamBool); /* isnull */
|
||||
param_types[2] = l_ptr(TypeStorageBool); /* isnull */
|
||||
|
||||
eval_sig = LLVMFunctionType(TypeSizeT,
|
||||
param_types, lengthof(param_types),
|
||||
@ -265,8 +265,6 @@ llvm_compile_expr(ExprState *state)
|
||||
|
||||
v_tmpvalue = LLVMBuildLoad(b, v_tmpvaluep, "");
|
||||
v_tmpisnull = LLVMBuildLoad(b, v_tmpisnullp, "");
|
||||
v_tmpisnull =
|
||||
LLVMBuildTrunc(b, v_tmpisnull, TypeParamBool, "");
|
||||
|
||||
LLVMBuildStore(b, v_tmpisnull, v_isnullp);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user