diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2021-11-05 11:42:59 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-05 18:42:59 +0000 |
commit | 938e1ee240b802968cb9f458314eb92391d75f73 (patch) | |
tree | d8ad4e41a468f968944d00043a73ba130d79fd14 /test | |
parent | fbcfa586f8ac97bce2937bd2e6cb7d4bbbce4087 (diff) | |
download | binaryen-938e1ee240b802968cb9f458314eb92391d75f73.tar.gz binaryen-938e1ee240b802968cb9f458314eb92391d75f73.tar.bz2 binaryen-938e1ee240b802968cb9f458314eb92391d75f73.zip |
Return the correct flow when an RTT is breaking (#4310)
Fixes #4308.
Diffstat (limited to 'test')
-rw-r--r-- | test/lit/passes/precompute-gc.wast | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/test/lit/passes/precompute-gc.wast b/test/lit/passes/precompute-gc.wast index 276d83289..9b12202b1 100644 --- a/test/lit/passes/precompute-gc.wast +++ b/test/lit/passes/precompute-gc.wast @@ -1271,6 +1271,51 @@ ) ) + ;; Regression test checking that breaking RTTs are interpreted correctly. + ;; CHECK: (func $cast-breaking-rtt + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.cast + ;; CHECK-NEXT: (ref.cast + ;; CHECK-NEXT: (struct.new_default $struct) + ;; CHECK-NEXT: (call $unreachable-rtt) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (call $unreachable-rtt) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; NOMNL: (func $cast-breaking-rtt + ;; NOMNL-NEXT: (drop + ;; NOMNL-NEXT: (ref.cast + ;; NOMNL-NEXT: (ref.cast + ;; NOMNL-NEXT: (struct.new_default $struct) + ;; NOMNL-NEXT: (call $unreachable-rtt) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: (call $unreachable-rtt) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: ) + ;; NOMNL-NEXT: ) + (func $cast-breaking-rtt + (drop + (ref.cast + (ref.cast + (struct.new_default $struct) + (call $unreachable-rtt) + ) + (call $unreachable-rtt) + ) + ) + ) + + ;; CHECK: (func $unreachable-rtt (result (rtt $struct)) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; NOMNL: (func $unreachable-rtt (result (rtt $struct)) + ;; NOMNL-NEXT: (unreachable) + ;; NOMNL-NEXT: ) + (func $unreachable-rtt (result (rtt $struct)) + (unreachable) + ) + ;; CHECK: (func $new_block_unreachable (result anyref) ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) ;; CHECK-NEXT: (drop |