[Mlir-commits] [mlir] [mlir] Fix conflict of user defined reserved functions with internal prototypes (PR #123378)
Luohao Wang
llvmlistbot at llvm.org
Tue Jan 21 02:22:33 PST 2025
================
@@ -48,53 +48,74 @@ static constexpr llvm::StringRef kMemRefCopy = "memrefCopy";
LLVM::LLVMFuncOp mlir::LLVM::lookupOrCreateFn(Operation *moduleOp,
StringRef name,
ArrayRef<Type> paramTypes,
- Type resultType, bool isVarArg) {
+ Type resultType, bool isVarArg,
+ bool isReserved) {
assert(moduleOp->hasTrait<OpTrait::SymbolTable>() &&
"expected SymbolTable operation");
auto func = llvm::dyn_cast_or_null<LLVM::LLVMFuncOp>(
SymbolTable::lookupSymbolIn(moduleOp, name));
- if (func)
+ auto funcT = LLVMFunctionType::get(resultType, paramTypes, isVarArg);
+ // Assert the signature of the found function is same as expected
+ if (func) {
+ if (funcT != func.getFunctionType()) {
+ if (isReserved) {
+ func.emitError("redefinition of reserved function '" + name +
+ "' of different type ")
+ .append(func.getFunctionType())
+ .append(" is prohibited");
+ exit(0);
----------------
Luohaothu wrote:
Thanks for the comment. I've wrapped the return value inside a `FailureOr` to propagate the error and add verifiers at the call site to trigger a pass failure.
https://github.com/llvm/llvm-project/pull/123378
More information about the Mlir-commits
mailing list