Handle AR_FULL vs. AR_FULL in dependency checking.

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.
This commit is contained in:
Thomas Koenig 2020-06-23 08:14:51 +02:00
parent 384aa89025
commit abcde0a658
2 changed files with 17 additions and 0 deletions

View 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;

View File

@ -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