¿Por qué los literales compuestos en C son modificables?

Uno suele asociar 'no modificable' con el término literal

char* str = "Hello World!";
*str = 'B';  // Bus Error!

Sin embargo, cuando uso literales compuestos, descubrí rápidamente que son completamente modificables (y bloqueando el código de máquina generado, verá que se insertan en la pila):

char* str = (char[]){"Hello World"};
*str = 'B';  // A-Okay!

Estoy compilando conclang-703.0.29. ¿No deberían esos dos ejemplos generar exactamente el mismo código de máquina? ¿Es un literal compuesto realmente un literal, si es modificable?

EDITAR: Un ejemplo aún más corto sería:

"Hello World"[0] = 'B';  // Bus Error!
(char[]){"Hello World"}[0] = 'B';  // Okay!

Respuestas a la pregunta(1)

Su respuesta a la pregunta