https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69494
--- Comment #2 from Lukas <deaeod at gmail dot com> --- I was wrong about what part of the standard defines the behavior for volatile access. Paragraph 8 of [intro.execution] specifies that access to volatile objects is observable behavior. Access is defined in [defns.access] as reading or modifying the value of an object. Paragraph one of [intro.object] says that "an object is a region of storage." Paragraph two says that objects can contain other objects and calls the latter subobjects. Paragraph eight of [basic.types] defines 'object type' to contain cv-qualified versions of types that are not function types, references, or void. According to these passages dev.tcc is both an object and a subobject. The standard makes no explicit mention of volatile subobjects because whether or not an object is a subobject does not matter, at least when talking about volatile.