diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2020-06-23 08:14:51 +0200 |
---|---|---|
committer | Giuliano Belinassi <giuliano.belinassi@usp.br> | 2020-08-17 13:14:33 -0300 |
commit | 80aee062534f05094bde668fb742c2317530152c (patch) | |
tree | df681128ed20cfd79d67830afbfaff014bdf3af3 | |
parent | ca9275d8ab02436b45f25f155c510210f07fccb5 (diff) | |
download | gcc-80aee062534f05094bde668fb742c2317530152c.zip gcc-80aee062534f05094bde668fb742c2317530152c.tar.gz gcc-80aee062534f05094bde668fb742c2317530152c.tar.bz2 |
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.
-rw-r--r-- | gcc/fortran/dependency.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/dependency_59.f90 | 15 |
2 files changed, 17 insertions, 0 deletions
diff --git a/gcc/fortran/dependency.c b/gcc/fortran/dependency.c index f6c6840..7edd5d9 100644 --- a/gcc/fortran/dependency.c +++ b/gcc/fortran/dependency.c @@ -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 index 0000000..90c6532 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dependency_59.f90 @@ -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 |