The code is iterating on the rank of the pointer to set the bounds.
If the rank is retrieved after the pointer = target it does not
reflect the actual rank of the pointer.
This could happen in code like the following:
type t1 integer :: a end type type(t), pointer :: p(:) class(t), pointer :: q(:,:) q(0:1,-2:2) => p(10:1:-1)