1! { dg-do compile }
2! { dg-options "-std=f2003 -fdump-tree-original" }
3
4! PR fortran/38936
5! Check that array expression association (with correct bounds) works for
6! complicated expressions.
7
8! Contributed by Daniel Kraft, d@domob.eu.
9
10MODULE m
11  IMPLICIT NONE
12
13CONTAINS
14
15  PURE FUNCTION func (n)
16    INTEGER, INTENT(IN) :: n
17    INTEGER :: func(2 : n+1)
18
19    INTEGER :: i
20
21    func = (/ (i, i = 1, n) /)
22  END FUNCTION func
23
24END MODULE m
25
26PROGRAM main
27  USE :: m
28  IMPLICIT NONE
29
30  ASSOCIATE (arr => func (4))
31    ! func should only be called once here, not again for the bounds!
32
33    IF (LBOUND (arr, 1) /= 1 .OR. UBOUND (arr, 1) /= 4) CALL abort ()
34    IF (arr(1) /= 1 .OR. arr(4) /= 4) CALL abort ()
35  END ASSOCIATE
36END PROGRAM main
37! { dg-final { scan-tree-dump-times "func" 2 "original" } }
38! { dg-final { cleanup-tree-dump "original" } }
39