5.10: [interop][SwiftToCxx] consuming parameters should be passed using an additional copy #69522
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.
Fixes #69372
rdar://117431113
C++ inline thunks that were generated in the generated header didn't account for the
consuming
parameter convention correctly. This change fixes that by introducing an extra copy of the passed-in parameter, to ensure that Swift's owned destroy / release of the consumed value is correctly balanced.This covers consumption of both Swift types and C++ types (copyable).
Note that additionally this change no longer exposes the shared C++ reference types from Swift back to C++, as their ownership semantics are not yet well specified at the point of the C++ -> Swift language boundary. We'll be able to support better shared reference model in the future though so for now disabling this is safer.
consuming
parameters, or implicit ones like for the initializers and setters