https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113588
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |14.0 Last reconfirmed| |2024-01-24 Summary|The vectorizer is |[14 Regression] The |introducing out-of-bounds |vectorizer is introducing |memory access |out-of-bounds memory access Ever confirmed|0 |1 Status|UNCONFIRMED |NEW --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Confirmed, runable testcase: ``` #include <sys/mman.h> #include <unistd.h> __attribute__((noipa)) int foo (const char *s, unsigned long n) { unsigned long len = 0; while (*s++ && n--) ++len; return len; } int main() { long pgsz = sysconf (_SC_PAGESIZE); void *p = mmap (NULL, pgsz * 3, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, 0, 0); if (p == MAP_FAILED) return 0; mprotect (p, pgsz, PROT_NONE); mprotect (p+2*pgsz, pgsz, PROT_NONE); char *p1 = p + pgsz; p1[0] = 1; p1[1] = 0; foo (p1, 1000); p1 = p + 2*pgsz - 2; p1[0] = 1; p1[1] = 0; foo (p1, 1000); return 0; } ```