To answer the original question though, volatile (like const) is always an attribute of the thing immediately to its left in an expression, unless it is on the left, in which case it refers to the right.
I don't think that was the original question . I understand the left/right syntax.

Quite the opposite, actually. The volatile keyword tells the compiler that the variable may change as a result of something invisible to the compiler, and that the compiler needs to care about the changes that occur. If code has multiple reads, and the compiler can see nothing that changes the value, then "volatile" tells the compiler it cannot omit reads.
The thing is, in this case, the code doesn't actually care what that value is. The variable can change all it wants, and the compiler doesn't really care. By your definition, the read can be omitted (in the compiler's point of view, the code will still work correctly no matter how the variable changes).