Fix bugs involving the combination of branching and subtyping #1403
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.
This PR fixes similar bugs in both
wasmparser
andwasm-smith
.If we are conditionally branching to a label whose type is
[a b]
and we have[a' b']
on the stack wherea' <: a
andb' <: b
, we need to replace the stack's subtypes with the label's types after processing the instruction.That is, the following three operations, which used to be (mostly) equivalent before subtyping, are no longer equivalent:
pop_operands(label_types); push_operands(label_types)
push_operands(pop_operands(label_types))
We generally have to do (1) to properly erase subtyping, as called for by the spec. (2) is still used for
br_table
however. (3) should generally be avoided.See also WebAssembly/gc#516