! PR middle-end/43866 ! { dg-do run } ! { dg-options "-funswitch-loops -fbounds-check" } MODULE PR43866 IMPLICIT NONE TYPE TT REAL(KIND=4), DIMENSION(:,:), POINTER :: A REAL(KIND=8), DIMENSION(:,:), POINTER :: B END TYPE CONTAINS SUBROUTINE FOO(M,X,Y,T) TYPE(TT), POINTER :: M INTEGER, INTENT(IN) :: Y, X INTEGER :: C, D LOGICAL :: T REAL(KIND = 4), DIMENSION(:,:), POINTER :: P REAL(KIND = 8), DIMENSION(:,:), POINTER :: Q Q => M%B P => M%A DO C=1,X DO D=C+1,Y IF (T) THEN P(D,C)=P(C,D) ELSE Q(D,C)=Q(C,D) ENDIF ENDDO ENDDO END SUBROUTINE FOO END MODULE PR43866 USE PR43866 TYPE(TT), POINTER :: Q INTEGER, PARAMETER :: N=17 ALLOCATE (Q) NULLIFY (Q%A) ALLOCATE (Q%B(N,N)) Q%B=0 CALL FOO (Q,N,N,.FALSE.) END