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?