[Mlir-commits] [mlir] [mlir][SPIR-v] Fix null deref in SpecConstantOperationOp::verifyRegions (PR #207328)

Arseniy Obolenskiy llvmlistbot at llvm.org
Thu Jul 2 23:20:56 PDT 2026


https://github.com/aobolensk created https://github.com/llvm/llvm-project/pull/207328

None

>From 59e39b767b7e778c2aff4fb36554ae7675d8c83d Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Fri, 3 Jul 2026 08:20:16 +0200
Subject: [PATCH] [mlir][SPIR-v] Fix null deref in
 SpecConstantOperationOp::verifyRegions

---
 mlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp        |  5 +++--
 mlir/test/Dialect/SPIRV/IR/structure-ops.mlir | 11 +++++++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/mlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp b/mlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp
index c0393888af5c3..99bc3913c56c6 100644
--- a/mlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp
+++ b/mlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp
@@ -2083,8 +2083,9 @@ LogicalResult spirv::SpecConstantOperationOp::verifyRegions() {
     return emitOpError("invalid enclosed op");
 
   for (auto operand : enclosedOp.getOperands())
-    if (!isa<spirv::ConstantOp, spirv::ReferenceOfOp,
-             spirv::SpecConstantOperationOp>(operand.getDefiningOp()))
+    if (!isa_and_present<spirv::ConstantOp, spirv::ReferenceOfOp,
+                         spirv::SpecConstantOperationOp>(
+            operand.getDefiningOp()))
       return emitOpError(
           "invalid operand, must be defined by a constant operation");
 
diff --git a/mlir/test/Dialect/SPIRV/IR/structure-ops.mlir b/mlir/test/Dialect/SPIRV/IR/structure-ops.mlir
index c0b73b926c764..37a9e97106de9 100644
--- a/mlir/test/Dialect/SPIRV/IR/structure-ops.mlir
+++ b/mlir/test/Dialect/SPIRV/IR/structure-ops.mlir
@@ -1220,3 +1220,14 @@ spirv.module Logical GLSL450 {
     spirv.Return
   }
 }
+
+// -----
+
+spirv.module Logical GLSL450 {
+  spirv.func @foo(%arg0: i32) -> () "None" {
+    // expected-error @+1 {{invalid operand, must be defined by a constant operation}}
+    %0 = spirv.SpecConstantOperation wraps "spirv.IAdd"(%arg0, %arg0) : (i32, i32) -> i32
+
+    spirv.Return
+  }
+}



More information about the Mlir-commits mailing list