diff options
Diffstat (limited to 'test/ctor-eval/gc-2.wast')
-rw-r--r-- | test/ctor-eval/gc-2.wast | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/test/ctor-eval/gc-2.wast b/test/ctor-eval/gc-2.wast new file mode 100644 index 000000000..fed45abac --- /dev/null +++ b/test/ctor-eval/gc-2.wast @@ -0,0 +1,54 @@ +(module + (type $struct (struct_subtype (field i32) data)) + + (import "import" "import" (func $import (param anyref))) + + ;; This struct is created in an immutable global, but it has the wrong type. + ;; We will create a new defining global for it that has the proper type, and + ;; read from it here. (This is necessary as when the global is used elsewhere + ;; we want to get the right type from the global.get.) + (global $global1 (ref any) + (struct.new $struct + (i32.const 1337) + ) + ) + + ;; Test reordering of globals. This global will be written a value that is + ;; actually defined after it. To handle that, we must create it earlier than + ;; this global. + (global $global2 (mut (ref null $struct)) + (ref.null $struct) + ) + + ;; This global is perfect to be a defining global (immutable, right type), but + ;; because of an earlier use, we will end up defining it earlier on, and + ;; reading it here. + (global $global3 (ref $struct) + (struct.new $struct + (i32.const 9999) + ) + ) + + (func "test1" + (global.set $global2 + (global.get $global3) + ) + ) + + (func "keepalive" (result i32) + (select + (struct.get $struct 0 + (ref.cast_static $struct + (global.get $global1) + ) + ) + (struct.get $struct 0 + (global.get $global2) + ) + (struct.get $struct 0 + (global.get $global3) + ) + ) + ) +) + |