| ! { dg-do compile } |
| ! |
| ! PR fortran/47448 |
| ! |
| ! ASSIGNMENT(=) checks. Defined assignment is allowed if and only if |
| ! it does not override an intrinsic assignment. |
| ! |
| |
| module test1 |
| interface assignment(=) |
| module procedure valid, valid2 |
| end interface |
| contains |
| ! Valid: scalar = array |
| subroutine valid (lhs,rhs) |
| integer, intent(out) :: lhs |
| integer, intent(in) :: rhs(:) |
| lhs = rhs(1) |
| end subroutine valid |
| |
| ! Valid: array of different ranks |
| subroutine valid2 (lhs,rhs) |
| integer, intent(out) :: lhs(:) |
| integer, intent(in) :: rhs(:,:) |
| lhs(:) = rhs(:,1) |
| end subroutine valid2 |
| end module test1 |
| |
| module test2 |
| interface assignment(=) |
| module procedure invalid |
| end interface |
| contains |
| ! Invalid: scalar = scalar |
| subroutine invalid (lhs,rhs) ! { dg-error "must not redefine an INTRINSIC type assignment" } |
| integer, intent(out) :: lhs |
| integer, intent(in) :: rhs |
| lhs = rhs |
| end subroutine invalid |
| end module test2 |
| |
| module test3 |
| interface assignment(=) |
| module procedure invalid2 |
| end interface |
| contains |
| ! Invalid: array = scalar |
| subroutine invalid2 (lhs,rhs) ! { dg-error "must not redefine an INTRINSIC type assignment" } |
| integer, intent(out) :: lhs(:) |
| integer, intent(in) :: rhs |
| lhs(:) = rhs |
| end subroutine invalid2 |
| end module test3 |
| |
| module test4 |
| interface assignment(=) |
| module procedure invalid3 |
| end interface |
| contains |
| ! Invalid: array = array for same rank |
| subroutine invalid3 (lhs,rhs) ! { dg-error "must not redefine an INTRINSIC type assignment" } |
| integer, intent(out) :: lhs(:) |
| integer, intent(in) :: rhs(:) |
| lhs(:) = rhs(:) |
| end subroutine invalid3 |
| end module test4 |