https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118471
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- So it works for the non-pointer case real(kind=8), contiguous :: a(:) where we get stride.1 = 1; ... (*a.0)[(integer(kind=8)) i * stride.1 + offset.2] = 1.0e+0; but with 'pointer' we have *(real(kind=8) *) (a->data + (sizetype) ((a->offset + (integer(kind=8)) i) * a->span)) = 1.0e+0; and no "stride" mentioned at all. When 'contiguous' isn't specified we get *(real(kind=8) *) (a->data + (sizetype) ((a->offset + (integer(kind=8)) i * a->dim[0].stride) * a->span)) = 1.0e+0;