diff options
author | Alon Zakai <azakai@google.com> | 2022-12-19 15:45:34 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-19 23:45:34 +0000 |
commit | 12ad604c17407f6b36d52c6404f2dab32e5c7960 (patch) | |
tree | b62e320888558291edbf646fe8683654a718f645 /src | |
parent | 54079e9458e0d7ee2b4028ea888a74fed31f61d7 (diff) | |
download | binaryen-12ad604c17407f6b36d52c6404f2dab32e5c7960.tar.gz binaryen-12ad604c17407f6b36d52c6404f2dab32e5c7960.tar.bz2 binaryen-12ad604c17407f6b36d52c6404f2dab32e5c7960.zip |
[Wasm GC] Do not cache signature types in nominal mode if they have a super (#5364)
This reduces the amount of public types, since if there is a super then using the
type in a public place would make the super also public. It is safer for closed-world
mode to reuse types without supers.
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm/wasm-type.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/wasm/wasm-type.cpp b/src/wasm/wasm-type.cpp index 284d6d7d6..b65debc73 100644 --- a/src/wasm/wasm-type.cpp +++ b/src/wasm/wasm-type.cpp @@ -2967,7 +2967,11 @@ TypeBuilder::BuildResult TypeBuilder::build() { // Note built signature types. See comment in `HeapType::HeapType(Signature)`. for (auto type : state.results) { - if (type.isSignature() && (getTypeSystem() == TypeSystem::Nominal)) { + // Do not cache types with explicit supertypes (that is, whose supertype is + // not HeapType::func). We don't want to reuse such types because then we'd + // be adding subtyping relationships that are not in the input. + if (type.isSignature() && (getTypeSystem() == TypeSystem::Nominal) && + !type.getSuperType()) { nominalSignatureCache.insertType(type); } } |