summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2022-12-19 15:45:34 -0800
committerGitHub <noreply@github.com>2022-12-19 23:45:34 +0000
commit12ad604c17407f6b36d52c6404f2dab32e5c7960 (patch)
treeb62e320888558291edbf646fe8683654a718f645 /src
parent54079e9458e0d7ee2b4028ea888a74fed31f61d7 (diff)
downloadbinaryen-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.cpp6
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);
}
}