> Paul Jarc wrote: >> Paul Schlie wrote: >> if it has an indeterminate value [...] has no bearing on an rvalue >> access to a well defined storage location > > You might think so, but that's actually not true in the C standard's > terminology. It sounds like you interpret "indeterminate value" to > mean what the standard defines as "unspecified value" (3.17.3): "valid > value of the relevant type where this International Standard imposes > no requirements on which value is chosen in any instance". But > "indeterminate value" is defined differently (3.17.2), and any > reasoning based on your common-sense understanding of the term, > instead of the standard's definition of it, has no relevance to the > standard. The standard is not intuitive; it can only be understood by > careful reading. > > The key concept that you seem to be missing is trap representations. > See 6.2.6.1p5, also keeping in mind that "lvalue", as used in the > standard, probably means something slightly different from what you > might expect; see 6.3.2.1p1.
Thanks, however I interpret the standard to clearly mean: int x; int* y; x = x ; perfectly fine; as lvaue x clearly designates an object (no trap) x = *y ; undefined, as lvalue *y is indeterminate (may trap if referenced) *y = x ; undefined, as above. As otherwise further given: volatile int* z = (int*)ADDRESS ; x = *z ; would also be undefined, as with lvalue x above, lvaue *z ; references an object who's rvalue has not been initialized; ; and hopefully a more clearly a wrong interpretation; as ; these semantics are critical to writing low-level drivers.