diff options
author | Thomas Lively <tlively@google.com> | 2024-06-18 18:20:49 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-19 01:20:49 +0000 |
commit | 2df678e4670517eaac40d1d2d9541d3b706b324b (patch) | |
tree | 3a47da6a20834dad1e43a8953ea428eb12fcb13c /test/lit/passes | |
parent | 829e228d4b2ccb314ea1e653fd16154ae3fd31b3 (diff) | |
download | binaryen-2df678e4670517eaac40d1d2d9541d3b706b324b.tar.gz binaryen-2df678e4670517eaac40d1d2d9541d3b706b324b.tar.bz2 binaryen-2df678e4670517eaac40d1d2d9541d3b706b324b.zip |
[threads] Shared basic heap types (#6667)
Implement binary and text parsing and printing of shared basic heap types and
incorporate them into the type hierarchy.
To avoid the massive amount of code duplication that would be necessary if we
were to add separate enum variants for each of the shared basic heap types, use
bit 0 to indicate whether the type is shared and replace `getBasic()` with
`getBasic(Unshared)`, which clears that bit. Update all the use sites to record
whether the original type was shared and produce shared or unshared output
without code duplication.
Diffstat (limited to 'test/lit/passes')
-rw-r--r-- | test/lit/passes/type-merging-shared.wast | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/test/lit/passes/type-merging-shared.wast b/test/lit/passes/type-merging-shared.wast index 2d3bcdc21..2457cd572 100644 --- a/test/lit/passes/type-merging-shared.wast +++ b/test/lit/passes/type-merging-shared.wast @@ -75,3 +75,25 @@ (local $c' (ref null $C')) ) ) + +(module + ;; Shared and unshared basic heap types similarly cannot be merged. + ;; CHECK: (rec + ;; CHECK-NEXT: (type $A' (shared (struct (field anyref)))) + + ;; CHECK: (type $A (shared (struct (field (ref null (shared any)))))) + (type $A (shared (struct (ref null (shared any))))) + (type $A' (shared (struct (ref null any)))) + + ;; CHECK: (type $2 (func)) + + ;; CHECK: (func $foo (type $2) + ;; CHECK-NEXT: (local $a (ref null $A)) + ;; CHECK-NEXT: (local $a' (ref null $A')) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + (func $foo + (local $a (ref null $A)) + (local $a' (ref null $A')) + ) +) |