¿Da a los datos un tipo efectivo cuenta como un efecto secundario?

Supongamos que tengo una porción de datos asignados dinámicamente:

void* allocate (size_t n)
{
  void* foo = malloc(n);
  ...
  return foo;
}

Deseo utilizar los datos señalados porfoo como tipo especial,type_t. Pero quiero hacer esto más tarde, y no durante la asignación. Para dar los datos asignados una tipo efectivo, Por lo tanto, puedo hacer algo como:

void* allocate (size_t n)
{
  void* foo = malloc(n);
  (void) *(type_t*)foo;
  ...
  return foo
}

Según C11 6.5 / 6, este acceso de valor debería hacer que el tipo efectivo seatype_t:

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.

Sin embargo, la línea(void) *(type_t*)foo; no contiene efectos secundarios, por lo que el compilador debería ser libre de optimizarlo y no esperaría que generara ningún código de máquina real.

Mi pregunta es: ¿son seguros los trucos como los anteriores? ¿Dar a los datos un tipo efectivo cuenta como un efecto secundario? O al optimizar el código, ¿el compilador también optimizará la elección del tipo efectivo?

s decir, con el truco de acceso de lvalue anterior, si ahora llamo a la función anterior de esta manera:

int* i = allocate(sizeof(int));
*i = something;

¿Esto causa una violación de alias estricta UB como se esperaba, o es el tipo efectivo ahoraint?

Respuestas a la pregunta(2)

Su respuesta a la pregunta