Atribuição de elementos do array na inicialização do array [duplicado]

Esta pergunta já tem uma resposta aqui:

Confusão sobre inicialização de array em C 7 respostas

Considere o seguinte programa simples:

#include <stdio.h>

int main(void)
{
    int a[5] = { a[2] = 1 };
    printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]);
}

Com o GCC 7.3.0 isso gera

1 0 1 0 0

Considerando quea[1] é zero, parece que a inicialização é semelhante a

int a[5] = { 1 };
a[2] = 1;

A questão é: embora os inicializadores possam ser qualquer expressão genérica, em que ordem as inicializações e atribuições são feita

Isso é válido e bem definido? Poderia ser definido pela implementação, indefinido ou talvez não especificado?

Esta questão está relacionada à pergunta Confusão sobre inicialização de matriz em C.