https://gcc.gnu.org/bugzilla/show_bug.cgi?id=31279
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> --- The original testcase hides everything behind array descriptors, even with unrolling and vectorization disabled we end up with <bb 2> [local count: 214748368]: parm.0.data = &alist[0]; parm.0.offset = -1; parm.0.dtype.elem_len = 4; MEM <unsigned long> [(void *)&parm.0 + 24B] = 1103806595072; parm.0.span = 4; parm.0.dim[0].stride = 1; parm.0.dim[0].lbound = 1; parm.0.dim[0].ubound = 4; atmp.1.data = &A.2; atmp.1.offset = 0; atmp.1.dtype.elem_len = 4; MEM <unsigned long> [(void *)&atmp.1 + 24B] = 1103806595072; atmp.1.span = 4; atmp.1.dim[0].stride = 1; atmp.1.dim[0].lbound = 0; atmp.1.dim[0].ubound = 3; _gfortran_cshift0_4 (&atmp.1, &parm.0, &C.4234, 0B); the frontend might set the fnspec correctly to r (read-only, even transitively) which we might use here but then the actual use is the intrinsic and the fnspec does not say that the function acrually reads from the uninitialized storage.