From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id E25FF3858400; Thu, 11 Nov 2021 08:00:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E25FF3858400 From: "rguenth at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/102043] Wrong array types used for negative stride accesses Date: Thu, 11 Nov 2021 08:00:58 +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: rguenth 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: 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: Thu, 11 Nov 2021 08:00:59 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D102043 --- Comment #10 from Richard Biener --- So to clarify the ARRAY_REF constraints - there is currently no way to construct a valid ARRAY_REF where an index does an access to memory before = the supplied base object. TREE_OPERAND (array_ref, 0) needs to always be the array, it's address needs to be the address of the _first_ element. For negative strides gfortran seems to construct the array object in a way so its address points to the _last_ element of the array. That's not supported. I realize the complication is that with array descriptors we do not know statically whether the stride is positive or negative and the data pointer is already set up "wrong" in there so we'd have to go and undo the biasing which might or might not be easily possible but it will be costly. Is there any case where the frontend would make 'data' point into the middle of the array and iteration over the array would end up accessing elements on "both sides"? Can somebody write a short testcase where that would happen?=