From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) by sourceware.org (Postfix) with ESMTPS id E9F3E3835809; Thu, 27 May 2021 20:20:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E9F3E3835809 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.7.28] ([79.251.7.28]) by web-mail.gmx.net (3c-app-gmx-bs44.server.lan [172.19.170.96]) (via HTTP); Thu, 27 May 2021 22:20:34 +0200 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] PR fortran/99839 - [9/10/11/12 Regression] ICE in inline_matmul_assign, at fortran/frontend-passes.c:4234 Content-Type: multipart/mixed; boundary=trekuen-677d2d8a-65cf-407b-b427-4db58e4a70a3 Date: Thu, 27 May 2021 22:20:34 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:m7J7C9EIn3b2unr1m/zvrU7Sw+lvAJRTJ6VbvUl9pohDDtG8/s1YlrlmQ2zfENcEJNKm2 0KI1tJDo9vMfD3HwbKPvCv6gLu4aKem1G1A8uEPj6I27Ni5binYVrweZPaeBpq64+ESvW/WvU6m3 ea8O6Uv1n6jRWiUHqfmfaBMp5eq0EiyE8eDK6vawaL7ZWHb5QEp131NrJElwxTtnkDk3KaJFfwOj mZRzQ+fHr7Iy8UFoMY1Cd0AF9VJyEhGWumxgd93FFjRyHSEcBvo/jfpZIrKrN9QDasJymmuMsX42 pQ= X-UI-Out-Filterresults: notjunk:1;V03:K0:1aeshsTYsLs=:mbiBqYywADpBG/3s90OXEW kcvHs/8pZ/dGFjEcTUn8lXMy1J3DHFNPsFfe56AS164wU3gUeUzzcZ6Xg3mOlv63hHykWHxdq /4eS4HxfPK6ifzv42YucyC6dHIiQWSBa7sguTtXADStj1ee0S+nk3yLXB0n9Jv5FKALG80GQs S2ph7kHLJwkNH0C1nS0Ez8z8Tmdgtd7br6Cii4OoPt0t3Hr1GIrVG9QhGrYdsJmGval7HrP6f WEvsA3zb43NdlRZM6ck4ALWMHjs4bEhDt/nG2zTJZzpdRbvx4jY25Twq5tzaK0mjvySBvzipS zuSEU3ktc+R4ZVEfobIHrON9RhiaA7QFcfmwuZB0KZ3u9gvYEL9c3sHFgkH80wajIdNvszT+a e1MT84BRyJdfDIRjcrhndbAjJiDNW/iqIRX0S1cwl/tWCq7IjvMo2XytBU7Pk6udADfXl6OfL oZNG77sZfxTjdZz2qjV7wx10fF6rDxNM32xVrM1kO9OnMyVvJEcfcUvwQMP+HfWAfk258rnfq BmmB7gXdttg7WcEyz/l2k/25nHuBTZuix+uaIalarVsnGEP7JhsbwKOg7n7cZKsIZNVgxlTS2 5z78qc8pIRXUwk4CaI0ihCayt0mEfTpWE4DTpuryIWO/vcbqRLj7YIMorMlrxCJYaSgTRxKap qP5YI/JtZ+iP9SwKXSnfSTj+5KtHOV3DRoAJZwUxIxfEvkU7d/NYeVgKvZgA/oPFZtD861Noy obJ+hbAXsVwtpihSGWr6zkiYy4Bav316gsgXs1knjSyChJnt9djINCj9HkdcJYJHRkCszc+0Q mZRk4J2kbeUZnXAGOJKCDumUq2aVQ== X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Thu, 27 May 2021 20:20:37 -0000 --trekuen-677d2d8a-65cf-407b-b427-4db58e4a70a3 Content-Type: text/plain; charset=UTF-8 Dear Fortranners, frontend optimization tries to inline matmul, but then it also needs to take care of the assignment to the result array. If that one is not of canonical type, we currently get an ICE. The straightforward solution is to simply punt in those cases and avoid inlining. Regtested on x86_64-pc-linux-gnu. OK for mainline? Backport to affected branches? Thanks, Harald Fortran - ICE in inline_matmul_assign Restrict inlining of matmul to those cases where assignment to the result array does not need special treatment. gcc/fortran/ChangeLog: PR fortran/99839 * frontend-passes.c (inline_matmul_assign): Do not inline matmul if the assignment to the resulting array if it is not of canonical type (real/integer/complex/logical). gcc/testsuite/ChangeLog: PR fortran/99839 * gfortran.dg/inline_matmul_25.f90: New test. --trekuen-677d2d8a-65cf-407b-b427-4db58e4a70a3 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr99839.patch Content-Transfer-Encoding: quoted-printable diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c index ffe2db4881d..8aa4cf0eca7 100644 =2D-- a/gcc/fortran/frontend-passes.c +++ b/gcc/fortran/frontend-passes.c @@ -4193,6 +4193,19 @@ inline_matmul_assign (gfc_code **c, int *walk_subtr= ees, if (m_case =3D=3D none) return 0; + /* We only handle assignment to numeric or logical variables. */ + switch(expr1->ts.type) + { + case BT_INTEGER: + case BT_LOGICAL: + case BT_REAL: + case BT_COMPLEX: + break; + + default: + return 0; + } + ns =3D insert_block (); /* Assign the type of the zero expression for initializing the resultin= g diff --git a/gcc/testsuite/gfortran.dg/inline_matmul_25.f90 b/gcc/testsuit= e/gfortran.dg/inline_matmul_25.f90 new file mode 100644 index 00000000000..df8ad06c123 =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/inline_matmul_25.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! { dg-options "-ffrontend-optimize" } +! PR fortran/99839 - ICE in inline_matmul_assign + +program p + real :: x(3, 3) =3D 1.0 + class(*), allocatable :: z(:, :) + z =3D matmul(x, x) +end --trekuen-677d2d8a-65cf-407b-b427-4db58e4a70a3--