https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70729
--- Comment #30 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Another thing to think of, e.g. void baz (int *p, int *q) { #pragma omp simd safelen(2) for (int i = 0; i < 1024; i++) p[4 * i] += q[0]; } for aliasing p[4 * 1022] I think still applies that if (&q[0] == &p[4 * 1022]) then p[4 * 1022] == 0 upon entry to the loop, because while the penultimate iteration could be executed in the SIMD chunk, it could as well be executed before the last iteration and thus if it changes its value, it would mean undefined behavior.