This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
[patch, fortran, committed] Fix PR 77915
- From: Thomas Koenig <tkoenig at netcologne dot de>
- To: "fortran at gcc dot gnu dot org" <fortran at gcc dot gnu dot org>, gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 10 Oct 2016 16:56:14 +0200
- Subject: [patch, fortran, committed] Fix PR 77915
- Authentication-results: sourceware.org; auth=none
Hello world,
I have committed the attached patch to trunk as obvious after
regression-testing. Will commit to gcc6 soon.
Regards
Thomas
2016-10-10 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/77915
* frontend-passes.c (inline_matmul_assign): Return early if
inside a FORALL statement.
2016-10-10 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/77915
* gfortran.dg/matmul_11.f90: New test.
Index: frontend-passes.c
===================================================================
--- frontend-passes.c (Revision 240927)
+++ frontend-passes.c (Arbeitskopie)
@@ -2857,6 +2857,11 @@ inline_matmul_assign (gfc_code **c, int *walk_subt
if (in_where)
return 0;
+ /* The BLOCKS generated for the temporary variables and FORALL don't
+ mix. */
+ if (forall_level > 0)
+ return 0;
+
/* For now don't do anything in OpenMP workshare, it confuses
its translation, which expects only the allowed statements in there.
We should figure out how to parallelize this eventually. */
! { dg-do compile }
! { dg-options "-ffrontend-optimize -fdump-tree-original" }
! PR 77915 - ICE of matmul with forall.
program x
integer, parameter :: d = 3
real,dimension(d,d,d) :: cube,xcube
real, dimension(d,d) :: cmatrix
integer :: i,j
forall(i=1:d,j=1:d)
xcube(i,j,:) = matmul(cmatrix,cube(i,j,:))
end forall
end program x
! { dg-final { scan-tree-dump-times "_gfortran_matmul" 1 "original" } }