The C language has provided the restrict keyword to solve these aliasing issues since the C99 standard. That is, 20 years ago.
Whether or not the compiler will be smart enough to autovectorize is a different question.
C compilers don't validate correct use of restrict.
These LLVM bugs don't get noticed with C because C programs rarely use `restrict` as pervasively as a downleveled Rust program ends up doing.