diff options
-rw-r--r-- | src/passes/opt-utils.h | 4 | ||||
-rw-r--r-- | test/passes/duplicate-function-elimination_all-features.txt | 10 | ||||
-rw-r--r-- | test/passes/duplicate-function-elimination_all-features.wast | 13 |
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 + ) +) |