summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/wasm/wasm-s-parser.cpp6
-rw-r--r--test/lit/structref.wast13
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)
+ )
+)