diff options
author | Heejin Ahn <aheejin@gmail.com> | 2021-11-08 22:44:29 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-08 22:44:29 -0800 |
commit | 1ad4e23342ef83b9210ce81bbf119047e08b6f3b (patch) | |
tree | 652dd07126bb7251cb7d3811fefb968ae684f173 /test/exception-handling.wast.fromBinary.noDebugInfo | |
parent | 31a5bf7ad7dbe30ec47766271ba13276117f98a0 (diff) | |
download | binaryen-1ad4e23342ef83b9210ce81bbf119047e08b6f3b.tar.gz binaryen-1ad4e23342ef83b9210ce81bbf119047e08b6f3b.tar.bz2 binaryen-1ad4e23342ef83b9210ce81bbf119047e08b6f3b.zip |
[EH] Improve catch validation (#4315)
This improves validation of `catch` bodies mostly by checking the
validity of `pop`s.
For every `catch` body:
- Checks if its tag exists
- If the tag's type is none:
- Ensures there shouldn't be any `pop`s
- If the tag's type is not none:
- Checks if there's a single `pop` within the catch body
- Checks if the tag type matches the `pop`'s type
- Checks if the `pop`'s location is valid
For every `catch_all` body:
- Ensures there shuldn't be any `pop`s
This uncovers several bugs related to `pop`s in existing tests, which
this PR also fixes.
Diffstat (limited to 'test/exception-handling.wast.fromBinary.noDebugInfo')
-rw-r--r-- | test/exception-handling.wast.fromBinary.noDebugInfo | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/test/exception-handling.wast.fromBinary.noDebugInfo b/test/exception-handling.wast.fromBinary.noDebugInfo index 1a36aaa66..eb6b98bd8 100644 --- a/test/exception-handling.wast.fromBinary.noDebugInfo +++ b/test/exception-handling.wast.fromBinary.noDebugInfo @@ -3,10 +3,12 @@ (type $i32_=>_none (func (param i32))) (type $i64_=>_none (func (param i64))) (type $i32_i64_=>_none (func (param i32 i64))) + (type $anyref_=>_none (func (param anyref))) (tag $tag$0 (param i32)) (tag $tag$1 (param i64)) (tag $tag$2 (param i32 i64)) - (tag $tag$3 (param)) + (tag $tag$3 (param anyref)) + (tag $tag$4 (param)) (func $0 (nop) ) @@ -269,7 +271,7 @@ (do (nop) ) - (catch $tag$3 + (catch $tag$4 (nop) ) ) @@ -380,5 +382,31 @@ ) ) ) + (func $5 + (try $label$5 + (do + (nop) + ) + (catch $tag$0 + (throw $tag$0 + (if (result i32) + (pop i32) + (i32.const 0) + (i32.const 3) + ) + ) + ) + ) + (try $label$8 + (do + (nop) + ) + (catch $tag$3 + (drop + (pop anyref) + ) + ) + ) + ) ) |