From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 7489D3858403; Sun, 14 Nov 2021 09:38:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7489D3858403 From: "tkoenig at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/102043] Wrong array types used for negative stride accesses Date: Sun, 14 Nov 2021 09:38:28 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: fortran X-Bugzilla-Version: 12.0 X-Bugzilla-Keywords: wrong-code X-Bugzilla-Severity: normal X-Bugzilla-Who: tkoenig at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cc Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Nov 2021 09:38:28 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D102043 Thomas Koenig changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |sandra at codesourcery dot= com --- Comment #15 from Thomas Koenig --- One possibility would be to extend the patch Sandra posted at https://gcc.gnu.org/pipermail/fortran/2021-January/055563.html to scalarization. With the patch, the snippet integer :: i,j integer :: a(4, 4) do j=3D1,size(a,2) do i=3D1,size(a,1) a(i,j) =3D 0 end do end do is translated to while (1) { { logical(kind=3D4) D.4265; D.4265 =3D j > 4; if (D.4265) goto L.4; i =3D 1; while (1) { { logical(kind=3D4) D.4268; D.4268 =3D i > 4; if (D.4268) goto L.6; typedef integer(kind=3D4) [1:4]; typedef integer(kind=3D4) [1:4][1:4]; ((integer(kind=3D4)[1:4][1:4]) a)[(integer(kind=3D8)) j]{lb: = 1 sz: 16}[(integer(kind=3D8)) i]{lb: 1 sz: 4} =3D 0; L.5:; i =3D i + 1; } } L.6:; L.3:; j =3D j + 1; } } which looks good.=