Sema: Propagate noescape bit into closure passed to withoutActuallyEscaping [4.2 6/11] #17166
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.
Description: Fixes a Swift 4.2 regression where closure literals passed to
withoutActuallyEscaping()
were treated as escaping if they contained multiple statements, causing Sema to diagnose member accesses not qualified withself
.Scope of the issue: Source compatibility break for users of
withoutActuallyEscaping
, reported a couple of times.Origination: Introduced at some point in the 4.2 cycle after type checker cleanups. The visitor logic around closures is a bit flaky, because multi-statement closures are treated different from single-expression; the latter are effectively part of the expression that contains them, but the former must be visited separately.
Risk: Very low.
Radar: Fixes rdar://problem/40853562.
Tested: Added test case from radar.
Reviewed by: @jckarter (on master)