In this case, the programmer cannot reasonably expect that a concurrent read produces a meaningful result.<p>There are good reasons to use clean, abstract formal logic over brutish &quot;engineering&quot; that results in a myriad of unmaintainable &quot;if x, y, and z, do this, but not if also a or b, then we do that.&quot;<p>That said, I agree that compilers should not <i>needlessly</i> optimize based on undefined behavior in cases where a sensible architecture-specific behavior can be defined (but turning a &quot;read can produce any value&quot; into a &quot;read can produce high 32 bits from old write and low 32 bits from new write&quot; isn&#x27;t even worth specifying).