llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-mlir 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
