diff options
author | Alon Zakai <azakai@google.com> | 2020-12-08 18:55:20 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-08 18:55:20 -0800 |
commit | 63a042e3a94df7ba3a5c9dde03990a9813fdc366 (patch) | |
tree | 50c05727ce20615f4d0c0206e62dcd56c246766f /test/heap-types.wast.fromBinary | |
parent | 2a0059dec2fe01dcf1358e0120c32aadd2d765b6 (diff) | |
download | binaryen-63a042e3a94df7ba3a5c9dde03990a9813fdc366.tar.gz binaryen-63a042e3a94df7ba3a5c9dde03990a9813fdc366.tar.bz2 binaryen-63a042e3a94df7ba3a5c9dde03990a9813fdc366.zip |
[GC] Add basic RTT support (#3432)
This adds rtt.canon and rtt.sub together with RTT type support
that is necessary for them. Together this lets us test roundtripping the
instructions and types.
Also fixes a missing traversal over globals in collectHeapTypes,
which the example from the GC docs requires, as the RTTs are in
globals there.
This does not yet add full interpreter support and other things. It
disables initial contents on GC in the fuzzer, to avoid the fuzzer
breaking.
Renames the binary ID for exnref, which is being removed from
the spec, and which overlaps with the binary ID for rtt.
Diffstat (limited to 'test/heap-types.wast.fromBinary')
-rw-r--r-- | test/heap-types.wast.fromBinary | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/test/heap-types.wast.fromBinary b/test/heap-types.wast.fromBinary index 2d8e7ff38..537096fe0 100644 --- a/test/heap-types.wast.fromBinary +++ b/test/heap-types.wast.fromBinary @@ -1,10 +1,22 @@ (module (type ${i32_f32_f64} (struct (field i32) (field f32) (field f64))) + (type ${} (struct )) (type $[mut:f64] (array (mut f64))) + (type ${i32} (struct (field i32))) + (type ${i32_i64} (struct (field i32) (field i64))) (type ${mut:f32} (struct (field (mut f32)))) (type ${i32_mut:i32_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|} (struct (field i8) (field (mut i16)) (field (ref null ${i32_f32_f64})) (field (mut (ref null ${i32_f32_f64}))))) + (type $rtt_1_${}_=>_none (func (param (rtt 1 ${})))) + (type $rtt_${}_=>_none (func (param (rtt ${})))) (type $[ref?|[mut:f64]|] (array (ref null $[mut:f64]))) (type $ref?|{i32_f32_f64}|_=>_ref?|{i32_mut:i32_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}| (func (param (ref null ${i32_f32_f64})) (result (ref null ${i32_mut:i32_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|})))) + (global $rttparent (rtt 0 ${}) (rtt.canon ${})) + (global $rttchild (rtt 1 ${i32}) (rtt.sub ${i32} + (global.get $rttparent) + )) + (global $rttgrandchild (rtt 2 ${i32_i64}) (rtt.sub ${i32_i64} + (global.get $rttchild) + )) (export "foo" (func $0)) (func $0 (param $x (ref null ${i32_f32_f64})) (result (ref null ${i32_mut:i32_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|})) (local $tA (ref null ${i32_f32_f64})) @@ -78,5 +90,11 @@ ) (unreachable) ) + (func $rtt-param-with-depth (param $rtt (rtt 1 ${})) + (nop) + ) + (func $rtt-param-without-depth (param $rtt (rtt ${})) + (nop) + ) ) |