There is no MDOperand in llvm 3.5. v2: Check if kernel metadata is present to avoid crash (EdB). --- .../state_trackers/clover/llvm/invocation.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp index 50c4557..8fd5807 100644 --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp @@ -371,12 +371,13 @@ namespace { return kernel_node; } - llvm::MDNode* - node_from_op_checked(const llvm::MDOperand &md_operand, - llvm::StringRef expect_name, - unsigned expect_num_args) + const llvm::MDNode * + get_operand_checked(const llvm::MDNode *parent, + const unsigned op_idx, + const llvm::StringRef expect_name, + const unsigned expect_num_args) { - auto node = llvm::cast<llvm::MDNode>(md_operand); + auto node = llvm::cast<llvm::MDNode>(parent->getOperand(op_idx)); assert(node->getNumOperands() == expect_num_args && "Wrong number of operands."); @@ -399,10 +400,13 @@ namespace { auto num_args = kernel_func->getArgumentList().size(); auto kernel_node = get_kernel_metadata(kernel_func); - auto aq = node_from_op_checked(kernel_node->getOperand(2), - "kernel_arg_access_qual", num_args + 1); - auto ty = node_from_op_checked(kernel_node->getOperand(3), - "kernel_arg_type", num_args + 1); + if (!kernel_node) + return std::vector<kernel_arg_md>(num_args, kernel_arg_md("", "")); + + auto aq = get_operand_checked(kernel_node, 2, "kernel_arg_access_qual", + num_args + 1); + auto ty = get_operand_checked(kernel_node, 3, "kernel_arg_type", + num_args + 1); std::vector<kernel_arg_md> res; res.reserve(num_args); -- 2.4.6 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev