[clang] [mlir] [mlir] Diagnose missing call result arrow (PR #206215)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Jun 27 01:09:36 PDT 2026
https://github.com/mygitljf updated https://github.com/llvm/llvm-project/pull/206215
>From 2fc18628d1c3420e7399ad967866ce401fdf6fbe Mon Sep 17 00:00:00 2001
From: mygitljf <2410316423 at qq.com>
Date: Sat, 27 Jun 2026 12:12:37 +0000
Subject: [PATCH] [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 at +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) {
More information about the cfe-commits
mailing list