diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2022-02-08 17:16:21 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-08 17:16:21 -0800 |
commit | 8191cb181f8b5747b969776db1de29253d58ade8 (patch) | |
tree | 19ee24d0b3fbb255a2c4dc8d0e448e0e5b39d1a3 | |
parent | ac6c450b38b2fe4d049eef8aaa2acd56e3be9ae2 (diff) | |
download | binaryen-8191cb181f8b5747b969776db1de29253d58ade8.tar.gz binaryen-8191cb181f8b5747b969776db1de29253d58ade8.tar.bz2 binaryen-8191cb181f8b5747b969776db1de29253d58ade8.zip |
Print recursion groups in wasm-fuzz-types (#4509)
-rw-r--r-- | src/tools/wasm-fuzz-types.cpp | 17 | ||||
-rw-r--r-- | test/lit/fuzz-types/isorecursive.test | 46 |
2 files changed, 41 insertions, 22 deletions
diff --git a/src/tools/wasm-fuzz-types.cpp b/src/tools/wasm-fuzz-types.cpp index 4b1f2800e..352a8a5fb 100644 --- a/src/tools/wasm-fuzz-types.cpp +++ b/src/tools/wasm-fuzz-types.cpp @@ -88,8 +88,22 @@ void Fuzzer::printTypes(const std::vector<HeapType>& types) { }; IndexedTypeNameGenerator<FatalTypeNameGenerator> print(types); std::unordered_map<HeapType, size_t> seen; + std::optional<RecGroup> currRecGroup; + auto inRecGroup = [&]() { return currRecGroup && currRecGroup->size() > 1; }; for (size_t i = 0; i < types.size(); ++i) { auto type = types[i]; + if (!type.isBasic() && type.getRecGroup() != currRecGroup) { + if (inRecGroup()) { + std::cout << ")\n"; + } + currRecGroup = type.getRecGroup(); + if (inRecGroup()) { + std::cout << "(rec\n"; + } + } + if (inRecGroup()) { + std::cout << ' '; + } std::cout << "(type $" << i << ' '; if (type.isBasic()) { std::cout << print(type) << ")\n"; @@ -103,6 +117,9 @@ void Fuzzer::printTypes(const std::vector<HeapType>& types) { } std::cout << ")\n"; } + if (inRecGroup()) { + std::cout << ")\n"; + } } void Fuzzer::checkSubtypes( diff --git a/test/lit/fuzz-types/isorecursive.test b/test/lit/fuzz-types/isorecursive.test index 751f8c2a7..1425962d6 100644 --- a/test/lit/fuzz-types/isorecursive.test +++ b/test/lit/fuzz-types/isorecursive.test @@ -1,24 +1,26 @@ ;; RUN: wasm-fuzz-types --hybrid -v --seed=0 | filecheck %s -;; CHECK: Running with seed 0 -;; CHECK-NEXT: Built 20 types: -;; CHECK-NEXT: (type $0 (struct_subtype data)) -;; CHECK-NEXT: (type $1 (func_subtype (param i31ref) (result (ref extern)) func)) -;; CHECK-NEXT: (type $2 (array_subtype (mut (rtt 0 extern)) data)) -;; CHECK-NEXT: (type $3 (array_subtype (mut (rtt 0 extern)) $2)) -;; CHECK-NEXT: (type $4 (array_subtype (mut (rtt 0 extern)) $2)) -;; CHECK-NEXT: (type $5 (array_subtype (mut (rtt 0 extern)) $3)) -;; CHECK-NEXT: (type $6 (array_subtype (mut (rtt 0 extern)) $3)) -;; CHECK-NEXT: (type $7 (struct_subtype (field (mut (ref $8))) $0)) -;; CHECK-NEXT: (type $8 (struct_subtype (field i16 (mut i32) (mut i16)) $0)) -;; CHECK-NEXT: (type $9 (array_subtype (mut (rtt 0 extern)) $6)) -;; CHECK-NEXT: (type $10 (struct_subtype $0)) -;; CHECK-NEXT: (type $11 (array_subtype (mut (rtt 0 extern)) $2)) -;; CHECK-NEXT: (type $12 (struct_subtype (field (mut i8) (rtt $0)) $0)) -;; CHECK-NEXT: (type $13 (array_subtype (mut (rtt 0 extern)) $6)) -;; CHECK-NEXT: (type $14 (struct_subtype (field funcref f64 (mut (rtt $10)) (ref null $15) i8 (ref null $7)) $10)) -;; CHECK-NEXT: (type $15 (func_subtype (param i31ref) (result (ref extern)) $1)) -;; CHECK-NEXT: (type $16 (array_subtype (mut (rtt 0 extern)) $2)) -;; CHECK-NEXT: (type $17 (struct_subtype (field funcref f64 (mut (rtt $10)) (ref null $15) i8 (ref null $7)) $14)) -;; CHECK-NEXT: (type $18 (struct_subtype (field (mut i8) (rtt $0)) $12)) -;; CHECK-NEXT: (type $19 (func_subtype (param i31ref) (result (ref extern)) $15)) +;; CHECK: (rec +;; CHECK-NEXT: (type $0 (struct_subtype data)) +;; CHECK-NEXT: (type $1 (func_subtype (param i31ref) (result (ref extern)) func)) +;; CHECK-NEXT: (type $2 (array_subtype (mut (rtt 0 extern)) data)) +;; CHECK-NEXT: (type $3 (array_subtype (mut (rtt 0 extern)) $2)) +;; CHECK-NEXT: (type $4 (array_subtype (mut (rtt 0 extern)) $2)) +;; CHECK-NEXT: (type $5 (array_subtype (mut (rtt 0 extern)) $3)) +;; CHECK-NEXT: (type $6 (array_subtype (mut (rtt 0 extern)) $3)) +;; CHECK-NEXT: (type $7 (struct_subtype (field (mut (ref $8))) $0)) +;; CHECK-NEXT: (type $8 (struct_subtype (field i16 (mut i32) (mut i16)) $0)) +;; CHECK-NEXT: (type $9 (array_subtype (mut (rtt 0 extern)) $6)) +;; CHECK-NEXT: (type $10 (struct_subtype $0)) +;; CHECK-NEXT: (type $11 (array_subtype (mut (rtt 0 extern)) $2)) +;; CHECK-NEXT: (type $12 (struct_subtype (field (mut i8) (rtt $0)) $0)) +;; CHECK-NEXT: (type $13 (array_subtype (mut (rtt 0 extern)) $6)) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (rec +;; CHECK-NEXT: (type $14 (struct_subtype (field funcref f64 (mut (rtt $10)) (ref null $15) i8 (ref null $7)) $10)) +;; CHECK-NEXT: (type $15 (func_subtype (param i31ref) (result (ref extern)) $1)) +;; CHECK-NEXT: (type $16 (array_subtype (mut (rtt 0 extern)) $2)) +;; CHECK-NEXT: (type $17 (struct_subtype (field funcref f64 (mut (rtt $10)) (ref null $15) i8 (ref null $7)) $14)) +;; CHECK-NEXT: (type $18 (struct_subtype (field (mut i8) (rtt $0)) $12)) + (type $19 (func_subtype (param i31ref) (result (ref extern)) $15)) +) |