summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-validator.cpp
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2021-01-07 20:01:06 +0000
committerGitHub <noreply@github.com>2021-01-07 12:01:06 -0800
commit6a35e33f126d80e7583821e584ae9d101ba0ccb5 (patch)
tree3d339d81d52078bb97ba404d9f8bed348f6cbaa3 /src/wasm/wasm-validator.cpp
parent5693bc850110f2fd6c687f2b8753ec04f15d1f9e (diff)
downloadbinaryen-6a35e33f126d80e7583821e584ae9d101ba0ccb5.tar.gz
binaryen-6a35e33f126d80e7583821e584ae9d101ba0ccb5.tar.bz2
binaryen-6a35e33f126d80e7583821e584ae9d101ba0ccb5.zip
[GC] Fix parsing/printing of ref types using i31 (#3469)
This lets us parse (ref null i31) and (ref i31) and not just i31ref. It also fixes the parsing of i31ref, making it nullable for now, which we need to do until we support non-nullability. Fix some internal handling of i31 where we had just i31ref (which meant we just handled the non-nullable type). After fixing a bug in printing (where we didn't print out (ref null i31) properly), I found some a simplification, to remove TypeName.
Diffstat (limited to 'src/wasm/wasm-validator.cpp')
-rw-r--r--src/wasm/wasm-validator.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/wasm/wasm-validator.cpp b/src/wasm/wasm-validator.cpp
index a45be1fd3..06f77b093 100644
--- a/src/wasm/wasm-validator.cpp
+++ b/src/wasm/wasm-validator.cpp
@@ -2191,9 +2191,11 @@ void FunctionValidator::visitI31Get(I31Get* curr) {
shouldBeTrue(getModule()->features.hasGC(),
curr,
"i31.get_s/u requires gc to be enabled");
+ // FIXME: use i31ref here, which is non-nullable, when we support non-
+ // nullability.
shouldBeSubTypeOrFirstIsUnreachable(
curr->i31->type,
- Type::i31ref,
+ Type(HeapType::i31, Nullable),
curr->i31,
"i31.get_s/u's argument should be i31ref");
}