From aac18c0250f9a03f725be1f2ee32d87a2d743f09 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Wed, 2 Jun 2010 07:55:19 +0200 Subject: [PATCH] re PR fortran/44360 (wrong-code: host-associated procedure wrongly favoured to use-associated one) 2010-06-02 Tobias Burnus PR fortran/44360 * parse.c (gfc_fixup_sibling_symbols): Do not "fix" use-associated symbols. 2010-06-02 Tobias Burnus PR fortran/44360 * gfortran.dg/use_13.f90: New test case. From-SVN: r160138 --- gcc/fortran/ChangeLog | 6 ++++ gcc/fortran/parse.c | 1 + gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gfortran.dg/use_13.f90 | 45 ++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/use_13.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 80f78c12a6d..0db8ce51016 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2010-06-02 Tobias Burnus + + PR fortran/44360 + * parse.c (gfc_fixup_sibling_symbols): Do not "fix" use-associated + symbols. + 2010-06-01 Jerry DeLisle PR fortran/44371 diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index 31ad7cf385c..7fc35418bec 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -3667,6 +3667,7 @@ gfc_fixup_sibling_symbols (gfc_symbol *sym, gfc_namespace *siblings) || (old_sym->ts.type != BT_UNKNOWN && !old_sym->attr.implicit_type) || old_sym->attr.flavor == FL_PARAMETER + || old_sym->attr.use_assoc || old_sym->attr.in_common || old_sym->attr.in_equivalence || old_sym->attr.data diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cbda12be222..c15d70839c5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-06-02 Tobias Burnus + + PR fortran/44360 + * gfortran.dg/use_13.f90: New test case. + 2010-06-01 Jerry DeLisle PR fortran/44371 diff --git a/gcc/testsuite/gfortran.dg/use_13.f90 b/gcc/testsuite/gfortran.dg/use_13.f90 new file mode 100644 index 00000000000..1fe7b1eacf2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/use_13.f90 @@ -0,0 +1,45 @@ +! { dg-do run } +! +! PR fortran/44360 +! +! Test-case based on a contribution of Vittorio Zecca. +! +! The used subroutine was not the use-associated but the host associated one! +! The use-associated function/variable were already working properly. +! +module m + integer :: var = 43 +contains + integer function fun() + fun = 42 + end function fun + subroutine fun2() + var = 44 + end subroutine fun2 +end module m + +module m2 + integer :: var = -2 +contains + subroutine test() + ! All procedures/variables below refer to the ones in module "m" + ! and not to the siblings in this module "m2". + use m + if (fun() /= 42) call abort() + if (var /= 43) call abort() + call fun2() + if (var /= 44) call abort() + end subroutine test + integer function fun() + call abort() + fun = -3 + end function fun + subroutine fun2() + call abort() + end subroutine fun2 +end module m2 + +use m2 +call test() +end +! { dg-final { cleanup-modules "m m2" } }