| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| ! Miscellaneous constraint and requirement checking on intrinsics |
| program test_size |
| real :: scalar |
| real, dimension(5, 5) :: array |
| call test(array, array) |
| contains |
| subroutine test(arg, assumedRank) |
| real, dimension(5, *) :: arg |
| real, dimension(..) :: assumedRank |
| !ERROR: A dim= argument is required for 'size' when the array is assumed-size |
| print *, size(arg) |
| !ERROR: A dim= argument is required for 'ubound' when the array is assumed-size |
| print *, ubound(arg) |
| !ERROR: The 'source=' argument to the intrinsic function 'shape' may not be assumed-size |
| print *, shape(arg) |
| !ERROR: The 'harvest=' argument to the intrinsic procedure 'random_number' may not be assumed-size |
| call random_number(arg) |
| !ERROR: 'array=' argument has unacceptable rank 0 |
| print *, lbound(scalar) |
| !ERROR: 'array=' argument has unacceptable rank 0 |
| print *, size(scalar) |
| !ERROR: 'array=' argument has unacceptable rank 0 |
| print *, ubound(scalar) |
| !ERROR: DIM=0 dimension must be positive |
| print *, lbound(arg, 0) |
| !ERROR: DIM=0 dimension must be positive |
| print *, lbound(assumedRank, 0) |
| !ERROR: DIM=666 dimension is too large for any array (maximum rank 15) |
| print *, lbound(assumedRank, 666) |
| !ERROR: DIM=0 dimension must be positive |
| print *, ubound(arg, 0) |
| !ERROR: DIM=2 dimension is out of range for rank-2 assumed-size array |
| print *, ubound(arg, 2) |
| !ERROR: DIM=0 dimension must be positive |
| print *, ubound(assumedRank, 0) |
| !ERROR: DIM=666 dimension is too large for any array (maximum rank 15) |
| print *, ubound(assumedRank, 666) |
| select rank(assumedRank) |
| rank(1) |
| !ERROR: DIM=2 dimension is out of range for rank-1 array |
| print *, lbound(assumedRank, dim=2) |
| !ERROR: DIM=2 dimension is out of range for rank-1 array |
| print *, ubound(assumedRank, dim=2) |
| rank(*) |
| !ERROR: A dim= argument is required for 'size' when the array is assumed-size |
| print *, size(assumedRank) |
| !ERROR: A dim= argument is required for 'ubound' when the array is assumed-size |
| print *, ubound(assumedRank) |
| !ERROR: The 'source=' argument to the intrinsic function 'shape' may not be assumed-size |
| print *, shape(assumedRank) |
| !ERROR: The 'harvest=' argument to the intrinsic procedure 'random_number' may not be assumed-size |
| call random_number(assumedRank) |
| !ERROR: DIM=0 dimension must be positive |
| print *, lbound(assumedRank, 0) |
| !ERROR: DIM=0 dimension must be positive |
| print *, ubound(assumedRank, 0) |
| !ERROR: DIM=1 dimension is out of range for rank-1 assumed-size array |
| print *, ubound(assumedRank, 1) |
| !ERROR: DIM=2 dimension is out of range for rank-1 array |
| print *, lbound(assumedRank, dim=2) |
| !ERROR: DIM=2 dimension is out of range for rank-1 array |
| print *, ubound(assumedRank, dim=2) |
| end select |
| ! But these cases are fine: |
| print *, size(arg, dim=1) |
| print *, ubound(arg, dim=1) |
| print *, lbound(arg) |
| print *, size(array) |
| print *, ubound(array) |
| print *, lbound(array) |
| print *, size(arg(:,1)) |
| print *, ubound(arg(:,1)) |
| print *, shape(scalar) |
| print *, shape(arg(:,1)) |
| print *, lbound(assumedRank, dim=2) ! can't check until run time |
| print *, ubound(assumedRank, dim=2) |
| select rank(assumedRank) |
| rank(3) |
| print *, lbound(assumedRank, dim=2) |
| print *, ubound(assumedRank, dim=2) |
| rank(*) |
| print *, lbound(assumedRank, dim=1) |
| rank default |
| print *, lbound(assumedRank, dim=2) |
| print *, ubound(assumedRank, dim=2) |
| end select |
| end subroutine |
| end |