Fix incorrect self type of closures #2554
Merged
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 #2552 and its reachability errors. The problem with the mentioned issue was caused by usage of incorrect self type for the object containing closure ( SN synthetic Lambda class) and was partially introduced due to changes of how symbols ownership is perceived in Scala 3 or due to the fact that
genNir
phase is executed afterflatten
scalac phase.When generating the closure symbol of the current class saved in
curClassSym
in the outer scope of AST traversal was different the owner of function passed to theClosure
.We cannot change the naming of the Scala Native synthetic Lambda class at this point because it might lead to binary incompatibility with 0.4.3 release. Luckily, this is not needed. Reachability errors that we could have observed were caused by method dispatch which was using incorrect self type. Using
closure.fun.owner
for self type instead ofcurClassStm
fixes the problem.Additional fix: