Maybe also add an assert in ac_add_function_attr that the attr is a single flag? Something like
assert(attr && util_is_power_of_two(attr)); Either way, this patch is Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl> On Fri, Nov 11, 2016 at 9:36 PM, Daniel Scharrer <dan...@constexpr.org> wrote: > This fixes a NULL pointer dereference for intrinsics with more than > one function attribute introduced in commit 2fdaf38. > The fix is ported from the lp_build_intrinsic changes in commit 8bdd52c. > --- > > I'm a bit unsure about the index change from 0 to -1, but the gallium code > does > this as well and without it all vulkan apps fail with: > LLVM ERROR: Cannot select: target intrinsic %llvm.SI.vs.load.input > > src/amd/common/ac_nir_to_llvm.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c > index b7ccea8..aa2d488 100644 > --- a/src/amd/common/ac_nir_to_llvm.c > +++ b/src/amd/common/ac_nir_to_llvm.c > @@ -1675,7 +1675,11 @@ emit_llvm_intrinsic(struct nir_to_llvm_context *ctx, > const char *name, > LLVMSetFunctionCallConv(function, LLVMCCallConv); > LLVMSetLinkage(function, LLVMExternalLinkage); > > - ac_add_function_attr(function, 0, attrib_mask | > AC_FUNC_ATTR_NOUNWIND); > + attrib_mask |= AC_FUNC_ATTR_NOUNWIND; > + while (attrib_mask) { > + enum ac_func_attr attr = 1u << > u_bit_scan(&attrib_mask); > + ac_add_function_attr(function, -1, attr); > + } > } > return LLVMBuildCall(ctx->builder, function, params, param_count, ""); > } > -- > 2.10.2 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev