Relax the temporary same-instance copying limitation #580
+48
−30
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 relaxes the temporary limitation that same-instance stream/future reads/writes trap if the element type is not empty to also allow the integral and floating-point number types. The reason for the limitation is that, for more-complex types, specifying and implementing the exact behavior in the case where the source and destination linear-memory overlap (which is only possible when the readable and writable ends are same-instance) is pretty tricky. However, @dicej points out that the behavior is still quite simple when the element types are plain copyable numbers (it's as-if you read all elements and then wrote all elements, i.e.,
memmove, notmemcpy), and allowing these (esp.stream<u8>) will address a common use case. (FWIW, lazy-lowering avoids the complexity for the complex types and makes it easy to remove the trap.) I'll add a.wasttest once there's an impl draft I can test on.