1! PR middle-end/43866
2! { dg-do run }
3! { dg-options "-funswitch-loops -fbounds-check" }
4
5MODULE PR43866
6  IMPLICIT NONE
7  TYPE TT
8    REAL(KIND=4), DIMENSION(:,:), POINTER :: A
9    REAL(KIND=8), DIMENSION(:,:), POINTER :: B
10  END TYPE
11CONTAINS
12  SUBROUTINE FOO(M,X,Y,T)
13    TYPE(TT), POINTER :: M
14    INTEGER, INTENT(IN) :: Y, X
15    INTEGER :: C, D
16    LOGICAL :: T
17    REAL(KIND = 4), DIMENSION(:,:), POINTER :: P
18    REAL(KIND = 8), DIMENSION(:,:), POINTER :: Q
19
20    Q => M%B
21    P => M%A
22    DO C=1,X
23      DO D=C+1,Y
24        IF (T) THEN
25          P(D,C)=P(C,D)
26        ELSE
27          Q(D,C)=Q(C,D)
28        ENDIF
29      ENDDO
30    ENDDO
31  END SUBROUTINE FOO
32END MODULE PR43866
33
34  USE PR43866
35  TYPE(TT), POINTER :: Q
36  INTEGER, PARAMETER :: N=17
37  ALLOCATE (Q)
38  NULLIFY (Q%A)
39  ALLOCATE (Q%B(N,N))
40  Q%B=0
41  CALL FOO (Q,N,N,.FALSE.)
42END
43