re PR fortran/37787 (right-left hand side overlap not recognized with EQUIVALENCEd array assignment)
2008-10-12 Paul Thomas <pault@gcc.gnu.org> PR fortran/37787 * dependency.c (gfc_are_equivalenced_arrays): Look in symbol namespace rather than current namespace, if it is available. 2008-10-12 Paul Thomas <pault@gcc.gnu.org> PR fortran/37787 * gfortran.dg/module_equivalence_5.f90: New test. From-SVN: r141073
This commit is contained in:
parent
7a99defe0d
commit
b803690ae1
@ -1,3 +1,9 @@
|
||||
2008-10-12 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/37787
|
||||
* dependency.c (gfc_are_equivalenced_arrays): Look in symbol
|
||||
namespace rather than current namespace, if it is available.
|
||||
|
||||
2008-10-12 Steven G. Kargl <kargls@comcast.net>
|
||||
|
||||
PR fortran/37792
|
||||
|
@ -547,10 +547,16 @@ gfc_are_equivalenced_arrays (gfc_expr *e1, gfc_expr *e2)
|
||||
|| !e2->symtree->n.sym->attr.in_equivalence|| !e1->rank || !e2->rank)
|
||||
return 0;
|
||||
|
||||
if (e1->symtree->n.sym->ns
|
||||
&& e1->symtree->n.sym->ns != gfc_current_ns)
|
||||
l = e1->symtree->n.sym->ns->equiv_lists;
|
||||
else
|
||||
l = gfc_current_ns->equiv_lists;
|
||||
|
||||
/* Go through the equiv_lists and return 1 if the variables
|
||||
e1 and e2 are members of the same group and satisfy the
|
||||
requirement on their relative offsets. */
|
||||
for (l = gfc_current_ns->equiv_lists; l; l = l->next)
|
||||
for (; l; l = l->next)
|
||||
{
|
||||
fl1 = NULL;
|
||||
fl2 = NULL;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2008-10-12 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/37787
|
||||
* gfortran.dg/module_equivalence_5.f90: New test.
|
||||
|
||||
2008-10-12 Steven G. Kargl <kargls@comcast.net>
|
||||
|
||||
PR fortran/37792
|
||||
|
34
gcc/testsuite/gfortran.dg/module_equivalence_5.f90
Normal file
34
gcc/testsuite/gfortran.dg/module_equivalence_5.f90
Normal file
@ -0,0 +1,34 @@
|
||||
! { dg-do run }
|
||||
!
|
||||
! Fixes PR37787 where the EQUIVALENCE between QLA1 and QLA2 wasn't recognized
|
||||
! in the dependency checking because the compiler was looking in the wrong name
|
||||
! space.
|
||||
!
|
||||
! Contributed by Dick Hendrickson <dick.hendrickson@gmail.com>
|
||||
!
|
||||
module stuff
|
||||
integer, parameter :: r4_kv = 4
|
||||
contains
|
||||
|
||||
SUBROUTINE CF0004
|
||||
! COPYRIGHT 1999 SPACKMAN & HENDRICKSON, INC.
|
||||
REAL(R4_KV), dimension (10) :: QLA1, QLA2, QLA3, &
|
||||
QCA = (/(i, i= 1, 10)/)
|
||||
EQUIVALENCE (QLA1, QLA2)
|
||||
QLA1 = QCA
|
||||
QLA3 = QCA
|
||||
QLA3( 2:10:3) = QCA ( 1:5:2) + 1
|
||||
QLA1( 2:10:3) = QLA2( 1:5:2) + 1 !failed because of dependency
|
||||
if (any (qla1 .ne. qla3)) call abort
|
||||
END SUBROUTINE
|
||||
end module
|
||||
|
||||
program try_cf004
|
||||
use stuff
|
||||
nf1 = 1
|
||||
nf2 = 2
|
||||
call cf0004
|
||||
end
|
||||
|
||||
! { dg-final { cleanup-modules "stuff" } }
|
||||
|
Loading…
Reference in New Issue
Block a user