You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
//! A modification is made to the paper's model to partially address C++20 changes.
15
-
//! Specifically, if an SC load reads from an atomic store of any ordering, then a later SC load cannot read from
16
-
//! an earlier store in the location's modification order. This is to prevent creating a backwards S edge from the second
17
-
//! load to the first, as a result of C++20's coherence-ordered before rules.
18
-
//! (This seems to rule out behaviors that were actually permitted by the RC11 model that C++20
19
-
//! intended to copy (https://plv.mpi-sws.org/scfix/paper.pdf); a change was introduced when
20
-
//! translating the math to English. According to Viktor Vafeiadis, this difference is harmless. So
21
-
//! we stick to what the standard says, and allow fewer behaviors.)
14
+
//! Modifications are made to the paper's model to address C++20 changes:
15
+
//! - If an SC load reads from an atomic store of any ordering, then a later SC load cannot read
16
+
//! from an earlier store in the location's modification order. This is to prevent creating a
17
+
//! backwards S edge from the second load to the first, as a result of C++20's coherence-ordered
18
+
//! before rules. (This seems to rule out behaviors that were actually permitted by the RC11 model
19
+
//! that C++20 intended to copy (<https://plv.mpi-sws.org/scfix/paper.pdf>); a change was
20
+
//! introduced when translating the math to English. According to Viktor Vafeiadis, this
21
+
//! difference is harmless. So we stick to what the standard says, and allow fewer behaviors.)
22
+
//! - SC fences are treated like AcqRel RMWs to a global clock, to ensure they induce enough
23
+
//! synchronization with the surrounding accesses. This rules out legal behavior, but it is really
24
+
//! hard to be more precise here.
22
25
//!
23
26
//! Rust follows the C++20 memory model (except for the Consume ordering and some operations not performable through C++'s
24
27
//! `std::atomic<T>` API). It is therefore possible for this implementation to generate behaviours never observable when the
@@ -340,11 +343,6 @@ impl<'tcx> StoreBuffer {
340
343
// then we cannot read-from anything earlier in modification order.
0 commit comments