Handle AR_FULL vs. AR_FULL in dependency checking.
authorThomas Koenig <tkoenig@gcc.gnu.org>
Tue, 23 Jun 2020 06:14:51 +0000 (08:14 +0200)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Tue, 23 Jun 2020 06:14:51 +0000 (08:14 +0200)
Previously, handling of full vs. full references failed to take
AR_FULL vs. AR_FULL into account.  A change in dependency
checking in gcc 10 created a code path that could lead there;
with this patch, this is now correctly handled.

gcc/fortran/ChangeLog:

2020-06-23  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/95812
* dependency.c (ref_same_as_full_array): Handle case of AR_FULL
vs. AR_FULL.

gcc/testsuite/ChangeLog:

2020-06-23  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/95812
* gfortran.dg/dependency_59.f90: New test.

gcc/fortran/dependency.c
gcc/testsuite/gfortran.dg/dependency_59.f90 [new file with mode: 0644]

index f6c68409e684d30fb236ed37fc60bfa31565eac2..7edd5d9010d6eb02f2170c80505925ba2d4cdc60 100644 (file)
@@ -2033,6 +2033,8 @@ ref_same_as_full_array (gfc_ref *full_ref, gfc_ref *ref)
     return false;
   if (ref->type != REF_ARRAY)
     return false;
+  if (ref->u.ar.type == AR_FULL)
+    return true;
   if (ref->u.ar.type != AR_SECTION)
     return false;
 
diff --git a/gcc/testsuite/gfortran.dg/dependency_59.f90 b/gcc/testsuite/gfortran.dg/dependency_59.f90
new file mode 100644 (file)
index 0000000..90c6532
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do compile }
+! PR 95812 - this caused an ICE.
+! Test case by Jakub Jelinek.
+
+module test
+contains
+  subroutine foo()
+    integer :: a(3)
+    a = 1
+    print *, matmul(1*reshape(a,(/3,1/)), reshape((/1,1,1/),(/1,3/)))
+  end subroutine foo
+  subroutine bar()
+    call foo()
+  end subroutine bar
+end module test