[mlir][spirv] Fix crash in spirv-lower-abi-attributes
authorJakub Kuderski <kubak@google.com>
Fri, 13 Jan 2023 15:55:04 +0000 (10:55 -0500)
committerJakub Kuderski <kubak@google.com>
Fri, 13 Jan 2023 15:59:48 +0000 (10:59 -0500)
... when the are no SPIR-V env attributes.

Fixes: https://github.com/llvm/llvm-project/issues/59983

Reviewed By: antiagainst

Differential Revision: https://reviews.llvm.org/D141695

mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp
mlir/test/Dialect/SPIRV/Transforms/abi-interface.mlir

index 2a13d4a..c0ab215 100644 (file)
@@ -274,7 +274,12 @@ void LowerABIAttributesPass::runOnOperation() {
   spirv::ModuleOp module = getOperation();
   MLIRContext *context = &getContext();
 
-  spirv::TargetEnv targetEnv(spirv::lookupTargetEnv(module));
+  spirv::TargetEnvAttr targetEnvAttr = spirv::lookupTargetEnv(module);
+  if (!targetEnvAttr) {
+    module->emitOpError("missing SPIR-V target env attribute");
+    return signalPassFailure();
+  }
+  spirv::TargetEnv targetEnv(targetEnvAttr);
 
   SPIRVTypeConverter typeConverter(targetEnv);
 
index 4795a13..77e92da 100644 (file)
@@ -1,4 +1,5 @@
-// RUN: mlir-opt -split-input-file -spirv-lower-abi-attrs %s | FileCheck %s
+// RUN: mlir-opt --split-input-file --spirv-lower-abi-attrs --verify-diagnostics %s \
+// RUN:   | FileCheck %s
 
 module attributes {
   spirv.target_env = #spirv.target_env<
@@ -31,3 +32,10 @@ spirv.module Logical GLSL450 {
 } // end spirv.module
 
 } // end module
+
+// -----
+
+module {
+// expected-error@+1 {{'spirv.module' op missing SPIR-V target env attribute}}
+spirv.module Logical GLSL450 {}
+} // end module