[mlir] Fix possible null dereference during error logging in EmitC (#157456)
Fixes #157452
GitOrigin-RevId: ad96f68a583381def7c09ffd5593e529bbe17ebf
diff --git a/lib/Dialect/EmitC/IR/EmitC.cpp b/lib/Dialect/EmitC/IR/EmitC.cpp
index a73470c..5c8564b 100644
--- a/lib/Dialect/EmitC/IR/EmitC.cpp
+++ b/lib/Dialect/EmitC/IR/EmitC.cpp
@@ -1320,7 +1320,11 @@
// global has non-array type
auto lvalueType = dyn_cast<LValueType>(resultType);
- if (!lvalueType || lvalueType.getValueType() != globalType)
+ if (!lvalueType)
+ return emitOpError("on non-array type expects result type to be an "
+ "lvalue type for the global @")
+ << getName();
+ if (lvalueType.getValueType() != globalType)
return emitOpError("on non-array type expects result inner type ")
<< lvalueType.getValueType() << " to match type " << globalType
<< " of the global @" << getName();
diff --git a/test/Dialect/EmitC/invalid_ops.mlir b/test/Dialect/EmitC/invalid_ops.mlir
index a974744..f4c15f5 100644
--- a/test/Dialect/EmitC/invalid_ops.mlir
+++ b/test/Dialect/EmitC/invalid_ops.mlir
@@ -532,6 +532,16 @@
// -----
+emitc.global @myglobal_value : f32
+
+func.func @use_global() {
+ // expected-error @+1 {{'emitc.get_global' op on non-array type expects result type to be an lvalue type for the global @myglobal_value}}
+ %0 = emitc.get_global @myglobal_value : !emitc.array<2xf32>
+ return
+}
+
+// -----
+
func.func @member(%arg0: !emitc.lvalue<i32>) {
// expected-error @+1 {{'emitc.member' op operand #0 must be emitc.lvalue of EmitC opaque type values, but got '!emitc.lvalue<i32>'}}
%0 = "emitc.member" (%arg0) {member = "a"} : (!emitc.lvalue<i32>) -> !emitc.lvalue<i32>