Hi,
can you please take a quick look at this? This is intended to align the C standard with existing practice with respect to aliasing by removing the special rules for "objects with no declared type" and making it fully symmetric and only based on types with non-atomic character types being able to alias everything. Unrelated to this change, I have another question: I wonder if GCC (or any other compiler) actually exploits the " or is copied as an array of byte type, " rule to make assumptions about the effective types of the target array? I know compilers do this work memcpy... Maybe also if a loop is transformed to memcpy? Martin Add the following definition after 3.5, paragraph 2: byte array object having either no declared type or an array of objects declared with a byte type byte type non-atomic character type Modify 6.5,paragraph 6: The effective type of an object that is not a byte array, for an access to its stored value, is the declared type of the object.97) If a value is stored into a byte array through an lvalue having a byte type, then the type of the lvalue becomes the effective type of the object for that access and for subsequent accesses that do not modify the stored value. If a value is copied into a byte array using memcpy or memmove, or is copied as an array of byte type, then the effective type of the modified object for that access and for subsequent accesses that do not modify the value is the effective type of the object from which the value is copied, if it has one. For all other accesses to a byte array, the effective type of the object is simply the type of the lvalue used for the access. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3230.pdf