From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2071) id B4CB43858033; Sat, 4 Feb 2023 15:43:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B4CB43858033 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1675525391; bh=JLXgdKWrPspjRfeQgwuROHcHjFIoHhSXdCPhcLBImUk=; h=From:To:Subject:Date:From; b=Doq7YCXx4foO3gxIylUh30xtqTr91WZlVxt0M4FHFAkBHyMy6oevmpKs8OcsRVHNv q5axrPN3busPrDQHSOEj1k+kQgWIJ51qXl3jM7Yw9+vkhnHGzYPo1CtmChzfMtw+8C 3Oy/J3GCGv7+BXa2rEn+56We6oDU+nDAXKAF+Kis= 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 r11-10501] Fortran: fix ICE in check_charlen_present [PR108420] X-Act-Checkin: gcc X-Git-Author: Harald Anlauf X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: be8003ffcfb02dd8ef49ffec01bf96da2d973bc2 X-Git-Newrev: c3985fd624053502b0aad85132982b4f8970811a Message-Id: <20230204154311.B4CB43858033@sourceware.org> Date: Sat, 4 Feb 2023 15:43:11 +0000 (GMT) List-Id: https://gcc.gnu.org/g:c3985fd624053502b0aad85132982b4f8970811a commit r11-10501-gc3985fd624053502b0aad85132982b4f8970811a Author: Harald Anlauf Date: Mon Jan 16 21:41:09 2023 +0100 Fortran: fix ICE in check_charlen_present [PR108420] gcc/fortran/ChangeLog: PR fortran/108420 * iresolve.c (check_charlen_present): Preserve character length if there is no array constructor. gcc/testsuite/ChangeLog: PR fortran/108420 * gfortran.dg/pr108420.f90: New test. (cherry picked from commit e6669c0a50ed8aee9e5997d61e6271668d149218) Diff: --- gcc/fortran/iresolve.c | 9 ++++++--- gcc/testsuite/gfortran.dg/pr108420.f90 | 10 ++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index 598c0409b66..03db23b5b45 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -94,9 +94,12 @@ check_charlen_present (gfc_expr *source) else if (source->expr_type == EXPR_ARRAY) { gfc_constructor *c = gfc_constructor_first (source->value.constructor); - source->ts.u.cl->length - = gfc_get_int_expr (gfc_charlen_int_kind, NULL, - c->expr->value.character.length); + if (c) + source->ts.u.cl->length + = gfc_get_int_expr (gfc_charlen_int_kind, NULL, + c->expr->value.character.length); + if (source->ts.u.cl->length == NULL) + gfc_internal_error ("check_charlen_present(): length not set"); } } diff --git a/gcc/testsuite/gfortran.dg/pr108420.f90 b/gcc/testsuite/gfortran.dg/pr108420.f90 new file mode 100644 index 00000000000..985c0b3bf53 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr108420.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! PR fortran/108420 +! Contributed by G.Steinmetz + +program p + character :: c = 'c' + logical :: m = .true. + print *, merge(transfer('a', 'b', 0), c, .true.) + print *, merge(transfer('a', 'b', 0), c, m) +end