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  <tkoe...@gcc.gnu.org>

        PR fortran/77915
        * frontend-passes.c (inline_matmul_assign):  Return early if
        inside a FORALL statement.

2016-10-10  Thomas Koenig  <tkoe...@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" } }

Reply via email to