https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68221
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I don't have any testcase that would exhibit a problem with variable low-bound, but that is not a proof there isn't a problem. Trying: typedef __UINTPTR_TYPE__ uintptr_t; void bar (unsigned short *, unsigned short *); int foo (int x, int y, int z) { unsigned short a[10], b[10]; bar (a, b); uintptr_t ai = (uintptr_t) a; uintptr_t bi = (uintptr_t) b; ai -= 16; bi -= x; unsigned short *ap = (unsigned short *) ai; unsigned short *bp = (unsigned short *) bi; return ap[19] + bp[19] + ap[y] + bp[z]; } reveals that we don't fold this and therefore it isn't a problem. So perhaps I just should go through that way internally on the omp-low.c side.