[release/8.0] JIT: Fix case where we illegally optimize away a memory barrier on ARM32 #91870
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.
Backport of #91827 to release/8.0
/cc @jakobbotsch
Customer Impact
The JIT may optimize out the latter of two memory barrier if no store/load happens between them. This optimization may happen even if there is a call between the two memory barriers. This can result in illegal reordering of stores/loads happening inside the called function with other stores/loads happening after.
This bug fix has diffs in built-in BCL primitives like
ConcurrentQueue
andThreadPool
.Testing
Verified that the affected test case no longer reproduces the issue within 1 hour (previously it was reproduced within a few minutes).
Risk
Low. This makes the optimization more conservative.