From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2071) id 830BE3858D29; Sat, 28 Aug 2021 19:49:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 830BE3858D29 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Harald Anlauf To: gcc-cvs@gcc.gnu.org Subject: [gcc r10-10076] Fortran: Allow pointer deferred length associate selectors. [PR93794] X-Act-Checkin: gcc X-Git-Author: Paul Thomas X-Git-Refname: refs/heads/releases/gcc-10 X-Git-Oldrev: 4cecfae4b57e052008e2febe25607d5e2cad5dbb X-Git-Newrev: 803918dc6da9b7c88cc97635fc8a21bbd805a120 Message-Id: <20210828194943.830BE3858D29@sourceware.org> Date: Sat, 28 Aug 2021 19:49:43 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 28 Aug 2021 19:49:43 -0000 https://gcc.gnu.org/g:803918dc6da9b7c88cc97635fc8a21bbd805a120 commit r10-10076-g803918dc6da9b7c88cc97635fc8a21bbd805a120 Author: Paul Thomas Date: Fri Jan 8 10:15:22 2021 +0000 Fortran: Allow pointer deferred length associate selectors. [PR93794] 2021-01-05 Paul Thomas gcc/fortran PR fortran/93794 * trans-expr.c (gfc_conv_component_ref): Remove the condition that deferred character length components only be allocatable. gcc/testsuite/ PR fortran/93794 * gfortran.dg/deferred_character_35.f90 : New test. (cherry picked from commit 21c1a30fc73105af50c5e717cb99dc3becabf8fa) Diff: --- gcc/fortran/trans-expr.c | 2 +- gcc/testsuite/gfortran.dg/deferred_character_35.f90 | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index cb901437965..dbe6344db99 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2670,7 +2670,7 @@ gfc_conv_component_ref (gfc_se * se, gfc_ref * ref) /* Allocatable deferred char arrays are to be handled by the gfc_deferred_ strlen () conditional below. */ if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer - && !(c->attr.allocatable && c->ts.deferred) + && !c->ts.deferred && !c->attr.pdt_string) { tmp = c->ts.u.cl->backend_decl; diff --git a/gcc/testsuite/gfortran.dg/deferred_character_35.f90 b/gcc/testsuite/gfortran.dg/deferred_character_35.f90 new file mode 100644 index 00000000000..c28f52f79ff --- /dev/null +++ b/gcc/testsuite/gfortran.dg/deferred_character_35.f90 @@ -0,0 +1,18 @@ +! { dg-do compile } +! +! Test the fix for PR93794, where the ASSOCIATE statement ICED on the +! deferred character length, pointer component. +! +! Contributed by Gerhard Steinmetz +! +program p + type t + character(:), pointer :: a + end type + type(t) :: z + character(4), target :: c = 'abcd' + z%a => c + associate (y => z%a) + print *, y + end associate +end