diff options
Diffstat (limited to 'test/example')
-rw-r--r-- | test/example/module-splitting.cpp | 43 | ||||
-rw-r--r-- | test/example/module-splitting.txt | 128 |
2 files changed, 171 insertions, 0 deletions
diff --git a/test/example/module-splitting.cpp b/test/example/module-splitting.cpp index ab42ff5fd..5391fe584 100644 --- a/test/example/module-splitting.cpp +++ b/test/example/module-splitting.cpp @@ -126,6 +126,16 @@ int main() { ) ))"); + // Non-deferred function in table multiple times + do_test({"foo"}, R"( + (module + (table $table 2 funcref) + (elem (i32.const 0) $foo $foo) + (func $foo (param i32) (result i32) + (local.get 0) + ) + ))"); + // Non-deferred function in table at non-const offset do_test({"foo"}, R"( (module @@ -137,6 +147,17 @@ int main() { ) ))"); + // Non-deferred function in table at non-const offset multiple times + do_test({"foo"}, R"( + (module + (import "env" "base" (global $base i32)) + (table $table 2 funcref) + (elem (global.get $base) $foo $foo) + (func $foo (param i32) (result i32) + (local.get 0) + ) + ))"); + // Non-deferred imported function do_test({"foo"}, R"( (module @@ -189,6 +210,16 @@ int main() { ) ))"); + // Deferred function in table multiple times + do_test({}, R"( + (module + (table $table 2 funcref) + (elem (i32.const 0) $foo $foo) + (func $foo (param i32) (result i32) + (local.get 0) + ) + ))"); + // Deferred exported function in table at a weird offset do_test({}, R"( (module @@ -212,6 +243,18 @@ int main() { ) ))"); + // Deferred exported function in table at a non-const offset multiple times + do_test({}, R"( + (module + (import "env" "base" (global $base i32)) + (table $table 1000 funcref) + (elem (global.get $base) $foo $foo) + (export "foo" (func $foo)) + (func $foo (param i32) (result i32) + (local.get 0) + ) + ))"); + // Deferred exported function in table at an offset from a non-const base do_test({"null"}, R"( (module diff --git a/test/example/module-splitting.txt b/test/example/module-splitting.txt index f9e0b313f..8c6a8df75 100644 --- a/test/example/module-splitting.txt +++ b/test/example/module-splitting.txt @@ -178,6 +178,32 @@ Secondary: Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) + (table $table 2 funcref) + (elem (i32.const 0) $foo $foo) + (func $foo (param $0 i32) (result i32) + (local.get $0) + ) +) +Keeping: foo +After: +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (table $table 2 funcref) + (elem (i32.const 0) $foo $foo) + (export "%table" (table $table)) + (func $foo (param $0 i32) (result i32) + (local.get $0) + ) +) +Secondary: +(module + (import "primary" "%table" (table $table 2 funcref)) +) + + +Before: +(module + (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) (table $table 1 funcref) (elem (global.get $base) $foo) @@ -208,6 +234,36 @@ Secondary: Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) + (import "env" "base" (global $base i32)) + (table $table 2 funcref) + (elem (global.get $base) $foo $foo) + (func $foo (param $0 i32) (result i32) + (local.get $0) + ) +) +Keeping: foo +After: +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (import "env" "base" (global $base i32)) + (table $table 2 funcref) + (elem (global.get $base) $foo $foo) + (export "%table" (table $table)) + (export "%global" (global $base)) + (func $foo (param $0 i32) (result i32) + (local.get $0) + ) +) +Secondary: +(module + (import "primary" "%table" (table $table 2 funcref)) + (import "primary" "%global" (global $base i32)) +) + + +Before: +(module + (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "foo" (func $foo (param i32) (result i32))) ) Keeping: foo @@ -360,6 +416,36 @@ Secondary: Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) + (table $table 2 funcref) + (elem (i32.const 0) $foo $foo) + (func $foo (param $0 i32) (result i32) + (local.get $0) + ) +) +Keeping: <none> +After: +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (import "placeholder" "0" (func $placeholder_0 (param i32) (result i32))) + (import "placeholder" "1" (func $placeholder_1 (param i32) (result i32))) + (table $table 2 funcref) + (elem (i32.const 0) $placeholder_0 $placeholder_1) + (export "%table" (table $table)) +) +Secondary: +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (import "primary" "%table" (table $table 2 funcref)) + (elem (i32.const 0) $foo $foo) + (func $foo (param $0 i32) (result i32) + (local.get $0) + ) +) + + +Before: +(module + (type $i32_=>_i32 (func (param i32) (result i32))) (table $table 1000 funcref) (elem (i32.const 42) $foo) (export "foo" (func $foo)) @@ -437,6 +523,48 @@ Secondary: Before: (module + (type $i32_=>_i32 (func (param i32) (result i32))) + (import "env" "base" (global $base i32)) + (table $table 1000 funcref) + (elem (global.get $base) $foo $foo) + (export "foo" (func $foo)) + (func $foo (param $0 i32) (result i32) + (local.get $0) + ) +) +Keeping: <none> +After: +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (import "env" "base" (global $base i32)) + (import "placeholder" "0" (func $placeholder_0 (param i32) (result i32))) + (import "placeholder" "1" (func $placeholder_1 (param i32) (result i32))) + (table $table 1000 funcref) + (elem (global.get $base) $placeholder_0 $placeholder_1) + (export "foo" (func $foo)) + (export "%table" (table $table)) + (export "%global" (global $base)) + (func $foo (param $0 i32) (result i32) + (call_indirect $table (type $i32_=>_i32) + (local.get $0) + (global.get $base) + ) + ) +) +Secondary: +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (import "primary" "%table" (table $table 1000 funcref)) + (elem (global.get $base) $foo $foo) + (import "primary" "%global" (global $base i32)) + (func $foo (param $0 i32) (result i32) + (local.get $0) + ) +) + + +Before: +(module (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) |