In intel's processor manual:linkin section 8.2.3.4 it is stated that loads may be reordered with earlier stores to different locations, but not with earlier stores to the same location.
So I understand that the following two operations can be reordered:
x = 1;
y = z;
And that the following two operations can not be reordered:
x = 1;
y = x;
But what happens when the store and the load are for different locations, but the load encompasses the store completely, e.g:
typedef union {
uint64_t shared_var;
uint32_t individual_var[2];
} my_union_t;
my_union_t var;
var.shared_var = 0;
var.individual_var[1] = 1;
int y = var.shared_var;
So can 'y' in this case be 0?