I’m seeing a difference in Fortran 90 array sections and/or pointers from version 5.2. The following scaled down code snippet demonstrates:

```
PROGRAM main
PARAMETER (n=5)
REAL t(n)
INTERFACE
SUBROUTINE sub(n, t)
INTEGER :: n
REAL :: t(:)
END SUBROUTINE
END INTERFACE
DO i = 1,n
t(i) = FLOAT(i)
WRITE(*,"('MAIN T(',i1,') = ',F4.1)") i,t(i)
ENDDO
CALL sub(n, t(:))
END
SUBROUTINE sub(n, p_t)
REAL, POINTER :: t(:)
REAL, TARGET :: p_t(:)
t => p_t
DO i = 1,n
WRITE(*,"('SUB T(',i1,') = ',F4.1)") i,t(i)
ENDDO
END
```

5.2 output:

MAIN T(1) = 1.0

MAIN T(2) = 2.0

MAIN T(3) = 3.0

MAIN T(4) = 4.0

MAIN T(5) = 5.0

SUB T(1) = 1.0

SUB T(2) = 2.0

SUB T(3) = 3.0

SUB T(4) = 4.0

SUB T(5) = 5.0

6.0 output:

MAIN T(1) = 1.0

MAIN T(2) = 2.0

MAIN T(3) = 3.0

MAIN T(4) = 4.0

MAIN T(5) = 5.0

SUB T(1) = 2.0

SUB T(2) = 3.0

SUB T(3) = 4.0

SUB T(4) = 5.0

SUB T(5) = 0.0

The 6.0 output is shifted by one. It seems to be assuming zero-based array indexing on the pointer.

Calling the subroutine without specifying an array section works. Example:

```
CALL sub(n, t)
```

My real code is passing a 2d array section extracted from a 3d array to a subroutine using pointers, so this isn’t an option.

Suggestions?

Thanks,

Josh