[Custom Descriptors] Use exact imports in wasm-split#8043
Merged
Conversation
Validate that exact function imports require custom descriptors. An alternative approach (that we may switch to in the future if necessary) would be to always allow exact imports, but then strip them out in the binary writer when custom descriptors are not enabled. For now take the more explicit what-you-see-is-what-you-get approach.
When custom descriptors are enabled, import primary functions into secondary modules using exact imports. This allows references to those functions in the secondary module to remain exact, just like they are before splitting. Remove the exact casts we previously inserted to fix this problem. Do not use exact imports when custom descriptors are not enabled. In principle this could cause validation errors because we allow e.g. exact locals even when custom descriptors are not enabled. This could be worked around in the future either by running a pass to remove exactness before splitting or by always using and allowing exact imports, but then emitting them as inexact imports when custom descriptors are disabled.
kripken
approved these changes
Nov 12, 2025
Member
kripken
left a comment
There was a problem hiding this comment.
lgtm if the fuzzer somehow doesn't trip up on this, but I think it will without some workaround..?
Can test locally by running the Split fuzzer with higher priority to verify.
Member
Author
|
Yep, will fuzz heavily before landing. I think the fuzzer should be ok here, though, because wasm-split does not do any optimization like refining the types of locals between reading the input and splitting. And if custom descriptors is not allowed, the input file will also not have any exact locals or other exact locations that could cause validation problems. |
aheejin
added a commit
to aheejin/binaryen
that referenced
this pull request
May 23, 2026
We are currently validating inputs but not outputs. This PR makes wasm-split validate output modules too unless `--no-validation` is given. I had to add `--no-validation` to three existing tests to make them pass. They fail because of this reason, from WebAssembly#8043's description: > Do not use exact imports when custom descriptors are not enabled. In > principle this could cause validation errors because we allow e.g. > exact locals even when custom descriptors are not enabled. This could > be worked around in the future either by running a pass to remove > exactness before splitting or by always using and allowing exact > imports, but then emitting them as inexact imports when custom > descriptors are disabled.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When custom descriptors are enabled, import primary functions into
secondary modules using exact imports. This allows references to those
functions in the secondary module to remain exact, just like they are
before splitting. Remove the exact casts we previously inserted to fix
this problem.
Do not use exact imports when custom descriptors are not enabled. In
principle this could cause validation errors because we allow e.g. exact
locals even when custom descriptors are not enabled. This could be
worked around in the future either by running a pass to remove exactness
before splitting or by always using and allowing exact imports, but then
emitting them as inexact imports when custom descriptors are disabled.