Allow missing imports in wasm loader and report error in wasm instantiation instead (#3539)

The wasm loader is failing when multi-module support is on and the dependent
modules are not found; this enforces the AOT compiler integrations to prepare
dependent modules while it isn't necessary.

This PR allows allows missing imports in wasm loader and report error in wasm
instantiation instead, which enables the integrated AOT compiler to work as if
the multi-module support isn't turned on.
This commit is contained in:
Xenia Lu
2024-06-25 10:04:39 +08:00
committed by GitHub
parent 54b87cb097
commit f7d2826772
9 changed files with 241 additions and 183 deletions

View File

@ -1,5 +1,5 @@
diff --git a/test/core/data.wast b/test/core/data.wast
index b1e1239..a0f6967 100644
index b1e12397..a0f69676 100644
--- a/test/core/data.wast
+++ b/test/core/data.wast
@@ -312,7 +312,8 @@
@ -10,7 +10,7 @@ index b1e1239..a0f6967 100644
+ ;; TODO: restore after supporting multi memory"
+ "unknown memory"
)
;; Data segment with memory index 0 (no memory section)
@@ -334,7 +335,8 @@
"\02\01\41\00\0b" ;; active data segment 0 for memory 1
@ -20,7 +20,7 @@ index b1e1239..a0f6967 100644
+ ;; TODO: restore after supporting multi memory"
+ "unknown memory"
)
;; Data segment with memory index 1 and vec(byte) as above,
@@ -354,7 +356,8 @@
"\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f"
@ -30,7 +30,7 @@ index b1e1239..a0f6967 100644
+ ;; TODO: restore after supporting multi memory"
+ "unknown memory"
)
;; Data segment with memory index 1 and specially crafted vec(byte) after.
@@ -374,7 +377,8 @@
"\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f"
@ -40,90 +40,70 @@ index b1e1239..a0f6967 100644
+ ;; TODO: restore after supporting multi memory"
+ "unknown memory"
)
diff --git a/test/core/elem.wast b/test/core/elem.wast
index 33b3f67..c72431c 100644
index 4a399eca..3da365e5 100644
--- a/test/core/elem.wast
+++ b/test/core/elem.wast
@@ -595,9 +595,11 @@
(func $const-i32-d (type $out-i32) (i32.const 68))
)
@@ -594,6 +594,7 @@
(assert_return (invoke $module1 "call-8") (i32.const 65))
(assert_return (invoke $module1 "call-9") (i32.const 66))
+(;
(module $module2
(type $out-i32 (func (result i32)))
(import "module1" "shared-table" (table 10 funcref))
@@ -606,7 +607,9 @@
(assert_return (invoke $module1 "call-7") (i32.const 67))
(assert_return (invoke $module1 "call-8") (i32.const 68))
(assert_return (invoke $module1 "call-9") (i32.const 66))
+;)
+(;
(module $module3
(type $out-i32 (func (result i32)))
@@ -608,9 +610,11 @@
(func $const-i32-f (type $out-i32) (i32.const 70))
)
+(;
(import "module1" "shared-table" (table 10 funcref))
@@ -619,6 +622,7 @@
(assert_return (invoke $module1 "call-7") (i32.const 67))
(assert_return (invoke $module1 "call-8") (i32.const 69))
(assert_return (invoke $module1 "call-9") (i32.const 70))
+;)
;; Element segments must match element type of table
@@ -643,6 +647,7 @@
@@ -651,6 +655,7 @@
;; Initializing a table with an externref-type element segment
+(;
(module $m
(table $t (export "table") 2 externref)
(func (export "get") (param $i i32) (result externref)
@@ -667,9 +672,11 @@
@@ -675,9 +680,11 @@
(assert_return (invoke $m "get" (i32.const 0)) (ref.null extern))
(assert_return (invoke $m "get" (i32.const 1)) (ref.extern 137))
+;)
;; Initializing a table with imported funcref global
+(;
(module $module4
(func (result i32)
i32.const 42
@@ -690,3 +697,4 @@
@@ -698,3 +705,4 @@
)
(assert_return (invoke "call_imported_elem") (i32.const 42))
+;)
\ No newline at end of file
diff --git a/test/core/try_catch.wast b/test/core/try_catch.wast
index 2a0e9ff6..f243489d 100644
--- a/test/core/try_catch.wast
+++ b/test/core/try_catch.wast
@@ -203,7 +203,6 @@
(assert_return (invoke "catch-param-i32" (i32.const 5)) (i32.const 5))
-(assert_return (invoke "catch-imported") (i32.const 2))
(assert_return (invoke "catchless-try" (i32.const 0)) (i32.const 0))
(assert_return (invoke "catchless-try" (i32.const 1)) (i32.const 1))
@@ -231,7 +230,6 @@
)
)
-(assert_return (invoke "imported-mismatch") (i32.const 3))
(assert_malformed
(module quote "(module (func (catch_all)))")
diff --git a/test/core/ref_func.wast b/test/core/ref_func.wast
index adb5cb7..6396013 100644
index adb5cb78..6396013b 100644
--- a/test/core/ref_func.wast
+++ b/test/core/ref_func.wast
@@ -4,7 +4,7 @@
(register "M")
(module
- (func $f (import "M" "f") (param i32) (result i32))
+ (func $f (param $x i32) (result i32) (local.get $x))
@ -131,11 +111,11 @@ index adb5cb7..6396013 100644
(i32.add (local.get $x) (i32.const 1))
)
diff --git a/test/core/table_copy.wast b/test/core/table_copy.wast
index 380e84e..59230cf 100644
index 380e84ee..59230cfb 100644
--- a/test/core/table_copy.wast
+++ b/test/core/table_copy.wast
@@ -14,11 +14,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -152,7 +132,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t0) (i32.const 2) func 3 1 4 1)
@@ -106,11 +106,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -169,7 +149,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t0) (i32.const 2) func 3 1 4 1)
@@ -198,11 +198,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -186,7 +166,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t0) (i32.const 2) func 3 1 4 1)
@@ -290,11 +290,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -203,7 +183,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t0) (i32.const 2) func 3 1 4 1)
@@ -382,11 +382,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -220,7 +200,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t0) (i32.const 2) func 3 1 4 1)
@@ -474,11 +474,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -237,7 +217,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t0) (i32.const 2) func 3 1 4 1)
@@ -566,11 +566,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -254,7 +234,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t0) (i32.const 2) func 3 1 4 1)
@@ -658,11 +658,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -271,7 +251,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t0) (i32.const 2) func 3 1 4 1)
@@ -750,11 +750,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -288,7 +268,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t0) (i32.const 2) func 3 1 4 1)
@@ -842,11 +842,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -305,7 +285,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t1) (i32.const 2) func 3 1 4 1)
@@ -934,11 +934,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -322,7 +302,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t1) (i32.const 2) func 3 1 4 1)
@@ -1026,11 +1026,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -339,7 +319,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t1) (i32.const 2) func 3 1 4 1)
@@ -1118,11 +1118,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -356,7 +336,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t1) (i32.const 2) func 3 1 4 1)
@@ -1210,11 +1210,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -373,7 +353,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t1) (i32.const 2) func 3 1 4 1)
@@ -1302,11 +1302,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -390,7 +370,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t1) (i32.const 2) func 3 1 4 1)
@@ -1394,11 +1394,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -407,7 +387,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t1) (i32.const 2) func 3 1 4 1)
@@ -1486,11 +1486,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -424,7 +404,7 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t1) (i32.const 2) func 3 1 4 1)
@@ -1578,11 +1578,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -441,11 +421,11 @@ index 380e84e..59230cf 100644
(table $t1 30 30 funcref)
(elem (table $t1) (i32.const 2) func 3 1 4 1)
diff --git a/test/core/table_init.wast b/test/core/table_init.wast
index 0b2d26f..3c595e5 100644
index 0b2d26f7..3c595e5b 100644
--- a/test/core/table_init.wast
+++ b/test/core/table_init.wast
@@ -14,11 +14,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -462,7 +442,7 @@ index 0b2d26f..3c595e5 100644
(table $t1 30 30 funcref)
(elem (table $t0) (i32.const 2) func 3 1 4 1)
@@ -72,11 +72,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -479,7 +459,7 @@ index 0b2d26f..3c595e5 100644
(table $t1 30 30 funcref)
(elem (table $t0) (i32.const 2) func 3 1 4 1)
@@ -130,11 +130,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -496,7 +476,7 @@ index 0b2d26f..3c595e5 100644
(table $t1 30 30 funcref)
(elem (table $t0) (i32.const 2) func 3 1 4 1)
@@ -196,11 +196,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -513,7 +493,7 @@ index 0b2d26f..3c595e5 100644
(table $t1 30 30 funcref)
(elem (table $t1) (i32.const 2) func 3 1 4 1)
@@ -254,11 +254,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -530,7 +510,7 @@ index 0b2d26f..3c595e5 100644
(table $t1 30 30 funcref)
(elem (table $t1) (i32.const 2) func 3 1 4 1)
@@ -312,11 +312,11 @@
(module
(type (func (result i32))) ;; type #0
- (import "a" "ef0" (func (result i32))) ;; index 0
@ -546,3 +526,23 @@ index 0b2d26f..3c595e5 100644
(table $t0 30 30 funcref)
(table $t1 30 30 funcref)
(elem (table $t1) (i32.const 2) func 3 1 4 1)
diff --git a/test/core/try_catch.wast b/test/core/try_catch.wast
index 2a0e9ff6..f243489d 100644
--- a/test/core/try_catch.wast
+++ b/test/core/try_catch.wast
@@ -203,7 +203,6 @@
(assert_return (invoke "catch-param-i32" (i32.const 5)) (i32.const 5))
-(assert_return (invoke "catch-imported") (i32.const 2))
(assert_return (invoke "catchless-try" (i32.const 0)) (i32.const 0))
(assert_return (invoke "catchless-try" (i32.const 1)) (i32.const 1))
@@ -231,7 +230,6 @@
)
)
-(assert_return (invoke "imported-mismatch") (i32.const 3))
(assert_malformed
(module quote "(module (func (catch_all)))")

View File

@ -43,26 +43,28 @@ index b1e1239..a0f6967 100644
diff --git a/test/core/elem.wast b/test/core/elem.wast
index 33b3f67..c72431c 100644
index 33b3f67..a4c1a2d 100644
--- a/test/core/elem.wast
+++ b/test/core/elem.wast
@@ -595,9 +595,11 @@
(func $const-i32-d (type $out-i32) (i32.const 68))
)
@@ -586,6 +586,7 @@
(assert_return (invoke $module1 "call-8") (i32.const 65))
(assert_return (invoke $module1 "call-9") (i32.const 66))
+(;
(module $module2
(type $out-i32 (func (result i32)))
(import "module1" "shared-table" (table 10 funcref))
@@ -598,7 +599,9 @@
(assert_return (invoke $module1 "call-7") (i32.const 67))
(assert_return (invoke $module1 "call-8") (i32.const 68))
(assert_return (invoke $module1 "call-9") (i32.const 66))
+;)
+(;
(module $module3
(type $out-i32 (func (result i32)))
@@ -608,9 +610,11 @@
(func $const-i32-f (type $out-i32) (i32.const 70))
)
+(;
(import "module1" "shared-table" (table 10 funcref))
@@ -611,6 +614,7 @@
(assert_return (invoke $module1 "call-7") (i32.const 67))
(assert_return (invoke $module1 "call-8") (i32.const 69))
(assert_return (invoke $module1 "call-9") (i32.const 70))
@ -95,7 +97,6 @@ index 33b3f67..c72431c 100644
(assert_return (invoke "call_imported_elem") (i32.const 42))
+;)
\ No newline at end of file
diff --git a/test/core/if.wast b/test/core/if.wast
index 2ea45f6..6f07304 100644
--- a/test/core/if.wast

View File

@ -70,10 +70,10 @@ index 4090b2c..18f66b4 100644
;; Start section
(module binary
diff --git a/test/core/data.wast b/test/core/data.wast
index b1e1239..74a7b04 100644
index 4f339be..0b5b3e6 100644
--- a/test/core/data.wast
+++ b/test/core/data.wast
@@ -312,9 +312,10 @@
@@ -306,9 +306,10 @@
"\02\01\41\00\0b" ;; active data segment 0 for memory 1
"\00" ;; empty vec(byte)
)
@ -85,7 +85,7 @@ index b1e1239..74a7b04 100644
;; Data segment with memory index 0 (no memory section)
(assert_invalid
(module binary
@@ -323,7 +324,7 @@
@@ -317,7 +318,7 @@
"\00\41\00\0b" ;; active data segment 0 for memory 0
"\00" ;; empty vec(byte)
)
@ -94,7 +94,7 @@ index b1e1239..74a7b04 100644
)
;; Data segment with memory index 1 (no memory section)
@@ -334,7 +335,7 @@
@@ -328,7 +329,7 @@
"\02\01\41\00\0b" ;; active data segment 0 for memory 1
"\00" ;; empty vec(byte)
)
@ -103,7 +103,7 @@ index b1e1239..74a7b04 100644
)
;; Data segment with memory index 1 and vec(byte) as above,
@@ -354,7 +355,7 @@
@@ -348,7 +349,7 @@
"\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f"
"\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d"
)
@ -112,7 +112,7 @@ index b1e1239..74a7b04 100644
)
;; Data segment with memory index 1 and specially crafted vec(byte) after.
@@ -374,8 +375,9 @@
@@ -368,8 +369,9 @@
"\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f"
"\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d"
)
@ -124,26 +124,28 @@ index b1e1239..74a7b04 100644
;; Invalid offsets
diff --git a/test/core/elem.wast b/test/core/elem.wast
index 575ecef..6eecab9 100644
index 575ecef..dd1106c 100644
--- a/test/core/elem.wast
+++ b/test/core/elem.wast
@@ -571,9 +571,11 @@
(func $const-i32-d (type $out-i32) (i32.const 68))
)
@@ -562,6 +562,7 @@
(assert_return (invoke $module1 "call-8") (i32.const 65))
(assert_return (invoke $module1 "call-9") (i32.const 66))
+(;
(module $module2
(type $out-i32 (func (result i32)))
(import "module1" "shared-table" (table 10 funcref))
@@ -574,7 +575,9 @@
(assert_return (invoke $module1 "call-7") (i32.const 67))
(assert_return (invoke $module1 "call-8") (i32.const 68))
(assert_return (invoke $module1 "call-9") (i32.const 66))
+;)
+(;
(module $module3
(type $out-i32 (func (result i32)))
@@ -584,6 +586,8 @@
(func $const-i32-f (type $out-i32) (i32.const 70))
)
+(;
(import "module1" "shared-table" (table 10 funcref))
@@ -587,3 +590,4 @@
(assert_return (invoke $module1 "call-7") (i32.const 67))
(assert_return (invoke $module1 "call-8") (i32.const 69))
(assert_return (invoke $module1 "call-9") (i32.const 70))

View File

@ -998,6 +998,9 @@ function trigger()
# if we're running the wasi certification tests.
if [[ $TEST_CASE_ARR ]]; then
for test in "${TEST_CASE_ARR[@]}"; do
if [[ "$test" == "wasi_certification" ]]; then
EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_WASI_TEST=1"
fi
if [[ "$test" == "wasi_certification"
|| "$test" == "standalone" ]]; then
EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_LIBC_UVWASI=0 -DWAMR_BUILD_LIBC_WASI=1"