diff --git a/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp --- a/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp +++ b/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp @@ -274,7 +274,12 @@ 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); diff --git a/mlir/test/Dialect/SPIRV/Transforms/abi-interface.mlir b/mlir/test/Dialect/SPIRV/Transforms/abi-interface.mlir --- a/mlir/test/Dialect/SPIRV/Transforms/abi-interface.mlir +++ b/mlir/test/Dialect/SPIRV/Transforms/abi-interface.mlir @@ -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 @@ } // end spirv.module } // end module + +// ----- + +module { +// expected-error@+1 {{'spirv.module' op missing SPIR-V target env attribute}} +spirv.module Logical GLSL450 {} +} // end module