https://github.com/mygitljf updated 
https://github.com/llvm/llvm-project/pull/206215

>From 2fc18628d1c3420e7399ad967866ce401fdf6fbe Mon Sep 17 00:00:00 2001
From: mygitljf <[email protected]>
Date: Sat, 27 Jun 2026 12:12:37 +0000
Subject: [PATCH 1/2] [MLIR] Diagnose missing call result arrow

---
 clang/test/CIR/IR/invalid-call.cir         |  9 +++++++++
 mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp |  3 +++
 mlir/lib/Interfaces/CallInterfaces.cpp     |  3 ++-
 mlir/test/Dialect/LLVMIR/invalid.mlir      | 10 ++++++++++
 4 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/clang/test/CIR/IR/invalid-call.cir 
b/clang/test/CIR/IR/invalid-call.cir
index a9c7e38f73af6..11b5c4425549e 100644
--- a/clang/test/CIR/IR/invalid-call.cir
+++ b/clang/test/CIR/IR/invalid-call.cir
@@ -10,6 +10,15 @@ cir.func @f1() {
 
 // -----
 
+cir.func private @f_missing_result_arrow()
+cir.func @call_missing_empty_result() {
+  // expected-error @+2 {{expected '->' followed by function result list}}
+  cir.call @f_missing_result_arrow() : ()
+  cir.return
+}
+
+// -----
+
 !u32i = !cir.int<u, 32>
 
 cir.func private @f2()
diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp 
b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
index 58f569abff8ea..0cc007433ac0e 100644
--- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
+++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
@@ -1388,8 +1388,11 @@ static ParseResult parseCallTypeAndResolveOperands(
   }
   SmallVector<Type> argTypes;
   SmallVector<Type> resTypes;
+  SMLoc signatureLoc = parser.getCurrentLocation();
   if (call_interface_impl::parseFunctionSignature(parser, argTypes, argAttrs,
                                                   resTypes, resultAttrs)) {
+    if (parser.getCurrentLocation() != signatureLoc)
+      return failure();
     if (isDirect)
       return parser.emitError(trailingTypesLoc,
                               "expected direct call to have 1 trailing types");
diff --git a/mlir/lib/Interfaces/CallInterfaces.cpp 
b/mlir/lib/Interfaces/CallInterfaces.cpp
index e8ed4b339a0cb..af670cb62c1c6 100644
--- a/mlir/lib/Interfaces/CallInterfaces.cpp
+++ b/mlir/lib/Interfaces/CallInterfaces.cpp
@@ -72,7 +72,8 @@ ParseResult call_interface_impl::parseFunctionSignature(
     return call_interface_impl::parseFunctionResultList(parser, resultTypes,
                                                         resultAttrs);
   if (mustParseEmptyResult)
-    return failure();
+    return parser.emitError(parser.getCurrentLocation(),
+                            "expected '->' followed by function result list");
   return success();
 }
 
diff --git a/mlir/test/Dialect/LLVMIR/invalid.mlir 
b/mlir/test/Dialect/LLVMIR/invalid.mlir
index d5ea5c8de862e..1d0bb0b6ef999 100644
--- a/mlir/test/Dialect/LLVMIR/invalid.mlir
+++ b/mlir/test/Dialect/LLVMIR/invalid.mlir
@@ -241,6 +241,16 @@ func.func @call_missing_ptr_type(%callee : !llvm.func<i8 
(i8)>, %arg : i8) {
 
 // -----
 
+func.func private @callee()
+
+func.func @call_missing_empty_result() {
+  // expected-error@+2 {{expected '->' followed by function result list}}
+  llvm.call @callee() : ()
+  llvm.return
+}
+
+// -----
+
 func.func private @standard_func_callee()
 
 func.func @call_missing_ptr_type(%arg : i8) {

>From 7c84efca9a10c9f8cbbf974bea754e088388e5fd Mon Sep 17 00:00:00 2001
From: mygitljf <[email protected]>
Date: Sun, 12 Jul 2026 02:49:36 +0000
Subject: [PATCH 2/2] [MLIR] Unify call signature diagnostics

---
 flang/lib/Optimizer/Dialect/FIROps.cpp        |  2 +-
 flang/test/Fir/invalid.fir                    |  8 ++++++++
 mlir/include/mlir/Interfaces/CallInterfaces.h |  1 +
 mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp    | 12 ++----------
 mlir/test/Dialect/LLVMIR/invalid.mlir         |  6 ++----
 5 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/flang/lib/Optimizer/Dialect/FIROps.cpp 
b/flang/lib/Optimizer/Dialect/FIROps.cpp
index ba047e71d6aa3..6f0c8eecfd462 100644
--- a/flang/lib/Optimizer/Dialect/FIROps.cpp
+++ b/flang/lib/Optimizer/Dialect/FIROps.cpp
@@ -1714,7 +1714,7 @@ mlir::ParseResult fir::CallOp::parse(mlir::OpAsmParser 
&parser,
   llvm::SmallVector<mlir::DictionaryAttr> resultAttrs;
   if (mlir::call_interface_impl::parseFunctionSignature(
           parser, argTypes, argAttrs, resTypes, resultAttrs))
-    return parser.emitError(parser.getNameLoc(), "expected function type");
+    return mlir::failure();
   mlir::FunctionType funcType =
       mlir::FunctionType::get(parser.getContext(), argTypes, resTypes);
   if (isDirect) {
diff --git a/flang/test/Fir/invalid.fir b/flang/test/Fir/invalid.fir
index 5471bcd8acc29..937ce891bfef0 100644
--- a/flang/test/Fir/invalid.fir
+++ b/flang/test/Fir/invalid.fir
@@ -1,5 +1,13 @@
 // RUN: fir-opt -split-input-file -verify-diagnostics 
--strict-fir-volatile-verifier %s
 
+func.func @call_missing_empty_result() {
+  // expected-error@+2{{expected '->' followed by function result list}}
+  fir.call @callee() : ()
+  return
+}
+
+// -----
+
 // expected-error@+1{{custom op 'fir.string_lit' must have character type}}
 %0 = fir.string_lit "Hello, World!"(13) : !fir.int<32>
 
diff --git a/mlir/include/mlir/Interfaces/CallInterfaces.h 
b/mlir/include/mlir/Interfaces/CallInterfaces.h
index 2bf3a3ca5f8a8..02c04c0f8dd1e 100644
--- a/mlir/include/mlir/Interfaces/CallInterfaces.h
+++ b/mlir/include/mlir/Interfaces/CallInterfaces.h
@@ -53,6 +53,7 @@ parseFunctionResultList(OpAsmParser &parser, 
SmallVectorImpl<Type> &resultTypes,
 /// signatures containing SSA region arguments (to parse these signatures, use
 /// function_interface_impl::parseFunctionSignature). When
 /// `mustParseEmptyResult`, `-> ()` is expected when there is no result type.
+/// Returns failure after emitting a diagnostic if the signature is malformed.
 ///
 ///   no-ssa-function-signature ::= `(` no-ssa-function-arg-list `)`
 ///                               -> function-result-list
diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp 
b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
index 0cc007433ac0e..223852d3828c4 100644
--- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
+++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
@@ -1388,17 +1388,9 @@ static ParseResult parseCallTypeAndResolveOperands(
   }
   SmallVector<Type> argTypes;
   SmallVector<Type> resTypes;
-  SMLoc signatureLoc = parser.getCurrentLocation();
   if (call_interface_impl::parseFunctionSignature(parser, argTypes, argAttrs,
-                                                  resTypes, resultAttrs)) {
-    if (parser.getCurrentLocation() != signatureLoc)
-      return failure();
-    if (isDirect)
-      return parser.emitError(trailingTypesLoc,
-                              "expected direct call to have 1 trailing types");
-    return parser.emitError(trailingTypesLoc,
-                            "expected trailing function type");
-  }
+                                                  resTypes, resultAttrs))
+    return failure();
 
   if (resTypes.size() > 1)
     return parser.emitError(trailingTypesLoc,
diff --git a/mlir/test/Dialect/LLVMIR/invalid.mlir 
b/mlir/test/Dialect/LLVMIR/invalid.mlir
index 1d0bb0b6ef999..d44fa7ebfc4b1 100644
--- a/mlir/test/Dialect/LLVMIR/invalid.mlir
+++ b/mlir/test/Dialect/LLVMIR/invalid.mlir
@@ -254,8 +254,7 @@ func.func @call_missing_empty_result() {
 func.func private @standard_func_callee()
 
 func.func @call_missing_ptr_type(%arg : i8) {
-  // expected-error@+2 {{expected '('}}
-  // expected-error@+1 {{expected direct call to have 1 trailing type}}
+  // expected-error@+1 {{expected '('}}
   llvm.call @standard_func_callee(%arg) : !llvm.ptr, (i8) -> (i8)
   llvm.return
 }
@@ -271,8 +270,7 @@ func.func @call_non_pointer_type(%callee : !llvm.func<i8 
(i8)>, %arg : i8) {
 // -----
 
 func.func @call_non_function_type(%callee : !llvm.ptr, %arg : i8) {
-  // expected-error@+2 {{expected '('}}
-  // expected-error@+1 {{expected trailing function type}}
+  // expected-error@+1 {{expected '('}}
   llvm.call %callee(%arg) : !llvm.ptr, !llvm.func<i8 (i8)>
   llvm.return
 }

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to