[6.1] Fix SILGenFunction::emitValueConstructor for library evolution. #78569
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.
Always call createMarkUnresolvedNonCopyableValueInst for a constructor with move-only 'self'. Handle 'self' that is either returned by value or as an indirect result
Fixes rdar://142690658 (In ~Copyable public struct, an init with COW type param causes compiler error)
(cherry picked from commit f05a8fa)
Explanation: Incorrect SIL is generated for a ~Copyable type's initializer resulting in the error: "Copy of noncopyable typed value". This appears to be an oversight in SILGen. A marker instruction needs to be emitted to trigger move checking. Otherwise, SIL contains a copy of the ~Copyable type.
Scope: In 6.1, for release compilers, with -enable-library-evolution, this error occurs for any public ~Copyable type with an initializer.
Radar/SR Issue: rdar://142690658 (In ~Copyable public struct, an init with COW type param causes compiler error)
Original PR: #78568
Risk: Low. The affected SILGen path already generates a compiler error.
Testing: Source-level unit test.
Reviewer: @jckarter