Código C com resultados indefinidos, o compilador gera código inválido (com -O3)

Eu sei que quando você faz certas coisas em um programa C, os resultados são indefinidos. No entanto, o compilador não deve estar gerandoinválido código (de máquina), certo? Seria razoável se o código fizesse a coisa errada, ou se o código gerasse um segfault ou algo assim ...

Isso deve acontecer de acordo com as especificações do compilador ou é um bug no compilador?

Aqui está o programa (simples) que estou usando:

int main() {
    char *ptr = 0;
    *(ptr) = 0;
}

Estou compilando com-O3. Isso não deve gerar instruções de hardware inválidas, certo? Com-O0, Recebo um segfault quando executo o código. Isso parece muito mais sensato.

Edit: Está gerando umud2 instrução...

questionAnswers(1)

yourAnswerToTheQuestion