re PR fortran/84133 (ICE in gimplify_var_or_parm_decl, at gimplify.c:2706)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Tue, 30 Jan 2018 20:49:49 +0000 (20:49 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Tue, 30 Jan 2018 20:49:49 +0000 (20:49 +0000)
2018-01-30  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/84133
* frontend-passes (matmul_to_var_expr): Return early if
in association list.
(inline_matmul_assign): Likewise.

2018-01-30  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/84133
* gfortran.dg/inline_matmul_21.f90: New test case.

From-SVN: r257206

gcc/fortran/ChangeLog
gcc/fortran/frontend-passes.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/inline_matmul_21.f90 [new file with mode: 0644]

index 96e6fb214029ad054a48fbdc9e82105fce553e45..292abc159531117775f2132735d11aadb0cd178f 100644 (file)
@@ -1,3 +1,10 @@
+2018-01-30  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/84133
+       * frontend-passes (matmul_to_var_expr): Return early if
+       in association list.
+       (inline_matmul_assign): Likewise.
+
 2017-01-29  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/84073
index bfa50bea7668e66bc172fe9be22567d6fda000fa..11a5b9b779c7b58208edf196af24728f32113808 100644 (file)
@@ -2763,7 +2763,7 @@ matmul_to_var_expr (gfc_expr **ep, int *walk_subtrees ATTRIBUTE_UNUSED,
     return 0;
 
   if (forall_level > 0 || iterator_level > 0 || in_omp_workshare
-      || in_where)
+      || in_where || in_assoc_list)
     return 0;
 
   /* Check if this is already in the form c = matmul(a,b).  */
@@ -3728,7 +3728,7 @@ inline_matmul_assign (gfc_code **c, int *walk_subtrees,
   if (co->op != EXEC_ASSIGN)
     return 0;
 
-  if (in_where)
+  if (in_where || in_assoc_list)
     return 0;
 
   /* The BLOCKS generated for the temporary variables and FORALL don't
index 9254cca638fe45442eb1d698e6d8b19ec9d6d57c..b1a7ba859964a8344064e5d8795aa450403586e2 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-30  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/84133
+       * gfortran.dg/inline_matmul_21.f90: New test case.
+
 2018-01-30  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * g++.dg/torture/pr81360.C: Add -fdump-ipa-icf to dg-options.
diff --git a/gcc/testsuite/gfortran.dg/inline_matmul_21.f90 b/gcc/testsuite/gfortran.dg/inline_matmul_21.f90
new file mode 100644 (file)
index 0000000..5bfda8b
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do compile }
+! { dg-additional-options "-ffrontend-optimize" }
+! PR 84133 - this used to ICE. Original test case by
+! Gerhard Steinmetz.
+
+program p
+   real :: x(2,2) = 1.0
+   real :: z(2,2)
+   associate (y => matmul(x,x))
+      z = y
+   end associate
+   print *, z
+end
+
+