Sema: More accurate undo() of PotentialBindings::retract() #79134
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.
Consider this series of events:
When we retract the solved constraints, we call
PotentialBindings::retract()
and record a change. Previously, when we undo this change, we would callPotentialBindings::infer()
. However,infer()
is not always the opposite ofretract()
, because it callssimplifyType()
. To avoid this order dependency, haveretract()
record exactly what was removed in a series of individual changes.This fixes a regression from #77174.
There are a couple of diagnostic changes, and in fact the same diagnostics also changed in #77174.
This PR also simplifies
PotentialBindings
a bit. TheProtocols
,Literals
, andDefaults
fields weren't really needed because we can easily reconstruct this information when we build theBindingSet
. Also, a few other fields that used to be*Set
types are nowSmallVector
instead, because we don't insert duplicate elements by construction so there's no need for the additional overhead of hashing here.Fixes rdar://problem/143474242.