Essa transformação do compilador é permitida?
Considere este código, ondex
ey
são inteiros:
if (x)
y = 42;
A transformação do compilador a seguir é permitida?
int tmp = y;
y = 42;
if (!x)
y = tmp;
contexto:
Este é o FAQ de Bjarne Stroustrup:
// start with x==0 and y==0
if (x) y = 1; // Thread 1
if (y) x = 1; // Thread 2
O FAQ declara que é livre de corrida de dados; comx
ey
ambos 0, nenhum dos vars deve ser gravado.
Mas e se a transformação for permitida?