Various existential l-value fixes #9864
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.
There are a variety of problems with SILGen for class and metatype existential values held in mutable variables. Those problems are currently masked for class types by a quirk of Sema, which we are not proposing to change in swift-4.0-branch. However, they are exposed for metatype values, leading to crashes in SILGen.
This combines #9637 and #9852 for swift-4.0-branch. It fixes rdar://32288618.
This patch affects code generation for mutable existential l-values. Because of the quirk in Sema, its largest impact is on existential metatypes: specifically, when they're held in mutable variables.
The risk is fairly low. This patch does change some important code paths, but they are relatively well-tested for the most important cases. The main case affected otherwise is the existential-metatype case, which currently just doesn't compile at all.
This has been tested with our full regression test suite.