summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2024-06-26 11:19:04 -0700
committerGitHub <noreply@github.com>2024-06-26 11:19:04 -0700
commitff8095d8d3be56ba249014ab799cbddb3fd3ba10 (patch)
tree7640447ac35d9775784fce6223a9910921534585 /test
parentd6b4f0107a32066e7f3efbb4e9eb518ddcd914f5 (diff)
downloadbinaryen-ff8095d8d3be56ba249014ab799cbddb3fd3ba10.tar.gz
binaryen-ff8095d8d3be56ba249014ab799cbddb3fd3ba10.tar.bz2
binaryen-ff8095d8d3be56ba249014ab799cbddb3fd3ba10.zip
[threads] Fuzz shared types in type fuzzer (#6704)
Give the type fuzzer the ability to generate shared heap types when the shared-everything feature is enabled. It correctly ensures that shared structs and arrays cannot reference unshared heap types, but that unshared heap types can reference any heap type. Update the main fuzzer so that for the time being it never uses the shared-everything feature when generating additional heap types, so it never generates shared types. We can lift this restriction once the main fuzzer has been updated to properly handle shared types. As a drive-by, fix some logic for subtracting feature sets from each other that is used in this commit.
Diffstat (limited to 'test')
-rw-r--r--test/lit/fuzz-types.test86
1 files changed, 43 insertions, 43 deletions
diff --git a/test/lit/fuzz-types.test b/test/lit/fuzz-types.test
index ae5c00019..10d8fe3bc 100644
--- a/test/lit/fuzz-types.test
+++ b/test/lit/fuzz-types.test
@@ -1,60 +1,60 @@
-;; RUN: wasm-fuzz-types -v --seed=0 | filecheck %s
+;; RUN: wasm-fuzz-types -v --seed=1 | filecheck %s
-;; CHECK: Running with seed 0
+;; CHECK: Running with seed 1
;; CHECK-NEXT: Built 20 types:
;; CHECK-NEXT: (rec
-;; CHECK-NEXT: (type $0 (sub (struct (field i32))))
-;; CHECK-NEXT: (type $1 (sub (func (param (ref $2)) (result externref))))
-;; CHECK-NEXT: (type $2 (sub (struct )))
+;; CHECK-NEXT: (type $0 (sub (struct (field (mut i16)) (field (mut (ref $2))) (field (mut (ref null $2))))))
+;; CHECK-NEXT: (type $1 (sub (func (param (ref $1)) (result f64 (ref $0) f32 (ref null (shared eq))))))
+;; CHECK-NEXT: (type $2 (sub (shared (struct (field (mut (ref null (shared extern)))) (field (mut (ref null $2)))))))
+;; CHECK-NEXT: (type $3 (sub (shared (struct ))))
;; CHECK-NEXT: )
;; CHECK-NEXT: (rec
-;; CHECK-NEXT: (type $3 (sub $0 (struct (field i32) (field (ref $5)) (field (ref $5)))))
-;; CHECK-NEXT: (type $4 (sub $3 (struct (field i32) (field (ref $5)) (field (ref $5)) (field i8) (field (ref null $13)) (field (mut i64)))))
-;; CHECK-NEXT: (type $5 (sub (array (mut f64))))
-;; CHECK-NEXT: (type $6 (sub $1 (func (param anyref) (result externref))))
-;; CHECK-NEXT: (type $7 (sub final $2 (struct (field (mut (ref null $14))) (field (ref $3)))))
-;; CHECK-NEXT: (type $8 (sub $1 (func (param (ref struct)) (result (ref extern)))))
-;; CHECK-NEXT: (type $9 (sub $5 (array (mut f64))))
-;; CHECK-NEXT: (type $10 (sub final $8 (func (param (ref any)) (result (ref noextern)))))
-;; CHECK-NEXT: (type $11 (sub (array (mut anyref))))
-;; CHECK-NEXT: (type $12 (sub $2 (struct (field (mut f64)))))
-;; CHECK-NEXT: (type $13 (sub final $1 (func (param (ref $2)) (result (ref extern)))))
-;; CHECK-NEXT: (type $14 (array (mut (ref null $14))))
+;; CHECK-NEXT: (type $4 (sub (array i32)))
+;; CHECK-NEXT: (type $5 (sub $4 (array i32)))
+;; CHECK-NEXT: (type $6 (shared (func (param (ref null $3)) (result i32))))
+;; CHECK-NEXT: (type $7 (sub $2 (shared (struct (field (mut (ref null (shared extern)))) (field (mut (ref null $2))) (field (mut (ref null $3))) (field (mut i16)) (field (mut (ref null $7))) (field (mut (ref null $7)))))))
+;; CHECK-NEXT: (type $8 (sub $0 (struct (field (mut i16)) (field (mut (ref $2))) (field (mut (ref null $2))))))
;; CHECK-NEXT: )
;; CHECK-NEXT: (rec
-;; CHECK-NEXT: (type $15 (sub final $11 (array (mut anyref))))
-;; CHECK-NEXT: (type $16 (sub final $12 (struct (field (mut f64)))))
-;; CHECK-NEXT: (type $17 (sub (struct (field f32) (field (mut i32)) (field i8) (field (ref array)))))
-;; CHECK-NEXT: (type $18 (sub $11 (array (mut anyref))))
-;; CHECK-NEXT: (type $19 (sub final $9 (array (mut f64))))
+;; CHECK-NEXT: (type $9 (shared (array i32)))
+;; CHECK-NEXT: (type $10 (sub $5 (array i32)))
+;; CHECK-NEXT: (type $11 (func (result i32)))
+;; CHECK-NEXT: (type $12 (sub (shared (array (ref $3)))))
+;; CHECK-NEXT: (type $13 (sub (shared (func (param (ref null $19) v128) (result (ref null $12))))))
+;; CHECK-NEXT: (type $14 (sub final $12 (shared (array (ref $3)))))
+;; CHECK-NEXT: (type $15 (sub (shared (func (param (ref null (shared struct)) i31ref) (result nullfuncref)))))
+;; CHECK-NEXT: (type $16 (sub $5 (array i32)))
+;; CHECK-NEXT: (type $17 (sub (func (param v128) (result f64))))
+;; CHECK-NEXT: (type $18 (sub (array (ref $11))))
+;; CHECK-NEXT: (type $19 (shared (array i8)))
;; CHECK-NEXT: )
;; CHECK-NEXT:
;; CHECK-NEXT: Inhabitable types:
;; CHECK-NEXT:
;; CHECK-NEXT: Built 20 types:
;; CHECK-NEXT: (rec
-;; CHECK-NEXT: (type $0 (sub (struct (field i32))))
-;; CHECK-NEXT: (type $1 (sub (func (param (ref $2)) (result externref))))
-;; CHECK-NEXT: (type $2 (sub (struct )))
+;; CHECK-NEXT: (type $0 (sub (struct (field (mut i16)) (field (mut (ref $2))) (field (mut (ref null $2))))))
+;; CHECK-NEXT: (type $1 (sub (func (param (ref $1)) (result f64 (ref $0) f32 (ref null (shared eq))))))
+;; CHECK-NEXT: (type $2 (sub (shared (struct (field (mut (ref null (shared extern)))) (field (mut (ref null $2)))))))
+;; CHECK-NEXT: (type $3 (sub (shared (struct ))))
;; CHECK-NEXT: )
;; CHECK-NEXT: (rec
-;; CHECK-NEXT: (type $3 (sub $0 (struct (field i32) (field (ref $5)) (field (ref $5)))))
-;; CHECK-NEXT: (type $4 (sub $3 (struct (field i32) (field (ref $5)) (field (ref $5)) (field i8) (field (ref null $13)) (field (mut i64)))))
-;; CHECK-NEXT: (type $5 (sub (array (mut f64))))
-;; CHECK-NEXT: (type $6 (sub $1 (func (param anyref) (result externref))))
-;; CHECK-NEXT: (type $7 (sub final $2 (struct (field (mut (ref null $14))) (field (ref $3)))))
-;; CHECK-NEXT: (type $8 (sub $1 (func (param (ref struct)) (result (ref extern)))))
-;; CHECK-NEXT: (type $9 (sub $5 (array (mut f64))))
-;; CHECK-NEXT: (type $10 (sub final $8 (func (param (ref any)) (result (ref noextern)))))
-;; CHECK-NEXT: (type $11 (sub (array (mut anyref))))
-;; CHECK-NEXT: (type $12 (sub $2 (struct (field (mut f64)))))
-;; CHECK-NEXT: (type $13 (sub final $1 (func (param (ref $2)) (result (ref extern)))))
-;; CHECK-NEXT: (type $14 (array (mut (ref null $14))))
+;; CHECK-NEXT: (type $4 (sub (array i32)))
+;; CHECK-NEXT: (type $5 (sub $4 (array i32)))
+;; CHECK-NEXT: (type $6 (shared (func (param (ref null $3)) (result i32))))
+;; CHECK-NEXT: (type $7 (sub $2 (shared (struct (field (mut (ref null (shared extern)))) (field (mut (ref null $2))) (field (mut (ref null $3))) (field (mut i16)) (field (mut (ref null $7))) (field (mut (ref null $7)))))))
+;; CHECK-NEXT: (type $8 (sub $0 (struct (field (mut i16)) (field (mut (ref $2))) (field (mut (ref null $2))))))
;; CHECK-NEXT: )
;; CHECK-NEXT: (rec
-;; CHECK-NEXT: (type $15 (sub final $11 (array (mut anyref))))
-;; CHECK-NEXT: (type $16 (sub final $12 (struct (field (mut f64)))))
-;; CHECK-NEXT: (type $17 (sub (struct (field f32) (field (mut i32)) (field i8) (field (ref array)))))
-;; CHECK-NEXT: (type $18 (sub $11 (array (mut anyref))))
-;; CHECK-NEXT: (type $19 (sub final $9 (array (mut f64))))
-)
+;; CHECK-NEXT: (type $9 (shared (array i32)))
+;; CHECK-NEXT: (type $10 (sub $5 (array i32)))
+;; CHECK-NEXT: (type $11 (func (result i32)))
+;; CHECK-NEXT: (type $12 (sub (shared (array (ref $3)))))
+;; CHECK-NEXT: (type $13 (sub (shared (func (param (ref null $19) v128) (result (ref null $12))))))
+;; CHECK-NEXT: (type $14 (sub final $12 (shared (array (ref $3)))))
+;; CHECK-NEXT: (type $15 (sub (shared (func (param (ref null (shared struct)) i31ref) (result nullfuncref)))))
+;; CHECK-NEXT: (type $16 (sub $5 (array i32)))
+;; CHECK-NEXT: (type $17 (sub (func (param v128) (result f64))))
+;; CHECK-NEXT: (type $18 (sub (array (ref $11))))
+;; CHECK-NEXT: (type $19 (shared (array i8)))
+;; CHECK-NEXT: )