[Mlir-commits] [mlir] 29b6433 - [OpenACC] verify acc::DeclareEnterOp operand not BlockArgument (#158095)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Sep 15 04:28:51 PDT 2025
Author: Scott Manley
Date: 2025-09-15T07:28:47-04:00
New Revision: 29b6433bfbd6b778d6a6686cac96ae4b7640224e
URL: https://github.com/llvm/llvm-project/commit/29b6433bfbd6b778d6a6686cac96ae4b7640224e
DIFF: https://github.com/llvm/llvm-project/commit/29b6433bfbd6b778d6a6686cac96ae4b7640224e.diff
LOG: [OpenACC] verify acc::DeclareEnterOp operand not BlockArgument (#158095)
Check that the operand of acc::DeclareEnterOp is a BlockArgument before
trying to get its defining operation so it will not segfault and instead
produce a clean error. Add test case.
Added:
Modified:
mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
mlir/test/Dialect/OpenACC/invalid.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
index ded4c7ab27274..b82ad20d8e194 100644
--- a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
+++ b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
@@ -3513,7 +3513,8 @@ checkDeclareOperands(Op &op, const mlir::ValueRange &operands,
"at least one operand must appear on the declare operation");
for (mlir::Value operand : operands) {
- if (!mlir::isa<acc::CopyinOp, acc::CopyoutOp, acc::CreateOp,
+ if (isa<BlockArgument>(operand) ||
+ !mlir::isa<acc::CopyinOp, acc::CopyoutOp, acc::CreateOp,
acc::DevicePtrOp, acc::GetDevicePtrOp, acc::PresentOp,
acc::DeclareDeviceResidentOp, acc::DeclareLinkOp>(
operand.getDefiningOp()))
diff --git a/mlir/test/Dialect/OpenACC/invalid.mlir b/mlir/test/Dialect/OpenACC/invalid.mlir
index 68afd9fccba79..24ce9784393b0 100644
--- a/mlir/test/Dialect/OpenACC/invalid.mlir
+++ b/mlir/test/Dialect/OpenACC/invalid.mlir
@@ -831,3 +831,12 @@ func.func @acc_loop_container() {
%value = memref.alloc() : memref<f32>
// expected-error @below {{invalid data clause modifiers: readonly}}
%0 = acc.create varPtr(%value : memref<f32>) -> memref<f32> {modifiers = #acc<data_clause_modifier readonly,zero,capture,always>}
+
+// -----
+
+func.func @verify_declare_enter(%arg0 : memref<i32>) {
+// expected-error @below {{expect valid declare data entry operation or acc.getdeviceptr as defining op}}
+ %0 = acc.declare_enter dataOperands(%arg0 : memref<i32>)
+ acc.declare_exit token(%0) dataOperands(%arg0 : memref<i32>)
+ return
+}
More information about the Mlir-commits
mailing list