summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSam Clegg <sbc@chromium.org>2019-12-20 16:02:34 -0800
committerGitHub <noreply@github.com>2019-12-20 16:02:34 -0800
commitf62e171c38bea14302f9b79f7941a248ea704425 (patch)
tree918bc227e58be2ddb8e8254d16ebb8ff7a55494d /test
parentbd4cac987f19ee4f59b161a77b996ff1de46c4b9 (diff)
downloadbinaryen-f62e171c38bea14302f9b79f7941a248ea704425.tar.gz
binaryen-f62e171c38bea14302f9b79f7941a248ea704425.tar.bz2
binaryen-f62e171c38bea14302f9b79f7941a248ea704425.zip
Reland "Fix renaming in FixInvokeFunctionNamesWalker (#2513)" (#2542)
* Reland "Fix renaming in FixInvokeFunctionNamesWalker (#2513)" In the previous iteration of this change we were not calling `renameFunctions` for each of the functions we removed. The problem manifested itself when we rename the imported function to `emscripten_longjmp_jmpbuf` to `emscripten_longjmp`. In this case the import of `emscripten_longjmp` already exists so we remove the import of `emscripten_longjmp_jmpbuf` but we were not correclty calling renameFunctions to handle the rename of all the uses. Add an additional test case to cover the failures that we saw on the emscripten tree.
Diffstat (limited to 'test')
-rw-r--r--test/lld/longjmp.c17
-rw-r--r--test/lld/longjmp.wat136
-rw-r--r--test/lld/longjmp.wat.out223
-rw-r--r--test/lld/shared_longjmp.wat48
-rw-r--r--test/lld/shared_longjmp.wat.out46
5 files changed, 423 insertions, 47 deletions
diff --git a/test/lld/longjmp.c b/test/lld/longjmp.c
new file mode 100644
index 000000000..1df54f6f2
--- /dev/null
+++ b/test/lld/longjmp.c
@@ -0,0 +1,17 @@
+typedef struct jmp_buf_buf {
+ int thing;
+} jmp_buf;
+
+void longjmp(jmp_buf env, int val);
+int setjmp(jmp_buf env);
+
+int __THREW__;
+int __threwValue;
+
+int main() {
+ jmp_buf jmp;
+ if (setjmp(jmp) == 0) {
+ longjmp(jmp, 1);
+ }
+ return 0;
+}
diff --git a/test/lld/longjmp.wat b/test/lld/longjmp.wat
new file mode 100644
index 000000000..7241a298b
--- /dev/null
+++ b/test/lld/longjmp.wat
@@ -0,0 +1,136 @@
+(module
+ (type $i32_=>_none (func (param i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
+ (type $none_=>_none (func))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
+ (import "env" "malloc" (func $fimport$0 (param i32) (result i32)))
+ (import "env" "saveSetjmp" (func $fimport$1 (param i32 i32 i32 i32) (result i32)))
+ (import "env" "getTempRet0" (func $fimport$2 (result i32)))
+ (import "env" "emscripten_longjmp_jmpbuf" (func $fimport$3 (param i32 i32)))
+ (import "env" "__invoke_void_i32_i32" (func $fimport$4 (param i32 i32 i32)))
+ (import "env" "testSetjmp" (func $fimport$5 (param i32 i32 i32) (result i32)))
+ (import "env" "setTempRet0" (func $fimport$6 (param i32)))
+ (import "env" "free" (func $fimport$7 (param i32)))
+ (import "env" "emscripten_longjmp" (func $fimport$8 (param i32 i32)))
+ (memory $0 2)
+ (table $0 2 2 funcref)
+ (elem (i32.const 1) $fimport$3)
+ (global $global$0 (mut i32) (i32.const 66112))
+ (global $global$1 i32 (i32.const 576))
+ (export "memory" (memory $0))
+ (export "__wasm_call_ctors" (func $0))
+ (export "main" (func $2))
+ (export "__data_end" (global $global$1))
+ (func $0 (; 9 ;)
+ )
+ (func $1 (; 10 ;) (result i32)
+ (local $0 i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (i32.store
+ (local.tee $0
+ (call $fimport$0
+ (i32.const 40)
+ )
+ )
+ (i32.const 0)
+ )
+ (local.set $1
+ (call $fimport$1
+ (local.get $0)
+ (i32.const 1)
+ (local.get $0)
+ (i32.const 4)
+ )
+ )
+ (local.set $2
+ (call $fimport$2)
+ )
+ (local.set $0
+ (i32.const 0)
+ )
+ (block $label$1
+ (block $label$2
+ (loop $label$3
+ (br_if $label$2
+ (local.get $0)
+ )
+ (i32.store offset=568
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (call $fimport$4
+ (i32.const 1)
+ (local.get $0)
+ (i32.const 1)
+ )
+ (local.set $0
+ (i32.load offset=568
+ (i32.const 0)
+ )
+ )
+ (i32.store offset=568
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (block $label$4
+ (br_if $label$4
+ (i32.eqz
+ (local.get $0)
+ )
+ )
+ (br_if $label$4
+ (i32.eqz
+ (local.tee $3
+ (i32.load offset=572
+ (i32.const 0)
+ )
+ )
+ )
+ )
+ (br_if $label$1
+ (i32.eqz
+ (call $fimport$5
+ (i32.load
+ (local.get $0)
+ )
+ (local.get $1)
+ (local.get $2)
+ )
+ )
+ )
+ (call $fimport$6
+ (local.get $3)
+ )
+ )
+ (local.set $0
+ (call $fimport$2)
+ )
+ (br $label$3)
+ )
+ )
+ (call $fimport$7
+ (local.get $1)
+ )
+ (return
+ (i32.const 0)
+ )
+ )
+ (call $fimport$8
+ (local.get $0)
+ (local.get $3)
+ )
+ (unreachable)
+ )
+ (func $2 (; 11 ;) (param $0 i32) (param $1 i32) (result i32)
+ (call $1)
+ )
+ ;; custom section "producers", size 112
+)
+
diff --git a/test/lld/longjmp.wat.out b/test/lld/longjmp.wat.out
new file mode 100644
index 000000000..1b6bbd341
--- /dev/null
+++ b/test/lld/longjmp.wat.out
@@ -0,0 +1,223 @@
+(module
+ (type $i32_=>_none (func (param i32)))
+ (type $none_=>_i32 (func (result i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $none_=>_none (func))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
+ (import "env" "malloc" (func $fimport$0 (param i32) (result i32)))
+ (import "env" "saveSetjmp" (func $fimport$1 (param i32 i32 i32 i32) (result i32)))
+ (import "env" "getTempRet0" (func $fimport$2 (result i32)))
+ (import "env" "invoke_vii" (func $fimport$4 (param i32 i32 i32)))
+ (import "env" "testSetjmp" (func $fimport$5 (param i32 i32 i32) (result i32)))
+ (import "env" "setTempRet0" (func $fimport$6 (param i32)))
+ (import "env" "free" (func $fimport$7 (param i32)))
+ (import "env" "emscripten_longjmp" (func $fimport$8 (param i32 i32)))
+ (memory $0 2)
+ (table $0 2 2 funcref)
+ (elem (i32.const 1) $fimport$8)
+ (global $global$0 (mut i32) (i32.const 66112))
+ (global $global$1 i32 (i32.const 576))
+ (export "memory" (memory $0))
+ (export "__wasm_call_ctors" (func $0))
+ (export "main" (func $2))
+ (export "__data_end" (global $global$1))
+ (export "dynCall_vii" (func $dynCall_vii))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
+ (export "__growWasmMemory" (func $__growWasmMemory))
+ (func $0 (; 8 ;)
+ (nop)
+ )
+ (func $1 (; 9 ;) (result i32)
+ (local $0 i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (i32.store
+ (local.tee $0
+ (call $fimport$0
+ (i32.const 40)
+ )
+ )
+ (i32.const 0)
+ )
+ (local.set $1
+ (call $fimport$1
+ (local.get $0)
+ (i32.const 1)
+ (local.get $0)
+ (i32.const 4)
+ )
+ )
+ (local.set $2
+ (call $fimport$2)
+ )
+ (local.set $0
+ (i32.const 0)
+ )
+ (block $label$1
+ (block $label$2
+ (loop $label$3
+ (br_if $label$2
+ (local.get $0)
+ )
+ (i32.store offset=568
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (call $fimport$4
+ (i32.const 1)
+ (local.get $0)
+ (i32.const 1)
+ )
+ (local.set $0
+ (i32.load offset=568
+ (i32.const 0)
+ )
+ )
+ (i32.store offset=568
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (block $label$4
+ (br_if $label$4
+ (i32.eqz
+ (local.get $0)
+ )
+ )
+ (br_if $label$4
+ (i32.eqz
+ (local.tee $3
+ (i32.load offset=572
+ (i32.const 0)
+ )
+ )
+ )
+ )
+ (br_if $label$1
+ (i32.eqz
+ (call $fimport$5
+ (i32.load
+ (local.get $0)
+ )
+ (local.get $1)
+ (local.get $2)
+ )
+ )
+ )
+ (call $fimport$6
+ (local.get $3)
+ )
+ )
+ (local.set $0
+ (call $fimport$2)
+ )
+ (br $label$3)
+ )
+ )
+ (call $fimport$7
+ (local.get $1)
+ )
+ (return
+ (i32.const 0)
+ )
+ )
+ (call $fimport$8
+ (local.get $0)
+ (local.get $3)
+ )
+ (unreachable)
+ )
+ (func $2 (; 10 ;) (param $0 i32) (param $1 i32) (result i32)
+ (call $1)
+ )
+ (func $dynCall_vii (; 11 ;) (param $fptr i32) (param $0 i32) (param $1 i32)
+ (call_indirect (type $i32_i32_=>_none)
+ (local.get $0)
+ (local.get $1)
+ (local.get $fptr)
+ )
+ )
+ (func $stackSave (; 12 ;) (result i32)
+ (global.get $global$0)
+ )
+ (func $stackAlloc (; 13 ;) (param $0 i32) (result i32)
+ (local $1 i32)
+ (global.set $global$0
+ (local.tee $1
+ (i32.and
+ (i32.sub
+ (global.get $global$0)
+ (local.get $0)
+ )
+ (i32.const -16)
+ )
+ )
+ )
+ (local.get $1)
+ )
+ (func $stackRestore (; 14 ;) (param $0 i32)
+ (global.set $global$0
+ (local.get $0)
+ )
+ )
+ (func $__growWasmMemory (; 15 ;) (param $newSize i32) (result i32)
+ (memory.grow
+ (local.get $newSize)
+ )
+ )
+)
+(;
+--BEGIN METADATA --
+{
+ "staticBump": 8,
+ "tableSize": 2,
+ "initializers": [
+ "__wasm_call_ctors"
+ ],
+ "declares": [
+ "malloc",
+ "saveSetjmp",
+ "getTempRet0",
+ "testSetjmp",
+ "setTempRet0",
+ "free",
+ "emscripten_longjmp"
+ ],
+ "externs": [
+ ],
+ "implementedFunctions": [
+ "___wasm_call_ctors",
+ "_main",
+ "_dynCall_vii",
+ "_stackSave",
+ "_stackAlloc",
+ "_stackRestore",
+ "___growWasmMemory"
+ ],
+ "exports": [
+ "__wasm_call_ctors",
+ "main",
+ "dynCall_vii",
+ "stackSave",
+ "stackAlloc",
+ "stackRestore",
+ "__growWasmMemory"
+ ],
+ "namedGlobals": {
+ "__data_end" : "576"
+ },
+ "invokeFuncs": [
+ "invoke_vii"
+ ],
+ "features": [
+ ],
+ "mainReadsParams": 0
+}
+-- END METADATA --
+;)
diff --git a/test/lld/shared_longjmp.wat b/test/lld/shared_longjmp.wat
index 235e1fadf..b5179676c 100644
--- a/test/lld/shared_longjmp.wat
+++ b/test/lld/shared_longjmp.wat
@@ -15,41 +15,41 @@
(import "GOT.mem" "__THREW__" (global $gimport$13 (mut i32)))
(import "GOT.func" "emscripten_longjmp_jmpbuf" (global $gimport$14 (mut i32)))
(import "GOT.mem" "__threwValue" (global $gimport$15 (mut i32)))
- (import "env" "malloc" (func $malloc (param i32) (result i32)))
- (import "env" "saveSetjmp" (func $saveSetjmp (param i32 i32 i32 i32) (result i32)))
- (import "env" "getTempRet0" (func $getTempRet0 (result i32)))
- (import "env" "emscripten_longjmp_jmpbuf" (func $emscripten_longjmp_jmpbuf (param i32 i32)))
- (import "env" "__invoke_void_i32_i32" (func $__invoke_void_i32_i32 (param i32 i32 i32)))
- (import "env" "testSetjmp" (func $testSetjmp (param i32 i32 i32) (result i32)))
- (import "env" "setTempRet0" (func $setTempRet0 (param i32)))
- (import "env" "free" (func $free (param i32)))
- (import "env" "emscripten_longjmp" (func $emscripten_longjmp (param i32 i32)))
+ (import "env" "malloc" (func $fimport$4 (param i32) (result i32)))
+ (import "env" "saveSetjmp" (func $fimport$5 (param i32 i32 i32 i32) (result i32)))
+ (import "env" "getTempRet0" (func $fimport$6 (result i32)))
+ (import "env" "emscripten_longjmp_jmpbuf" (func $fimport$7 (param i32 i32)))
+ (import "env" "__invoke_void_i32_i32" (func $fimport$8 (param i32 i32 i32)))
+ (import "env" "testSetjmp" (func $fimport$9 (param i32 i32 i32) (result i32)))
+ (import "env" "setTempRet0" (func $fimport$10 (param i32)))
+ (import "env" "free" (func $fimport$11 (param i32)))
+ (import "env" "emscripten_longjmp" (func $fimport$12 (param i32 i32)))
(global $global$0 i32 (i32.const 0))
(global $global$1 i32 (i32.const 4))
- (export "__wasm_call_ctors" (func $__wasm_call_ctors))
- (export "_start" (func $_start))
+ (export "__wasm_call_ctors" (func $0))
+ (export "_start" (func $2))
(export "__THREW__" (global $global$0))
(export "__threwValue" (global $global$1))
- (func $__wasm_call_ctors (; 9 ;) (type $7)
- (call $__wasm_apply_relocs)
+ (func $0 (; 9 ;) (type $7)
+ (call $1)
)
- (func $__wasm_apply_relocs (; 10 ;) (type $7)
+ (func $1 (; 10 ;) (type $7)
)
- (func $_start (; 11 ;) (type $7)
+ (func $2 (; 11 ;) (type $7)
(local $0 i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(i32.store
(local.tee $0
- (call $malloc
+ (call $fimport$4
(i32.const 40)
)
)
(i32.const 0)
)
(local.set $1
- (call $saveSetjmp
+ (call $fimport$5
(local.get $0)
(i32.const 1)
(local.get $0)
@@ -57,7 +57,7 @@
)
)
(local.set $2
- (call $getTempRet0)
+ (call $fimport$6)
)
(local.set $0
(i32.const 0)
@@ -74,7 +74,7 @@
)
(i32.const 0)
)
- (call $__invoke_void_i32_i32
+ (call $fimport$8
(global.get $gimport$14)
(local.get $0)
(i32.const 1)
@@ -108,7 +108,7 @@
)
(br_if $label$1
(i32.eqz
- (call $testSetjmp
+ (call $fimport$9
(i32.load
(local.get $3)
)
@@ -117,22 +117,22 @@
)
)
)
- (call $setTempRet0
+ (call $fimport$10
(local.get $0)
)
)
(local.set $0
- (call $getTempRet0)
+ (call $fimport$6)
)
(br $label$3)
)
)
- (call $free
+ (call $fimport$11
(local.get $1)
)
(return)
)
- (call $emscripten_longjmp
+ (call $fimport$12
(local.get $3)
(local.get $0)
)
diff --git a/test/lld/shared_longjmp.wat.out b/test/lld/shared_longjmp.wat.out
index 083fcb3cc..871e26b27 100644
--- a/test/lld/shared_longjmp.wat.out
+++ b/test/lld/shared_longjmp.wat.out
@@ -12,14 +12,14 @@
(import "env" "table" (table $0 0 funcref))
(import "env" "__memory_base" (global $gimport$2 i32))
(import "env" "__table_base" (global $gimport$3 i32))
- (import "env" "malloc" (func $malloc (param i32) (result i32)))
- (import "env" "saveSetjmp" (func $saveSetjmp (param i32 i32 i32 i32) (result i32)))
- (import "env" "getTempRet0" (func $getTempRet0 (result i32)))
- (import "env" "invoke_vii" (func $invoke_vii (param i32 i32 i32)))
- (import "env" "testSetjmp" (func $testSetjmp (param i32 i32 i32) (result i32)))
- (import "env" "setTempRet0" (func $setTempRet0 (param i32)))
- (import "env" "free" (func $free (param i32)))
- (import "env" "emscripten_longjmp" (func $emscripten_longjmp (param i32 i32)))
+ (import "env" "malloc" (func $fimport$4 (param i32) (result i32)))
+ (import "env" "saveSetjmp" (func $fimport$5 (param i32 i32 i32 i32) (result i32)))
+ (import "env" "getTempRet0" (func $fimport$6 (result i32)))
+ (import "env" "invoke_vii" (func $fimport$8 (param i32 i32 i32)))
+ (import "env" "testSetjmp" (func $fimport$9 (param i32 i32 i32) (result i32)))
+ (import "env" "setTempRet0" (func $fimport$10 (param i32)))
+ (import "env" "free" (func $fimport$11 (param i32)))
+ (import "env" "emscripten_longjmp" (func $fimport$12 (param i32 i32)))
(import "env" "g$__THREW__" (func $g$__THREW__ (result i32)))
(import "env" "g$__threwValue" (func $g$__threwValue (result i32)))
(import "env" "fp$emscripten_longjmp$vii" (func $fp$emscripten_longjmp$vii (result i32)))
@@ -28,32 +28,32 @@
(global $gimport$15 (mut i32) (i32.const 0))
(global $global$0 i32 (i32.const 0))
(global $global$1 i32 (i32.const 4))
- (export "_start" (func $_start))
+ (export "_start" (func $2))
(export "__THREW__" (global $global$0))
(export "__threwValue" (global $global$1))
(export "dynCall_vii" (func $dynCall_vii))
(export "__post_instantiate" (func $__post_instantiate))
- (func $__wasm_call_ctors (; 11 ;)
- (call $__wasm_apply_relocs)
+ (func $0 (; 11 ;)
+ (call $1)
)
- (func $__wasm_apply_relocs (; 12 ;)
+ (func $1 (; 12 ;)
(nop)
)
- (func $_start (; 13 ;)
+ (func $2 (; 13 ;)
(local $0 i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(i32.store
(local.tee $0
- (call $malloc
+ (call $fimport$4
(i32.const 40)
)
)
(i32.const 0)
)
(local.set $1
- (call $saveSetjmp
+ (call $fimport$5
(local.get $0)
(i32.const 1)
(local.get $0)
@@ -61,7 +61,7 @@
)
)
(local.set $2
- (call $getTempRet0)
+ (call $fimport$6)
)
(local.set $0
(i32.const 0)
@@ -78,7 +78,7 @@
)
(i32.const 0)
)
- (call $invoke_vii
+ (call $fimport$8
(global.get $gimport$14)
(local.get $0)
(i32.const 1)
@@ -112,7 +112,7 @@
)
(br_if $label$1
(i32.eqz
- (call $testSetjmp
+ (call $fimport$9
(i32.load
(local.get $3)
)
@@ -121,22 +121,22 @@
)
)
)
- (call $setTempRet0
+ (call $fimport$10
(local.get $0)
)
)
(local.set $0
- (call $getTempRet0)
+ (call $fimport$6)
)
(br $label$3)
)
)
- (call $free
+ (call $fimport$11
(local.get $1)
)
(return)
)
- (call $emscripten_longjmp
+ (call $fimport$12
(local.get $3)
(local.get $0)
)
@@ -151,7 +151,7 @@
)
(func $__post_instantiate (; 15 ;)
(call $__assign_got_enties)
- (call $__wasm_call_ctors)
+ (call $0)
)
(func $__assign_got_enties (; 16 ;)
(global.set $gimport$13