From cc2f1588a11978b86f035874c51ee1c95ca26295 Mon Sep 17 00:00:00 2001 From: tkoenig Date: Sun, 9 Dec 2012 09:15:36 +0000 Subject: [PATCH] 2012-12-09 Thomas Koenig PR fortran/55593 * frontend-passes.c (doloop_code): Use resolved_sym instead of n.sym->formal for formal argument list to get the correct version for all generic subroutines. 2012-12-09 Thomas Koenig PR fortran/55593 * gfortran.dg/do_check_8.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194329 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 5 +++ gcc/fortran/frontend-passes.c | 6 +++- gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/gfortran.dg/do_check_8.f90 | 59 ++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/do_check_8.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 344c4e4..12d53ee 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2012-12-09 Thomas Koenig + + PR fortran/55593 + * gfortran.dg/do_check_8.f90: New test. + 2012-12-05 Tobias Burnus * resolve.c (generate_component_assignments): Fix memleak. diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c index 6679368..691862f 100644 --- a/gcc/fortran/frontend-passes.c +++ b/gcc/fortran/frontend-passes.c @@ -1277,7 +1277,11 @@ doloop_code (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED, break; case EXEC_CALL: - f = co->symtree->n.sym->formal; + + if (co->resolved_sym == NULL) + break; + + f = co->resolved_sym->formal; /* Withot a formal arglist, there is only unknown INTENT, which we don't check for. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b1f6c99..823916a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-12-09 Thomas Koenig + + PR fortran/55593 + * gfortran.dg/do_check_8.f90: New test. + 2012-12-08 Eric Botcazou * gnat.dg/vect10.ad[sb]: New test. diff --git a/gcc/testsuite/gfortran.dg/do_check_8.f90 b/gcc/testsuite/gfortran.dg/do_check_8.f90 new file mode 100644 index 0000000..458ae40 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/do_check_8.f90 @@ -0,0 +1,59 @@ +! { dg-do compile } +! PR 55593 - bogus error with generic subroutines +module foo + implicit none + interface sub + subroutine sub2(i) + integer, intent(in) :: i + end subroutine sub2 + subroutine sub(i) + integer, dimension(:), intent(out) :: i + end subroutine sub + end interface sub + + interface tub2 + subroutine tub2(i) + integer, intent(in) :: i + end subroutine tub2 + subroutine tub(i) + integer, dimension(:), intent(out) :: i + end subroutine tub + end interface tub2 + + interface func + integer function ifunc(i) + integer, intent(in) :: i + end function ifunc + integer function func(i) + integer, intent(in) :: i(:) + end function func + end interface func + + interface igunc + integer function igunc(i) + integer, intent(in) :: i + end function igunc + integer function gunc(i) + integer, intent(in) :: i(:) + end function gunc + end interface igunc +end module foo + +program main + use foo + implicit none + integer :: i + do i=1,10 + call sub(i) + call tub2(i) + end do + do i=1,10 + print *,func(i) + print *,igunc(i) + end do + + do undeclared=1,10 ! { dg-error "has no IMPLICIT type" } + call sub(undeclared) + end do +end program main +! { dg-final { cleanup-modules "foo" } } -- 2.7.4