My understanding was that the UB was defined such that:
int i = 0;
float f = 1.0f;
void* p;
if(rand() & 1)
p = &i;
else
p = &f;
int j = *(int*)p;
assert(i == j);
could legally be compiled to a no-op (or a single call to rand() with an ignored result, I suppose), despite there being no "weird" pointer stores, since the ill-typed-at-runtime load "can't happen," so the compiler can reason that (int*)p must equal &i, and hence j = i.EDIT: And, in fact, gcc does this: https://godbolt.org/z/WM33vzzdo
Not sure if that applies to vector loads, and the gcc docs don't specify, though.