diff options
-rw-r--r-- | src/wasm/wasm-s-parser.cpp | 6 | ||||
-rw-r--r-- | test/lit/structref.wast | 13 |
2 files changed, 17 insertions, 2 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp index 64d7a21a2..91d4c129c 100644 --- a/src/wasm/wasm-s-parser.cpp +++ b/src/wasm/wasm-s-parser.cpp @@ -1190,7 +1190,8 @@ Type SExpressionWasmBuilder::stringToType(std::string_view str, if (str.substr(0, 6) == "i31ref" && (prefix || str.size() == 6)) { return Type(HeapType::i31, Nullable); } - if (str.substr(0, 7) == "dataref" && (prefix || str.size() == 7)) { + if ((str.substr(0, 7) == "dataref" && (prefix || str.size() == 7)) || + (str.substr(0, 9) == "structref" && (prefix || str.size() == 9))) { return Type(HeapType::data, Nullable); } if (str.substr(0, 9) == "stringref" && (prefix || str.size() == 9)) { @@ -1238,7 +1239,8 @@ HeapType SExpressionWasmBuilder::stringToHeapType(std::string_view str, if (str.substr(0, 3) == "i31" && (prefix || str.size() == 3)) { return HeapType::i31; } - if (str.substr(0, 4) == "data" && (prefix || str.size() == 4)) { + if ((str.substr(0, 4) == "data" && (prefix || str.size() == 4)) || + (str.substr(0, 6) == "struct" && (prefix || str.size() == 6))) { return HeapType::data; } if (str.substr(0, 6) == "string" && (prefix || str.size() == 6)) { diff --git a/test/lit/structref.wast b/test/lit/structref.wast new file mode 100644 index 000000000..5e674eb26 --- /dev/null +++ b/test/lit/structref.wast @@ -0,0 +1,13 @@ +;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. + +;; RUN: wasm-opt -all %s -S -o - | filecheck %s + +;; Check that `struct` is correctly parsed as an alias for `data`. +(module + ;; CHECK: (func $foo (param $x dataref) (param $y (ref data)) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + (func $foo (param $x structref) (param $y (ref struct)) + (unreachable) + ) +) |