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