[Mlir-commits] [mlir] [mlir][emitc] Avoid wrapping external functions in class (PR #224100)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Sep 16 10:50:44 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir
Author: purnima shrivastava (purnima-nlp)
<details>
<summary>Changes</summary>
`-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.
---
Full diff: https://github.com/llvm/llvm-project/pull/224100.diff
2 Files Affected:
- (modified) mlir/lib/Dialect/EmitC/Transforms/WrapFuncInClass.cpp (+2)
- (modified) mlir/test/Dialect/EmitC/wrap-func-in-class.mlir (+6)
``````````diff
diff --git a/mlir/lib/Dialect/EmitC/Transforms/WrapFuncInClass.cpp b/mlir/lib/Dialect/EmitC/Transforms/WrapFuncInClass.cpp
index 894dcaab9305ba..f0087f78f4fdb3 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 91010689e1e659..e2f0c61de5b950 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()
``````````
</details>
https://github.com/llvm/llvm-project/pull/224100
More information about the Mlir-commits
mailing list