summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/opt-utils.h4
-rw-r--r--test/passes/duplicate-function-elimination_all-features.txt10
-rw-r--r--test/passes/duplicate-function-elimination_all-features.wast13
3 files changed, 25 insertions, 2 deletions
diff --git a/src/passes/opt-utils.h b/src/passes/opt-utils.h
index 7912a7d92..cc0f40c54 100644
--- a/src/passes/opt-utils.h
+++ b/src/passes/opt-utils.h
@@ -97,7 +97,9 @@ inline void replaceFunctions(PassRunner* runner,
}
// replace in exports
for (auto& exp : module.exports) {
- maybeReplace(exp->value);
+ if (exp->kind == ExternalKind::Function) {
+ maybeReplace(exp->value);
+ }
}
}
diff --git a/test/passes/duplicate-function-elimination_all-features.txt b/test/passes/duplicate-function-elimination_all-features.txt
index 0c6651b97..aa234da67 100644
--- a/test/passes/duplicate-function-elimination_all-features.txt
+++ b/test/passes/duplicate-function-elimination_all-features.txt
@@ -8,3 +8,13 @@
(ref.func $0)
)
)
+(module
+ (type $none_=>_none (func))
+ (memory $foo 16 16)
+ (global $bar i32 (i32.const 0))
+ (export "memory" (memory $foo))
+ (export "global" (global $bar))
+ (func $bar
+ (nop)
+ )
+)
diff --git a/test/passes/duplicate-function-elimination_all-features.wast b/test/passes/duplicate-function-elimination_all-features.wast
index 587271728..116542c96 100644
--- a/test/passes/duplicate-function-elimination_all-features.wast
+++ b/test/passes/duplicate-function-elimination_all-features.wast
@@ -1,4 +1,4 @@
-;; --dupliate-function-elimination should not remove functions used in ref.func.
+;; --duplicate-function-elimination should not remove functions used in ref.func.
(module
(func $0 (result i32)
(i32.const 0)
@@ -10,3 +10,14 @@
(ref.func $1)
)
)
+;; renaming after deduplication must only affect functions
+(module
+ (memory $foo 16 16)
+ (global $bar i32 (i32.const 0))
+ (export "memory" (memory $foo))
+ (export "global" (global $bar))
+ (func $bar ;; happens to share a name with the global
+ )
+ (func $foo ;; happens to share a name with the memory
+ )
+)