[spec] Test subsumption in return call result types - #2211
Conversation
rossberg
left a comment
There was a problem hiding this comment.
Sorry for the churn, but on second thought, these tests belong in the respective test files for return_call and return_call_indirect (and return_call_ref, for that matter). The subtyping.wast file is meant to test the correctness of the subtyping algorithm itself (for GC types), not whether it is applied in all the right places.
Since the respective test files are not under gc/, though, it would be good to avoid the use of GC types, e.g., use (ref $functype) vs funcref instead, which should work independent of the presence of GC.
|
No worries thats actually a nicer solution 👍🏼 |
rossberg
left a comment
There was a problem hiding this comment.
Thanks! Can you also add a respective test for return_call_ref?
|
Its seems to already have these covered in slightly different examples: spec/test/core/return_call_ref.wast Line 226 in 025bcbf and spec/test/core/return_call_ref.wast Line 280 in 025bcbf |
While validating a GC module in my runtime, I found that return_call and return_call_indirect were comparing result types for exact equality instead of using result type matching. This was a left over from implementing tail call before gc, and caused a certain valid fixture to fail.
This PR adds tests for both instructions. For each instruction, I've included a valid case showing that (ref array) matches (ref eq), and an invalid case showing that the reverse direction is rejected. The cases are intentionally minimal rather than repeating the broader subsumption coverage already present.