xref: /llvm-project/flang/test/Semantics/misc-intrinsics.f90 (revision bf4a876309cdc73e3907801abba02d2f1d2d7b6e)
17ff92082Speter klausler! RUN: %python %S/test_errors.py %s %flang_fc1
27ff92082Speter klausler! Miscellaneous constraint and requirement checking on intrinsics
37ff92082Speter klauslerprogram test_size
4c6ec6e30SPeter Klausler  real :: scalar
57ff92082Speter klausler  real, dimension(5, 5) :: array
6755180cfSPeter Klausler  call test(array, array)
77ff92082Speter klausler contains
8755180cfSPeter Klausler  subroutine test(arg, assumedRank)
97ff92082Speter klausler    real, dimension(5, *) :: arg
10755180cfSPeter Klausler    real, dimension(..) :: assumedRank
117ff92082Speter klausler    !ERROR: A dim= argument is required for 'size' when the array is assumed-size
127ff92082Speter klausler    print *, size(arg)
13*bf4a8763SPeter Klausler    !ERROR: A dim= argument is required for 'ubound' when the array is assumed-size
147ff92082Speter klausler    print *, ubound(arg)
157ff92082Speter klausler    !ERROR: The 'source=' argument to the intrinsic function 'shape' may not be assumed-size
167ff92082Speter klausler    print *, shape(arg)
172107fe38SPeter Klausler    !ERROR: The 'harvest=' argument to the intrinsic procedure 'random_number' may not be assumed-size
182107fe38SPeter Klausler    call random_number(arg)
19*bf4a8763SPeter Klausler    !ERROR: 'array=' argument has unacceptable rank 0
20c6ec6e30SPeter Klausler    print *, lbound(scalar)
21c6ec6e30SPeter Klausler    !ERROR: 'array=' argument has unacceptable rank 0
22c6ec6e30SPeter Klausler    print *, size(scalar)
23*bf4a8763SPeter Klausler    !ERROR: 'array=' argument has unacceptable rank 0
24c6ec6e30SPeter Klausler    print *, ubound(scalar)
25221ba64eSPeter Klausler    !ERROR: DIM=0 dimension must be positive
26221ba64eSPeter Klausler    print *, lbound(arg, 0)
27221ba64eSPeter Klausler    !ERROR: DIM=0 dimension must be positive
28221ba64eSPeter Klausler    print *, lbound(assumedRank, 0)
29221ba64eSPeter Klausler    !ERROR: DIM=666 dimension is too large for any array (maximum rank 15)
30221ba64eSPeter Klausler    print *, lbound(assumedRank, 666)
31221ba64eSPeter Klausler    !ERROR: DIM=0 dimension must be positive
32221ba64eSPeter Klausler    print *, ubound(arg, 0)
33221ba64eSPeter Klausler    !ERROR: DIM=2 dimension is out of range for rank-2 assumed-size array
34221ba64eSPeter Klausler    print *, ubound(arg, 2)
35221ba64eSPeter Klausler    !ERROR: DIM=0 dimension must be positive
36221ba64eSPeter Klausler    print *, ubound(assumedRank, 0)
37221ba64eSPeter Klausler    !ERROR: DIM=666 dimension is too large for any array (maximum rank 15)
38221ba64eSPeter Klausler    print *, ubound(assumedRank, 666)
39755180cfSPeter Klausler    select rank(assumedRank)
40755180cfSPeter Klausler    rank(1)
41755180cfSPeter Klausler      !ERROR: DIM=2 dimension is out of range for rank-1 array
42755180cfSPeter Klausler      print *, lbound(assumedRank, dim=2)
43755180cfSPeter Klausler      !ERROR: DIM=2 dimension is out of range for rank-1 array
44755180cfSPeter Klausler      print *, ubound(assumedRank, dim=2)
454fed5959SPeter Klausler    rank(*)
464fed5959SPeter Klausler      !ERROR: A dim= argument is required for 'size' when the array is assumed-size
474fed5959SPeter Klausler      print *, size(assumedRank)
48*bf4a8763SPeter Klausler      !ERROR: A dim= argument is required for 'ubound' when the array is assumed-size
494fed5959SPeter Klausler      print *, ubound(assumedRank)
504fed5959SPeter Klausler      !ERROR: The 'source=' argument to the intrinsic function 'shape' may not be assumed-size
514fed5959SPeter Klausler      print *, shape(assumedRank)
524fed5959SPeter Klausler      !ERROR: The 'harvest=' argument to the intrinsic procedure 'random_number' may not be assumed-size
534fed5959SPeter Klausler      call random_number(assumedRank)
544fed5959SPeter Klausler      !ERROR: DIM=0 dimension must be positive
554fed5959SPeter Klausler      print *, lbound(assumedRank, 0)
564fed5959SPeter Klausler      !ERROR: DIM=0 dimension must be positive
574fed5959SPeter Klausler      print *, ubound(assumedRank, 0)
584fed5959SPeter Klausler      !ERROR: DIM=1 dimension is out of range for rank-1 assumed-size array
594fed5959SPeter Klausler      print *, ubound(assumedRank, 1)
604fed5959SPeter Klausler      !ERROR: DIM=2 dimension is out of range for rank-1 array
614fed5959SPeter Klausler      print *, lbound(assumedRank, dim=2)
624fed5959SPeter Klausler      !ERROR: DIM=2 dimension is out of range for rank-1 array
634fed5959SPeter Klausler      print *, ubound(assumedRank, dim=2)
64755180cfSPeter Klausler    end select
657ff92082Speter klausler    ! But these cases are fine:
667ff92082Speter klausler    print *, size(arg, dim=1)
677ff92082Speter klausler    print *, ubound(arg, dim=1)
687ff92082Speter klausler    print *, lbound(arg)
697ff92082Speter klausler    print *, size(array)
707ff92082Speter klausler    print *, ubound(array)
717ff92082Speter klausler    print *, lbound(array)
72b6fce8b9SPeter Klausler    print *, size(arg(:,1))
73b6fce8b9SPeter Klausler    print *, ubound(arg(:,1))
74c6ec6e30SPeter Klausler    print *, shape(scalar)
75b6fce8b9SPeter Klausler    print *, shape(arg(:,1))
76755180cfSPeter Klausler    print *, lbound(assumedRank, dim=2) ! can't check until run time
77755180cfSPeter Klausler    print *, ubound(assumedRank, dim=2)
78755180cfSPeter Klausler    select rank(assumedRank)
79755180cfSPeter Klausler    rank(3)
80755180cfSPeter Klausler      print *, lbound(assumedRank, dim=2)
81755180cfSPeter Klausler      print *, ubound(assumedRank, dim=2)
824fed5959SPeter Klausler    rank(*)
834fed5959SPeter Klausler      print *, lbound(assumedRank, dim=1)
84755180cfSPeter Klausler    rank default
85755180cfSPeter Klausler      print *, lbound(assumedRank, dim=2)
86755180cfSPeter Klausler      print *, ubound(assumedRank, dim=2)
87755180cfSPeter Klausler    end select
887ff92082Speter klausler  end subroutine
897ff92082Speter klauslerend
90