From: Jakub Kuderski Date: Wed, 29 Mar 2023 16:08:21 +0000 (-0400) Subject: [mlir][spirv] Fix null pointer dereference in `--test-spirv-target-env` X-Git-Tag: upstream/17.0.6~13307 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=16672dba5f05172ce62b609f93a5fc254e37ec4d;p=platform%2Fupstream%2Fllvm.git [mlir][spirv] Fix null pointer dereference in `--test-spirv-target-env` Fixes: https://github.com/llvm/llvm-project/issues/61710 Reviewed By: antiagainst Differential Revision: https://reviews.llvm.org/D147163 --- diff --git a/mlir/test/Dialect/SPIRV/IR/target-env.mlir b/mlir/test/Dialect/SPIRV/IR/target-env.mlir index 15e0513..5f3292d 100644 --- a/mlir/test/Dialect/SPIRV/IR/target-env.mlir +++ b/mlir/test/Dialect/SPIRV/IR/target-env.mlir @@ -1,4 +1,5 @@ -// RUN: mlir-opt -mlir-disable-threading -test-spirv-target-env %s | FileCheck %s +// RUN: mlir-opt --split-input-file --verify-diagnostics --mlir-disable-threading \ +// RUN: --test-spirv-target-env %s | FileCheck %s // Note: The following tests check that a spirv.target_env can properly control // the conversion target and filter unavailable ops during the conversion. @@ -32,6 +33,14 @@ // Vulkan memory model is available via extension SPV_KHR_vulkan_memory_model, // which extensions are incorporated into SPIR-V 1.5. + +// expected-error @+1 {{missing 'spirv.target_env' attribute}} +func.func @main() { + return +} + +// ----- + //===----------------------------------------------------------------------===// // MaxVersion //===----------------------------------------------------------------------===// diff --git a/mlir/test/lib/Dialect/SPIRV/TestAvailability.cpp b/mlir/test/lib/Dialect/SPIRV/TestAvailability.cpp index fc01d5a..091c7ca 100644 --- a/mlir/test/lib/Dialect/SPIRV/TestAvailability.cpp +++ b/mlir/test/lib/Dialect/SPIRV/TestAvailability.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/Func/IR/FuncOps.h" +#include "mlir/Dialect/SPIRV/IR/SPIRVAttributes.h" #include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" #include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h" #include "mlir/Pass/Pass.h" @@ -210,9 +211,8 @@ void ConvertToTargetEnv::runOnOperation() { MLIRContext *context = &getContext(); func::FuncOp fn = getOperation(); - auto targetEnv = fn.getOperation() - ->getAttr(spirv::getTargetEnvAttrName()) - .cast(); + auto targetEnv = dyn_cast_or_null( + fn.getOperation()->getAttr(spirv::getTargetEnvAttrName())); if (!targetEnv) { fn.emitError("missing 'spirv.target_env' attribute"); return signalPassFailure();