Emit reflection metadata for noncopyable fields more often #72163
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.
When emitting reflection metadata for fields that have noncopyable type with deployment targets that predate support for noncopyable types, we introduce some indirection to make sure that these fields are only visible to reflection clients (e.g., mirrors) when running on a sufficiently-new Swift runtime. However, this indirection has the downside that out-of-process clients (such as LLDB) can no longer reflect the fields.
Tweak the heuristic to only introduce the indirection if the field is guaranteed to have noncopyable type. If it somehow could be copyable, e.g., based on the properties of its generic arguments, then still emit the normal metadata. This eliminates regressions when existing generic types like Optional become conditionally Copyable (based on their Wrapped functions).