[4.0] runtime: Fix overflow of swift_unownedRetain reference counts #11293
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.
On 32bit platforms there are 7 bits reserved for the unowned retain count. This
makes overflow a likely scenario. Implement overflow into the side table.
rdar://33495003
• Explanation: Usage of unowned references cause a crash on 32bit if there are more than 127 unowned references to one object. This is because the current representation reserves 7 bits on 32bit platforms.
• Scope of Issue: A crash will happen on 32bit platforms if there are more than 127 unowned references to an object
• Origination: This bug was likely introduced when moving to the new reference count representation in swift 4
• Risk: Low. Only the implementation of unowned references was changed. Behavior should only change when overflow happens.
• Testing: A test case was added to the regression suite