Commit b803690a by Paul Thomas

re PR fortran/37787 (right-left hand side overlap not recognized with…

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
parent 7a99defe
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> 2008-10-12 Steven G. Kargl <kargls@comcast.net>
PR fortran/37792 PR fortran/37792
......
...@@ -547,10 +547,16 @@ gfc_are_equivalenced_arrays (gfc_expr *e1, gfc_expr *e2) ...@@ -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) || !e2->symtree->n.sym->attr.in_equivalence|| !e1->rank || !e2->rank)
return 0; 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 /* Go through the equiv_lists and return 1 if the variables
e1 and e2 are members of the same group and satisfy the e1 and e2 are members of the same group and satisfy the
requirement on their relative offsets. */ requirement on their relative offsets. */
for (l = gfc_current_ns->equiv_lists; l; l = l->next) for (; l; l = l->next)
{ {
fl1 = NULL; fl1 = NULL;
fl2 = NULL; fl2 = NULL;
......
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> 2008-10-12 Steven G. Kargl <kargls@comcast.net>
PR fortran/37792 PR fortran/37792
......
! { 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" } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment