| ! { 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 |