diff options
Diffstat (limited to 'test/lit/binary/stacky-eh.test')
-rw-r--r-- | test/lit/binary/stacky-eh.test | 126 |
1 files changed, 63 insertions, 63 deletions
diff --git a/test/lit/binary/stacky-eh.test b/test/lit/binary/stacky-eh.test index 09406bfea..0811b28ff 100644 --- a/test/lit/binary/stacky-eh.test +++ b/test/lit/binary/stacky-eh.test @@ -1,66 +1,66 @@ -# Verify stacky EH binary can be parsed correctly. -# -# stacky-eh.test.wasm contains below: -# try -# nop -# catch 0 # tag type i32 -# i32.const 3 -# local.set 1 -# local.set 2 -# -# (This binary was generated by -# 'wasm-opt --optimize-level=3 --generate-stack-ir -optimize-stack-ir') -# -# This code is 'stacky' in Binaryen parlance. In the binary reader, Binaryen has -# a special routine of creating a block and a local.get/local.set to read stacky -# code into Binaryen AST. So if we don't do any post-fixup, the 'catch' block -# becomes: -# (catch $e-i32 -# (local.set 2 -# (block (result i32) -# (local.set $new -# (pop i32) -# ) -# (local.set 1 -# (i32.const 3) -# ) -# (local.get $new) -# ) -# ) -# ) -# Here the 'block' and `local $new' are newly created to read the stacky code. -# But now the 'pop' ends up nested within the 'block', which is invalid. This -# test tests if this invalid code is correctly fixed up in the binary reader. -# The fixup will hoist the 'pop' and create another local to store it right -# after 'catch'. +;; Verify stacky EH binary can be parsed correctly. +;; +;; stacky-eh.test.wasm contains below: +;; try +;; nop +;; catch 0 # tag type i32 +;; i32.const 3 +;; local.set 1 +;; local.set 2 +;; +;; (This binary was generated by +;; 'wasm-opt --optimize-level=3 --generate-stack-ir -optimize-stack-ir') +;; +;; This code is 'stacky' in Binaryen parlance. In the binary reader, Binaryen has +;; a special routine of creating a block and a local.get/local.set to read stacky +;; code into Binaryen AST. So if we don't do any post-fixup, the 'catch' block +;; becomes: +;; (catch $e-i32 +;; (local.set 2 +;; (block (result i32) +;; (local.set $new +;; (pop i32) +;; ) +;; (local.set 1 +;; (i32.const 3) +;; ) +;; (local.get $new) +;; ) +;; ) +;; ) +;; Here the 'block' and `local $new' are newly created to read the stacky code. +;; But now the 'pop' ends up nested within the 'block', which is invalid. This +;; test tests if this invalid code is correctly fixed up in the binary reader. +;; The fixup will hoist the 'pop' and create another local to store it right +;; after 'catch'. RUN: wasm-opt -all %s.wasm --print | filecheck %s -# CHECK: (func $0 -# CHECK-NEXT: (local $0 i32) -# CHECK-NEXT: (local $1 i32) -# CHECK-NEXT: (local $2 i32) -# CHECK-NEXT: (local $3 i32) -# CHECK-NEXT: (local $4 i32) -# CHECK-NEXT: (try $label$3 -# CHECK-NEXT: (do -# CHECK-NEXT: (nop) -# CHECK-NEXT: ) -# CHECK-NEXT: (catch $tag$0 -# CHECK-NEXT: (local.set $4 -# CHECK-NEXT: (pop i32) -# CHECK-NEXT: ) -# CHECK-NEXT: (local.set $2 -# CHECK-NEXT: (block (result i32) -# CHECK-NEXT: (local.set $3 -# CHECK-NEXT: (local.get $4) -# CHECK-NEXT: ) -# CHECK-NEXT: (local.set $1 -# CHECK-NEXT: (i32.const 3) -# CHECK-NEXT: ) -# CHECK-NEXT: (local.get $3) -# CHECK-NEXT: ) -# CHECK-NEXT: ) -# CHECK-NEXT: ) -# CHECK-NEXT: ) -# CHECK-NEXT: ) +;; CHECK: (func $0 +;; CHECK-NEXT: (local $0 i32) +;; CHECK-NEXT: (local $1 i32) +;; CHECK-NEXT: (local $2 i32) +;; CHECK-NEXT: (local $3 i32) +;; CHECK-NEXT: (local $4 i32) +;; CHECK-NEXT: (try $label$3 +;; CHECK-NEXT: (do +;; CHECK-NEXT: (nop) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (catch $tag$0 +;; CHECK-NEXT: (local.set $4 +;; CHECK-NEXT: (pop i32) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (local.set $2 +;; CHECK-NEXT: (block (result i32) +;; CHECK-NEXT: (local.set $3 +;; CHECK-NEXT: (local.get $4) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (local.set $1 +;; CHECK-NEXT: (i32.const 3) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (local.get $3) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) |