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...