re PR fortran/55593 (Bogus error on passing DO LOOP variable)

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.

From-SVN: r194329
This commit is contained in:
Thomas Koenig 2012-12-09 09:15:36 +00:00
parent 5f515aaecb
commit da52ef4376
4 changed files with 74 additions and 1 deletions

View File

@ -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.

View File

@ -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. */

View File

@ -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.

View File

@ -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" } }