1! { dg-do run }
2!
3! PR fortran/45019
4!
5! Check that the compiler knows that
6! "arg" and "arr" can alias.
7!
8MODULE m
9  IMPLICIT NONE
10  INTEGER, TARGET :: arr(3)
11CONTAINS
12  SUBROUTINE foobar (arg)
13    INTEGER, TARGET :: arg(:)
14    arr(2:3) = arg(1:2)
15  END SUBROUTINE foobar
16END MODULE m
17
18PROGRAM main
19  USE m
20  IMPLICIT NONE
21  arr = (/ 1, 2, 3 /)
22  CALL bar(arr)
23  if (any (arr /= (/ 1, 1, 2 /))) call abort()
24  CALL test()
25contains
26  subroutine bar(x)
27    INTEGER, TARGET :: x(:)
28    CALL foobar (x)
29  end subroutine bar
30END PROGRAM main
31
32MODULE m2
33  IMPLICIT NONE
34  INTEGER, TARGET :: arr(3)
35CONTAINS
36   SUBROUTINE foobar (arg)
37    INTEGER, TARGET :: arg(:)
38    arr(1) = 5
39    arg(1) = 6
40    if (arr(1) == 5) call abort()
41  END SUBROUTINE foobar
42END MODULE m2
43subroutine test
44  USE m2
45  IMPLICIT NONE
46  arr = (/ 1, 2, 3 /)
47  CALL bar(arr)
48contains
49   subroutine bar(x)
50    INTEGER, TARGET :: x(:)
51    CALL foobar (x)
52  end subroutine bar
53END subroutine test
54