llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir-llvm

Author: lianjinfeng2003 (mygitljf)

<details>
<summary>Changes</summary>

I made the call signature parser report a clear diagnostic when an explicit 
result list is required but the arrow is missing. I also adjusted the LLVM call 
parsing path so the more specific parser diagnostic is not followed by a second 
fallback error.
Fixes #<!-- -->206186

---
Full diff: https://github.com/llvm/llvm-project/pull/206215.diff


4 Files Affected:

- (modified) clang/test/CIR/IR/invalid-call.cir (+9) 
- (modified) mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp (+3) 
- (modified) mlir/lib/Interfaces/CallInterfaces.cpp (+2-1) 
- (modified) mlir/test/Dialect/LLVMIR/invalid.mlir (+10) 


``````````diff
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) {

``````````

</details>


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

Reply via email to