aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2012-12-09 09:15:36 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2012-12-09 09:15:36 +0000
commitca44c613937546472dda1ee39d05c940f7ad53c0 (patch)
tree590f48a25ac157170a8183ddf10ba931cee92030
parentd0825c97bcf592583ce7272d495d50e7b0a02253 (diff)
2012-12-09 Thomas Koenig <tkoenig@gcc.gnu.org>
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 <tkoenig@gcc.gnu.org> PR fortran/55593 * gfortran.dg/do_check_8.f90: New test. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@194329 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/frontend-passes.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/do_check_8.f9059
4 files changed, 74 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 344c4e4ba18..12d53eeb926 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2012-12-09 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/55593
+ * gfortran.dg/do_check_8.f90: New test.
+
2012-12-05 Tobias Burnus <burnus@net-b.de>
* resolve.c (generate_component_assignments): Fix memleak.
diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c
index 6679368994b..691862f3d73 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 b1f6c995bb1..823916af810 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-12-09 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/55593
+ * gfortran.dg/do_check_8.f90: New test.
+
2012-12-08 Eric Botcazou <ebotcazou@adacore.com>
* 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 00000000000..458ae40b604
--- /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" } }