¿Puede un objeto tener más de un tipo efectivo?

Considere el siguiente código en una plataforma donde el ABI no inserta relleno en las uniones:

union { int xi; } x;
x.xi = 1;

Creo que la segunda línea exhibe un comportamiento indefinido ya que viola la estricta regla de alias:

El objeto al que se refierex.xi es el mismo objeto que el objeto al que se refierex. Ambos son la misma región de almacenamiento y el términoobjeto se define en ISO 9899: 2011 §3.15 como:

objeto

1 región de almacenamiento de datos en el entorno de ejecución, cuyo contenido puede representar valores

2 NOTA Cuando se hace referencia, un objeto puede interpretarse como que tiene un tipo particular; ver 6.3.2.1.

Como un objeto no es más que una región de almacenamiento, concluyo que comox yx.xi ocupan el mismo almacenamiento, son el mismo objeto.

lostipo efectivo dex esunion { int xi; } ya que ese es el tipo con el que se ha declarado. Ver §6.5 ¶6:

6 Eleficaz El tipo de un objeto para acceder a su valor almacenado es el tipo declarado del objeto, si lo hay.87) Si un valor se almacena en un objeto que no tiene un tipo declarado a través de un valor que tiene un tipo que no es un tipo de carácter, entonces el tipo del valor se convierte en el tipo efectivo del objeto para ese acceso y para accesos posteriores que no modifican el valor almacenado. Si se copia un valor en un objeto que no tiene un tipo declarado usandomemcpy omemmove, o se copia como una matriz de tipo de caracteres, entonces el tipo efectivo del objeto modificado para ese acceso y para accesos posteriores que no modifican el valor es el tipo efectivo del objeto desde el cual se copia el valor, si tiene uno . Para todos los demás accesos a un objeto que no tiene un tipo declarado, el tipo efectivo del objeto es simplemente el tipo del valor l utilizado para el acceso.

87) Los objetos asignados no tienen tipo declarado.

Por la redacción de ¶6 también está claro que cada objeto solo puede tener un tipo efectivo.

En la declaraciónx.xi Yo accedox a través del valorx.xi mecanografiadoint. Este no es uno de los tipos enumerados en §6.5 ¶7:

7 Un objeto tendrá acceso a su valor almacenado solo mediante una expresión lvalue que tenga uno de los siguientes tipos:88)

un tipo compatible con el tipo efectivo del objeto,una versión calificada de un tipo compatible con el tipo efectivo del objeto,un tipo que es el tipo con signo o sin signo correspondiente al tipo efectivo del objeto,un tipo que es el tipo con signo o sin signo correspondiente a una versión calificada del tipo efectivo del objeto,un tipo agregado o de unión que incluye uno de los tipos antes mencionados entre sus miembros (incluido, recursivamente, un miembro de una unión agregada o contenida), oun tipo de personaje

88) La intención de esta lista es especificar aquellas circunstancias en las que un objeto puede tener un alias o no.

Por lo tanto, la segunda línea exhibe un comportamiento indefinido.

Como esta interpretación es claramente errónea, ¿dónde radica mi mala interpretación del estándar?

Respuestas a la pregunta(2)

Su respuesta a la pregunta