1031b4e5eSPeter Klausler! RUN: %python %S/test_errors.py %s %flang_fc1 2031b4e5eSPeter Klauslerprogram test 3031b4e5eSPeter Klausler real, allocatable :: a0, a1(:) 4031b4e5eSPeter Klausler real, pointer :: p0, p1(:) 5031b4e5eSPeter Klausler real, target :: t0, t1(1) 6031b4e5eSPeter Klausler contains 7031b4e5eSPeter Klausler subroutine allocatables(a) 8031b4e5eSPeter Klausler real, allocatable :: a(..) 9031b4e5eSPeter Klausler select rank(a) 10031b4e5eSPeter Klausler rank (0) 11031b4e5eSPeter Klausler allocate(a) ! ok 12031b4e5eSPeter Klausler deallocate(a) ! ok 13031b4e5eSPeter Klausler allocate(a, source=a0) ! ok 14031b4e5eSPeter Klausler allocate(a, mold=p0) ! ok 15031b4e5eSPeter Klausler a = 1. ! ok 16031b4e5eSPeter Klausler !ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches scalar REAL(4) and rank 1 array of REAL(4) 17031b4e5eSPeter Klausler a = [1.] 18031b4e5eSPeter Klausler !ERROR: If SOURCE appears, the related expression must be scalar or have the same rank as each allocatable object in ALLOCATE 19031b4e5eSPeter Klausler allocate(a, source=a1) 20031b4e5eSPeter Klausler allocate(a, mold=p1) ! ok, mold= ignored 21031b4e5eSPeter Klausler rank (1) 22031b4e5eSPeter Klausler allocate(a(1)) ! ok 23031b4e5eSPeter Klausler deallocate(a) ! ok 24031b4e5eSPeter Klausler a = 1. ! ok 25031b4e5eSPeter Klausler a = [1.] ! ok 26031b4e5eSPeter Klausler !ERROR: Arrays in ALLOCATE must have a shape specification or an expression of the same rank must appear in SOURCE or MOLD 27031b4e5eSPeter Klausler allocate(a, source=a0) 28031b4e5eSPeter Klausler !ERROR: Arrays in ALLOCATE must have a shape specification or an expression of the same rank must appear in SOURCE or MOLD 29031b4e5eSPeter Klausler allocate(a, mold=p0) 30031b4e5eSPeter Klausler allocate(a, source=a1) ! ok 31031b4e5eSPeter Klausler allocate(a, mold=p1) ! ok 32031b4e5eSPeter Klausler rank (2) 33031b4e5eSPeter Klausler allocate(a(1,1)) ! ok 34031b4e5eSPeter Klausler deallocate(a) ! ok 35031b4e5eSPeter Klausler a = 1. ! ok 36031b4e5eSPeter Klausler !ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches rank 2 array of REAL(4) and rank 1 array of REAL(4) 37031b4e5eSPeter Klausler a = [1.] 38031b4e5eSPeter Klausler !ERROR: Arrays in ALLOCATE must have a shape specification or an expression of the same rank must appear in SOURCE or MOLD 39031b4e5eSPeter Klausler allocate(a, source=a0) 40031b4e5eSPeter Klausler !ERROR: Arrays in ALLOCATE must have a shape specification or an expression of the same rank must appear in SOURCE or MOLD 41031b4e5eSPeter Klausler allocate(a, mold=p0) 42031b4e5eSPeter Klausler !ERROR: Arrays in ALLOCATE must have a shape specification or an expression of the same rank must appear in SOURCE or MOLD 43031b4e5eSPeter Klausler allocate(a, source=a1) 44031b4e5eSPeter Klausler !ERROR: Arrays in ALLOCATE must have a shape specification or an expression of the same rank must appear in SOURCE or MOLD 45031b4e5eSPeter Klausler allocate(a, mold=p1) 464fed5959SPeter Klausler !ERROR: RANK (*) cannot be used when selector is POINTER or ALLOCATABLE 47031b4e5eSPeter Klausler rank (*) 484fed5959SPeter Klausler !ERROR: Whole assumed-size array 'a' may not appear here without subscripts 49031b4e5eSPeter Klausler allocate(a) 504fed5959SPeter Klausler !ERROR: Whole assumed-size array 'a' may not appear here without subscripts 51031b4e5eSPeter Klausler deallocate(a) 524fed5959SPeter Klausler !ERROR: Whole assumed-size array 'a' may not appear here without subscripts 53031b4e5eSPeter Klausler a = 1. 54031b4e5eSPeter Klausler rank default 55*9ab292d7SPeter Klausler !ERROR: An assumed-rank dummy argument may not appear in an ALLOCATE statement 56031b4e5eSPeter Klausler allocate(a) 57031b4e5eSPeter Klausler deallocate(a) 58*9ab292d7SPeter Klausler !ERROR: An assumed-rank dummy argument is not allowed in an assignment statement 59*9ab292d7SPeter Klausler !ERROR: An assumed-rank dummy argument is not allowed as an operand here 60*9ab292d7SPeter Klausler a = a + 1. 61031b4e5eSPeter Klausler end select 6268227087SPeter Klausler ! Test nested associations 6368227087SPeter Klausler select rank(a) 6468227087SPeter Klausler rank default 6568227087SPeter Klausler select rank(a) 6668227087SPeter Klausler rank default 6768227087SPeter Klausler select rank(a) 6868227087SPeter Klausler rank (0) 6968227087SPeter Klausler allocate(a) ! ok 7068227087SPeter Klausler deallocate(a) ! ok 7168227087SPeter Klausler rank (1) 7268227087SPeter Klausler allocate(a(1)) ! ok 7368227087SPeter Klausler deallocate(a) ! ok 7468227087SPeter Klausler end select 7568227087SPeter Klausler end select 7668227087SPeter Klausler end select 77031b4e5eSPeter Klausler end 78031b4e5eSPeter Klausler subroutine pointers(p) 79031b4e5eSPeter Klausler real, pointer :: p(..) 80031b4e5eSPeter Klausler select rank(p) 81031b4e5eSPeter Klausler rank (0) 82031b4e5eSPeter Klausler allocate(p) ! ok 83031b4e5eSPeter Klausler deallocate(p) ! ok 84031b4e5eSPeter Klausler allocate(p, source=a0) ! ok 85031b4e5eSPeter Klausler allocate(p, mold=p0) ! ok 86031b4e5eSPeter Klausler !ERROR: If SOURCE appears, the related expression must be scalar or have the same rank as each allocatable object in ALLOCATE 87031b4e5eSPeter Klausler allocate(p, source=a1) 88031b4e5eSPeter Klausler allocate(p, mold=p1) ! ok, mold ignored 89031b4e5eSPeter Klausler p => t0 ! ok 90031b4e5eSPeter Klausler !ERROR: Pointer has rank 0 but target has rank 1 91031b4e5eSPeter Klausler p => t1 92031b4e5eSPeter Klausler rank (1) 93031b4e5eSPeter Klausler allocate(p(1)) ! ok 94031b4e5eSPeter Klausler deallocate(p) ! ok 95031b4e5eSPeter Klausler !ERROR: Arrays in ALLOCATE must have a shape specification or an expression of the same rank must appear in SOURCE or MOLD 96031b4e5eSPeter Klausler allocate(p, source=a0) 97031b4e5eSPeter Klausler !ERROR: Arrays in ALLOCATE must have a shape specification or an expression of the same rank must appear in SOURCE or MOLD 98031b4e5eSPeter Klausler allocate(p, mold=p0) 99031b4e5eSPeter Klausler allocate(p, source=a1) ! ok 100031b4e5eSPeter Klausler allocate(p, mold=p1) ! ok 101031b4e5eSPeter Klausler !ERROR: Pointer has rank 1 but target has rank 0 102031b4e5eSPeter Klausler p => t0 103031b4e5eSPeter Klausler p => t1 ! ok 104031b4e5eSPeter Klausler rank (2) 105031b4e5eSPeter Klausler allocate(p(1,1)) ! ok 106031b4e5eSPeter Klausler deallocate(p) ! ok 107031b4e5eSPeter Klausler !ERROR: Arrays in ALLOCATE must have a shape specification or an expression of the same rank must appear in SOURCE or MOLD 108031b4e5eSPeter Klausler allocate(p, source=a0) 109031b4e5eSPeter Klausler !ERROR: Arrays in ALLOCATE must have a shape specification or an expression of the same rank must appear in SOURCE or MOLD 110031b4e5eSPeter Klausler allocate(p, mold=p0) 111031b4e5eSPeter Klausler !ERROR: Arrays in ALLOCATE must have a shape specification or an expression of the same rank must appear in SOURCE or MOLD 112031b4e5eSPeter Klausler allocate(p, source=a1) 113031b4e5eSPeter Klausler !ERROR: Arrays in ALLOCATE must have a shape specification or an expression of the same rank must appear in SOURCE or MOLD 114031b4e5eSPeter Klausler allocate(p, mold=p1) 115031b4e5eSPeter Klausler !ERROR: Pointer has rank 2 but target has rank 0 116031b4e5eSPeter Klausler p => t0 117031b4e5eSPeter Klausler !ERROR: Pointer has rank 2 but target has rank 1 118031b4e5eSPeter Klausler p => t1 1194fed5959SPeter Klausler !ERROR: RANK (*) cannot be used when selector is POINTER or ALLOCATABLE 120031b4e5eSPeter Klausler rank (*) 1214fed5959SPeter Klausler !ERROR: Whole assumed-size array 'p' may not appear here without subscripts 122031b4e5eSPeter Klausler allocate(p) 1234fed5959SPeter Klausler !ERROR: Whole assumed-size array 'p' may not appear here without subscripts 124031b4e5eSPeter Klausler deallocate(p) 125031b4e5eSPeter Klausler rank default 126*9ab292d7SPeter Klausler !ERROR: An assumed-rank dummy argument may not appear in an ALLOCATE statement 127031b4e5eSPeter Klausler allocate(p) 128031b4e5eSPeter Klausler deallocate(p) 129*9ab292d7SPeter Klausler !ERROR: The left-hand side of a pointer assignment must not be an assumed-rank dummy argument 130031b4e5eSPeter Klausler !ERROR: pointer 'p' associated with object 't0' with incompatible type or shape 131031b4e5eSPeter Klausler p => t0 132*9ab292d7SPeter Klausler !ERROR: The left-hand side of a pointer assignment must not be an assumed-rank dummy argument 133031b4e5eSPeter Klausler !ERROR: pointer 'p' associated with object 't1' with incompatible type or shape 134031b4e5eSPeter Klausler p => t1 135031b4e5eSPeter Klausler end select 136031b4e5eSPeter Klausler end 137f06ea103SPeter Klausler subroutine undefinable(p) 138f06ea103SPeter Klausler real, pointer, intent(in) :: p(..) 139f06ea103SPeter Klausler real, target :: t 140f06ea103SPeter Klausler select rank(p) 141f06ea103SPeter Klausler rank (0) 142f06ea103SPeter Klausler !ERROR: The left-hand side of a pointer assignment is not definable 143f06ea103SPeter Klausler !BECAUSE: 'p' is an INTENT(IN) dummy argument 144f06ea103SPeter Klausler p => t 145f06ea103SPeter Klausler !ERROR: Name in DEALLOCATE statement is not definable 146f06ea103SPeter Klausler !BECAUSE: 'p' is an INTENT(IN) dummy argument 147f06ea103SPeter Klausler deallocate(p) 148f06ea103SPeter Klausler !ERROR: RANK (*) cannot be used when selector is POINTER or ALLOCATABLE 149f06ea103SPeter Klausler rank (*) 150f06ea103SPeter Klausler !ERROR: Whole assumed-size array 'p' may not appear here without subscripts 151f06ea103SPeter Klausler !ERROR: Name in DEALLOCATE statement is not definable 152f06ea103SPeter Klausler !BECAUSE: 'p' is an INTENT(IN) dummy argument 153f06ea103SPeter Klausler deallocate(p) 154f06ea103SPeter Klausler rank default 155f06ea103SPeter Klausler !ERROR: Name in DEALLOCATE statement is not definable 156f06ea103SPeter Klausler !BECAUSE: 'p' is an INTENT(IN) dummy argument 157f06ea103SPeter Klausler deallocate(p) 158f06ea103SPeter Klausler end select 159f06ea103SPeter Klausler end 160031b4e5eSPeter Klauslerend 161