51 lines
1.4 KiB
Fortran
51 lines
1.4 KiB
Fortran
! { dg-do compile }
|
|
!
|
|
! PR fortran/35033
|
|
!
|
|
! The checks for assignments were too strict.
|
|
!
|
|
MODULE m1
|
|
INTERFACE ASSIGNMENT(=)
|
|
SUBROUTINE s(a,b)
|
|
REAL,INTENT(OUT) :: a(1,*)
|
|
REAL,INTENT(IN) :: b(:)
|
|
END SUBROUTINE
|
|
END Interface
|
|
contains
|
|
subroutine test1()
|
|
REAL,POINTER :: p(:,:),q(:)
|
|
CALL s(p,q)
|
|
p = q
|
|
end subroutine test1
|
|
end module m1
|
|
|
|
MODULE m2
|
|
INTERFACE ASSIGNMENT(=)
|
|
SUBROUTINE s(a,b)
|
|
REAL,INTENT(OUT),VOLATILE :: a(1,*)
|
|
REAL,INTENT(IN) :: b(:)
|
|
END SUBROUTINE
|
|
END Interface
|
|
contains
|
|
subroutine test1()
|
|
REAL,POINTER :: p(:,:),q(:)
|
|
CALL s(p,q) ! { dg-error "requires an assumed-shape or pointer-array dummy" }
|
|
!TODO: The following is rightly rejected but the error message is misleading.
|
|
! The actual reason is the mismatch between pointer array and VOLATILE
|
|
p = q ! { dg-error "Incompatible ranks" }
|
|
end subroutine test1
|
|
end module m2
|
|
|
|
MODULE m3
|
|
INTERFACE ASSIGNMENT(=)
|
|
module procedure s
|
|
END Interface
|
|
contains
|
|
SUBROUTINE s(a,b) ! { dg-error "must not redefine an INTRINSIC type" }
|
|
REAL,INTENT(OUT),VOLATILE :: a(1,*)
|
|
REAL,INTENT(IN) :: b(:,:)
|
|
END SUBROUTINE
|
|
end module m3
|
|
|
|
! { dg-final { cleanup-modules "m1 m2 m3" } }
|