From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.smtpout.orange.fr (smtp03.smtpout.orange.fr [80.12.242.125]) by sourceware.org (Postfix) with ESMTPS id 4F1543858C33 for ; Sat, 30 Jul 2022 10:03:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4F1543858C33 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=orange.fr Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=orange.fr Received: from [192.168.1.17] ([86.215.161.154]) by smtp.orange.fr with ESMTPA id HjJRonl4nnm5hHjJRoifdl; Sat, 30 Jul 2022 12:03:13 +0200 X-ME-Helo: [192.168.1.17] X-ME-Auth: MDU4MTIxYWM4YWI0ZGE4ZTUwZWZmNTExZmI2ZWZlMThkM2ZhYiE5OWRkOGM= X-ME-Date: Sat, 30 Jul 2022 12:03:13 +0200 X-ME-IP: 86.215.161.154 Message-ID: Date: Sat, 30 Jul 2022 12:03:13 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 From: Mikael Morin Subject: Re: [PATCH, v2] Fortran: fix invalid rank error in ASSOCIATED when rank is remapped [PR77652] To: Harald Anlauf , fortran@gcc.gnu.org References: <8e300265-e24c-59c2-19b0-3d74fc5ed425@orange.fr> <2c940b18-08f2-adeb-6ac3-22e89b72440d@orange.fr> <5504785b-7471-f51e-852a-5ef9b039cc21@orange.fr> Content-Language: en-US In-Reply-To: <5504785b-7471-f51e-852a-5ef9b039cc21@orange.fr> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3.3 required=5.0 tests=BAYES_00, FREEMAIL_FROM, JMQ_SPF_NEUTRAL, KAM_DMARC_STATUS, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 30 Jul 2022 10:03:19 -0000 Le 28/07/2022 à 22:19, Mikael Morin a écrit : > I propose to prepare something tomorrow. > Here you go. I haven’t found a procedure, a template or guidelines on wg5-fortran.org, so I’m just asking questions as free text. I have not put every combination of cases to limit the number of examples, but an answer for each example should give a good picture. Anything to correct or change? Anything to add? Mikael Hello, we are contributors to gfortran. We have been discussing the restrictions a processor is required to put on ASSOCIATED functions calls with regards to rank mismatch in the thread at: > https://gcc.gnu.org/pipermail/fortran/2022-July/058012.html The following discussions are on the same topic as well: > https://groups.google.com/g/comp.lang.fortran/c/BQfpeDZxX3Q > https://community.intel.com/t5/Intel-Fortran-Compiler/Intel-rejects-ASSOCIATED-pointer-target-for-non-equal-ranks/m-p/1402799/highlight/true#M162159 The position from Steve Lionel in the latter threads is that a processor is required to reject an ASSOCIATED function call with arguments of mismatching ranks as there is no bounds-remapping list. Our understanding is that a processor shall accept it as long as it may accept a corresponding pointer association statement with additional bounds-remapping list. Our poll of existing compilers shows the same disagreement, with two accepting mismatching ranks (cray 14.0, nvidia 22.5) and two rejecting them (NAG 7.0 & 7.1, Intel). So we would like an official interpretation on this topic. More specifically, for each program below, is a processor (at compile time) required to reject it, allowed to reject it but not required to, or required to accept it? Harald Anlauf, Mikael Morin !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Example 1 ! matrix pointer vs array target program p real, dimension(100), target :: array real, dimension(:,:), pointer :: pmatrix => null() print *, associated(pmatrix, array) end !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Example 2 ! array pointer vs matrix target program p real, dimension(20,5), target :: matrix real, dimension(:), pointer :: parray => null() print *, associated(parray, matrix) end !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Example 3 ! array pointer vs rank 2 non-contiguous target program p real, dimension(20,5), target :: matrix real, dimension(:), pointer :: parray => null() print *, associated(parray, matrix(1:20:3, 1:5:2)) end !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Example 4 ! array pointer vs scalar target program p real, target :: scalar real, dimension(:), pointer :: parray => null() print *, associated(parray, scalar) end !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Example 5 ! scalar pointer vs array target program p real, dimension(100), target :: array real, pointer :: pscalar => null() print *, associated(pscalar, array) end !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Example 6 ! assumed rank (array) pointer vs matrix target program p real, dimension(20,5), target :: matrix real, dimension(:), pointer :: parray => null() call sub(parray) contains subroutine sub(ptr) real, pointer :: ptr(..) print *, associated(ptr, matrix) end subroutine sub end !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Example 7 ! assumed rank (scalar) pointer vs array target program p real, dimension(100), target :: array real, pointer :: pscalar => null() call sub(pscalar) contains subroutine sub(ptr) real, pointer :: ptr(..) print *, associated(ptr, array) end subroutine sub end !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Example 8 ! assumed rank (array) pointer vs scalar target program p real, target :: scalar real, dimension(:), pointer :: parray => null() call sub(parray) contains subroutine sub(ptr) real, pointer :: ptr(..) print *, associated(ptr, scalar) end subroutine sub end !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!