xref: /llvm-project/flang/test/Semantics/dim01.f90 (revision 1c91d9bdea3b6c38e8fbce46ec8181a9c0aa26f8)
1! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic
2! Test warnings and errors about DIM= arguments to transformational intrinsics
3
4module m
5 contains
6  function f0a(a)
7    real, intent(in) :: a(:)
8    !ERROR: The value of DIM= (-1) may not be less than 1
9    f0a = sum(a,dim=-1)
10  end function
11  function f0b(a)
12    real, intent(in) :: a(:)
13    !ERROR: The value of DIM= (2) may not be greater than 1
14    f0b = sum(a,dim=2)
15  end function
16  function f1(a,d)
17    real, intent(in) :: a(:)
18    integer, optional, intent(in) :: d
19    !PORTABILITY: The actual argument for DIM= is optional, pointer, or allocatable, and it is assumed to be present and equal to 1 at execution time
20    f1 = sum(a,dim=d)
21    !PORTABILITY: The actual argument for DIM= is optional, pointer, or allocatable, and it is assumed to be present and equal to 1 at execution time
22    f1 = norm2(a,dim=d)
23  end function
24  function f2(a,d)
25    real, intent(in) :: a(:)
26    integer, pointer, intent(in) :: d
27    !PORTABILITY: The actual argument for DIM= is optional, pointer, or allocatable, and it is assumed to be present and equal to 1 at execution time
28    f2 = sum(a,dim=d)
29  end function
30  function f3(a,d)
31    real, intent(in) :: a(:)
32    integer, allocatable, intent(in) :: d
33    !PORTABILITY: The actual argument for DIM= is optional, pointer, or allocatable, and it is assumed to be present and equal to 1 at execution time
34    f3 = sum(a,dim=d)
35  end function
36  function f10a(a)
37    real, intent(in) :: a(:,:)
38    real, allocatable :: f10a(:)
39    !ERROR: The value of DIM= (-1) may not be less than 1
40    f10a = sum(a,dim=-1)
41  end function
42  function f10b(a)
43    real, intent(in) :: a(:,:)
44    real, allocatable :: f10b(:)
45    !ERROR: The value of DIM= (3) may not be greater than 2
46    f10b = sum(a,dim=3)
47  end function
48  function f11(a,d)
49    real, intent(in) :: a(:,:)
50    integer, optional, intent(in) :: d
51    real, allocatable :: f11(:)
52    !WARNING: The actual argument for DIM= is optional, pointer, or allocatable, and may not be absent during execution; parenthesize to silence this warning
53    f11 = sum(a,dim=d)
54    !WARNING: The actual argument for DIM= is optional, pointer, or allocatable, and may not be absent during execution; parenthesize to silence this warning
55    f11 = norm2(a,dim=d)
56  end function
57  function f12(a,d)
58    real, intent(in) :: a(:,:)
59    integer, pointer, intent(in) :: d
60    real, allocatable :: f12(:)
61    !WARNING: The actual argument for DIM= is optional, pointer, or allocatable, and may not be absent during execution; parenthesize to silence this warning
62    f12 = sum(a,dim=d)
63  end function
64  function f13(a,d)
65    real, intent(in) :: a(:,:)
66    integer, allocatable, intent(in) :: d
67    real, allocatable :: f13(:)
68    !WARNING: The actual argument for DIM= is optional, pointer, or allocatable, and may not be absent during execution; parenthesize to silence this warning
69    f13 = sum(a,dim=d)
70  end function
71end module
72