Por que literais compostos em C são modificáveis

Geralmente, associa-se 'não modificável' ao termo literal

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

No entanto, ao usar literais compostos, descobri rapidamente que eles são completamente modificáveis (e bloqueando o código de máquina gerado, você vê que eles são colocados na pilha):

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

Estou compilando comclang-703.0.29. Esses dois exemplos não deveriam gerar exatamente o mesmo código de máquina? Um literal composto é realmente um literal, se é modificável?

EDIT: Um exemplo ainda mais curto seria:

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

questionAnswers(1)

yourAnswerToTheQuestion