[Mlir-commits] [mlir] [mlir][emitc] Avoid wrapping external functions in class (PR #224100)
purnima shrivastava
llvmlistbot at llvm.org
Wed Sep 16 10:50:05 PDT 2026
https://github.com/purnima-nlp created https://github.com/llvm/llvm-project/pull/224100
`-wrap-emitc-func-in-class` crashes on external `emitc.func` declarations because the rewrite assumes the function has a body.
Skip external functions using `FuncOp::isExternal()` and add a regression test.
Fixes #224013.
>From 5ffb4d1ade000b38897fc03c1f87d6c6f85518a6 Mon Sep 17 00:00:00 2001
From: Purnima Shrivastava <purnimashrivastava05 at .com>
Date: Wed, 16 Sep 2026 23:17:19 +0530
Subject: [PATCH] [mlir][emitc] Avoid wrapping external functions in class
---
mlir/lib/Dialect/EmitC/Transforms/WrapFuncInClass.cpp | 2 ++
mlir/test/Dialect/EmitC/wrap-func-in-class.mlir | 6 ++++++
2 files changed, 8 insertions(+)
diff --git a/mlir/lib/Dialect/EmitC/Transforms/WrapFuncInClass.cpp b/mlir/lib/Dialect/EmitC/Transforms/WrapFuncInClass.cpp
index 894dcaab9305b..f0087f78f4fdb 100644
--- a/mlir/lib/Dialect/EmitC/Transforms/WrapFuncInClass.cpp
+++ b/mlir/lib/Dialect/EmitC/Transforms/WrapFuncInClass.cpp
@@ -76,6 +76,8 @@ class WrapFuncInClass : public OpRewritePattern<FuncOp> {
LogicalResult matchAndRewrite(FuncOp funcOp,
PatternRewriter &rewriter) const override {
+ if (funcOp.isExternal())
+ return failure();
std::string className = llvm::formatv(
/*Validate=*/false, classNameFormat.c_str(), funcOp.getName());
diff --git a/mlir/test/Dialect/EmitC/wrap-func-in-class.mlir b/mlir/test/Dialect/EmitC/wrap-func-in-class.mlir
index 91010689e1e65..e2f0c61de5b95 100644
--- a/mlir/test/Dialect/EmitC/wrap-func-in-class.mlir
+++ b/mlir/test/Dialect/EmitC/wrap-func-in-class.mlir
@@ -225,3 +225,9 @@ module attributes { } {
// EXECUTE: execute()
// CLASS-NAME-FORMAT: emitc.class @Custom_foo {
+
+// -----
+
+emitc.func private @external_func()
+
+// CHECK: emitc.func private @external_func()
More information about the Mlir-commits
mailing list