Ok, let me make it more concrete.
it seems we have 3 possible semantics:
- volatile accesses never trap, but rather trigger UB when the address is not dereferenceable
- they trap if the address is not dereferenceable
- they may trap regardless (i.e., they can never be removed). Alternatively we can state that the load/store address traces are externally observable and can't change