diff --git a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp --- a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp +++ b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp @@ -544,6 +544,11 @@ if (getWaitDevnum() && getWaitOperands().empty()) return emitError("wait_devnum cannot appear without waitOperands"); + for (mlir::Value operand : getDataClauseOperands()) + if (!mlir::isa( + operand.getDefiningOp())) + return emitError("expect data entry operation as defining op"); + return success(); } diff --git a/mlir/test/Dialect/OpenACC/invalid.mlir b/mlir/test/Dialect/OpenACC/invalid.mlir --- a/mlir/test/Dialect/OpenACC/invalid.mlir +++ b/mlir/test/Dialect/OpenACC/invalid.mlir @@ -201,6 +201,12 @@ // ----- +%value = memref.alloc() : memref<10xf32> +// expected-error@+1 {{expect data entry operation as defining op}} +acc.enter_data dataOperands(%value : memref<10xf32>) + +// ----- + %0 = arith.constant 1.0 : f32 // expected-error@+1 {{operand #0 must be integer or index, but got 'f32'}} %1 = acc.bounds lowerbound(%0 : f32)