From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) by sourceware.org (Postfix) with ESMTPS id 5CA00384003D; Wed, 21 Jul 2021 20:23:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5CA00384003D X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.11.232] ([79.251.11.232]) by web-mail.gmx.net (3c-app-gmx-bap01.server.lan [172.19.172.71]) (via HTTP); Wed, 21 Jul 2021 22:22:59 +0200 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] PR fortran/101536 - ICE in gfc_conv_expr_descriptor, at fortran/trans-array.c:7324 Content-Type: multipart/mixed; boundary=abmob-b5ac29f6-bc3e-4dd8-a91c-f367bba5b245 Date: Wed, 21 Jul 2021 22:22:59 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:iKbzPcPFg0x+lF5BssQ3rI47dVo4nrOI5Cr1/BLAuDG0tD8iz9OLCquooVL0HfFewOiW9 fFUYaunc98LS70ruBTk9zjMT0TsLq/BQ2pGbcZhWSTobBLWPam2QZNXnqjCzlQ0Qf6ZroV49xEYp MreXi37TKg4DKqshAsj5p8nQ/PfGrdZhwgGc0DlipDAHX7B/wBtY7c7e86w8BIIii+duYqzaFngm 0zdpRIvkDiabjf8zcCXwXs4ilDi0TaVpjeDCP3pAC2R/6iJK9hjt15fUY/J5NIUEaHbQxZLwT9Qb 8c= X-UI-Out-Filterresults: notjunk:1;V03:K0:YQ58jlBNBJ0=:N1qQqv8MtNHFE8RwfCvQMt 2E/mi3MYSqxtsu5bFH56ZLThJzJLvGx8NQAiNs0EsOCKaeA6LFBJp5yeswg478qPrqgJqOYab drTz9vIrkkbxNiG6IVVzzttuEDZKku4ct5vQHr2RcKbU5yyKcfnFwHP0NhskgIOikeDFKBNDG 5/ODxfWqWcg4ryzHN5rop34ga+MJhWtP5iiEr6M0bQ6upPyMmQpluIQLdhxTj15fB/xhyOhO+ GBrWsugvAmdsPkrZlsqAvTsokbJSqe/KpFf7vuzNtcz62r1bVKoFFCVKdcLU5SpbwiaMWF762 yFFJ8AZFAn3BsgcGwvhRNkzIrjBWWBNp7PrHXtPdaXQME2o720RyI0zJ1IFPDReyg1SC67of2 4H7B7ZW4cokwDtusjJXCK8ozHbXcu2eT1FrWpJVddwLvNhDAmLQ02shk6UInPVB/vQqunqHom ysF95O3Z+rj33yAvDEj8GBAnG2wglYrHzcTfYIq37OUOZeKF0RJHJq6l/tuOcvWo6JC2gkbDB OQSv7b8Ka140JUrsyriSIDqzhG5jD5GQ8NpfovXaW39tnI5PSikK+NB+W03MdfSvr9k8w/ycR LzOtWK8zEoDhS7qZ1tkaUsx/f1Cf8trGxHMgMFZd5tj3nMb74VQr7PdRobMgfNB465DzL36jl hY/CbeQAUG4X5rpxpj/b6tffB37T+xZPtoORgzHtIA4tKoOHeZyku/9ej1P1HqsZgwLGGLIr9 NhA33tqLwVGU+sGfR7GtVWbnfcRwQ/mv/haJ+Eb6/5vAczz1KIT+UUJJddS2qaHN2c1HeijBP 12SuJjUQ6AaTD1CycqjBq/yBMZ5CA== X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Jul 2021 20:23:03 -0000 --abmob-b5ac29f6-bc3e-4dd8-a91c-f367bba5b245 Content-Type: text/plain; charset=UTF-8 Another one of Gerhard's infamous testcases. We did not properly detect and reject array elements of type CLASS as argument to an intrinsic when it should be an array. Regtested on x86_64-pc-linux-gnu. OK for mainline / 11-branch when it reopens? Thanks, Harald Fortran: extend check for array arguments and reject CLASS array elements. gcc/fortran/ChangeLog: PR fortran/101536 * check.c (array_check): Array elements of CLASS type are not arrays. gcc/testsuite/ChangeLog: PR fortran/101536 * gfortran.dg/pr101536.f90: New test. --abmob-b5ac29f6-bc3e-4dd8-a91c-f367bba5b245 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr101536.patch Content-Transfer-Encoding: quoted-printable diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 27bf3a7eafe..6d2d9fe4007 100644 =2D-- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -735,6 +735,10 @@ array_check (gfc_expr *e, int n) && CLASS_DATA (e)->attr.dimension && CLASS_DATA (e)->as->rank) { + if (e->ref && e->ref->type =3D=3D REF_ARRAY + && e->ref->u.ar.type =3D=3D AR_ELEMENT) + goto error; + gfc_add_class_array_ref (e); return true; } @@ -742,6 +746,7 @@ array_check (gfc_expr *e, int n) if (e->rank !=3D 0 && e->ts.type !=3D BT_PROCEDURE) return true; +error: gfc_error ("%qs argument of %qs intrinsic at %L must be an array", gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic, &e->where); diff --git a/gcc/testsuite/gfortran.dg/pr101536.f90 b/gcc/testsuite/gfortr= an.dg/pr101536.f90 new file mode 100644 index 00000000000..14cb4100bd6 =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr101536.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! PR fortran/101536 - ICE in gfc_conv_expr_descriptor + +program p + type t + end type +contains + integer function f(x) + class(t), allocatable :: x(:) + f =3D size (x(1)) ! { dg-error "must be an array" } + end +end --abmob-b5ac29f6-bc3e-4dd8-a91c-f367bba5b245--