Thanks for pointing to this. I'm surprised the specification verbiage differs so much between the two standards. However I think the language for C is aspirational and there are cases where compiler optimizations will fail this.
> Volatile operations are permitted to trap. The compiler may not assume that execution will continue after a volatile operation.