Consider this code, where x
and y
are integers:
if (x)
y = 42;
Is the following compiler transformation allowed ?
int tmp = y;
y = 42;
if (!x)
y = tmp;
context:
This is from Bjarne Stroustrup's FAQ:
// start with x==0 and y==0
if (x) y = 1; // Thread 1
if (y) x = 1; // Thread 2
The FAQ states this is data race free; with x
and y
both 0, none of the vars should be written to.
But what if the transformation is allowed ?