Fix auto-atomicity for loops around required one/notone/set loops #56735
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.
Given an expression like
(?:a{2,3}){2}
, we currently erroneously convert that to(?>a{2,3}){2}
, i.e. making the inner loop atomic, even though that then causes this to fail to matchaaaa
when it should match it (it fails because the first iteration will atomically matchaaa
and thus won't given any back, and then the next iteration will fail to match at least twoa
s).The simple fix is in FindLastExpressionInLoopForAutoAtomic, removing the special-case that tries to make the body of a loop that's a one/notone/set loop atomic. There are likely special-cases of this special-case that are still valid, but I'm not convinced it's worth trying to maintain and risk other gaps.
Fixes #56721
cc: @dotnet/area-system-text-regularexpressions, @anreton