https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102043
Bug ID: 102043 Summary: Wrong array types used for negative stride accesses Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: rguenth at gcc dot gnu.org Target Milestone: --- gfortran.dg/vector_subscript_1.f90 fails with -O -fipa-pta because When the frontend lowers idx (10:6:-2) it generates parm.22D.4083.dimD.4082[0].lboundD.3942 = 1; parm.22D.4083.dimD.4082[0].uboundD.3943 = 3; parm.22D.4083.dimD.4082[0].strideD.3941 = -2; parm.22D.4083.dataD.4078 = (voidD.27 *) &idxD.4029[9]; ... D.4091 = (*(integer(kind=4)D.8[0:] *) parm.22D.4083.dataD.4078)[parm.22D.4083.dimD.4082[0].strideD.3941 * NON_LVALUE_EXPR <S.24D.4090>]; and that looks clearly wrong to me, we have an access to an array [0:] but with negative index. The middle-end here correctly concludes that this access can only possibly access idx[9] and not any other element.