1! { dg-do compile } 2! 3! PR fortran/47448 4! 5! ASSIGNMENT(=) checks. Defined assignment is allowed if and only if 6! it does not override an intrinsic assignment. 7! 8 9module test1 10 interface assignment(=) 11 module procedure valid, valid2 12 end interface 13contains 14 ! Valid: scalar = array 15 subroutine valid (lhs,rhs) 16 integer, intent(out) :: lhs 17 integer, intent(in) :: rhs(:) 18 lhs = rhs(1) 19 end subroutine valid 20 21 ! Valid: array of different ranks 22 subroutine valid2 (lhs,rhs) 23 integer, intent(out) :: lhs(:) 24 integer, intent(in) :: rhs(:,:) 25 lhs(:) = rhs(:,1) 26 end subroutine valid2 27end module test1 28 29module test2 30 interface assignment(=) 31 module procedure invalid 32 end interface 33contains 34 ! Invalid: scalar = scalar 35 subroutine invalid (lhs,rhs) ! { dg-error "must not redefine an INTRINSIC type assignment" } 36 integer, intent(out) :: lhs 37 integer, intent(in) :: rhs 38 lhs = rhs 39 end subroutine invalid 40end module test2 41 42module test3 43 interface assignment(=) 44 module procedure invalid2 45 end interface 46contains 47 ! Invalid: array = scalar 48 subroutine invalid2 (lhs,rhs) ! { dg-error "must not redefine an INTRINSIC type assignment" } 49 integer, intent(out) :: lhs(:) 50 integer, intent(in) :: rhs 51 lhs(:) = rhs 52 end subroutine invalid2 53end module test3 54 55module test4 56 interface assignment(=) 57 module procedure invalid3 58 end interface 59contains 60 ! Invalid: array = array for same rank 61 subroutine invalid3 (lhs,rhs) ! { dg-error "must not redefine an INTRINSIC type assignment" } 62 integer, intent(out) :: lhs(:) 63 integer, intent(in) :: rhs(:) 64 lhs(:) = rhs(:) 65 end subroutine invalid3 66end module test4 67