1! { dg-do compile }
2! { dg-options "-O0 -fdump-tree-original" }
3!
4! PR fortran/56136
5! ICE on defined assignment with class arrays.
6!
7! Original testcase by Alipasha <alipash.celeris@gmail.com>
8
9      MODULE A_TEST_M
10        TYPE :: A_TYPE
11          INTEGER :: I
12          CONTAINS
13          GENERIC :: ASSIGNMENT (=) => ASGN_A
14          PROCEDURE, PRIVATE :: ASGN_A
15        END TYPE
16
17        CONTAINS
18
19        ELEMENTAL SUBROUTINE ASGN_A (A, B)
20          CLASS (A_TYPE), INTENT (INOUT) :: A
21          CLASS (A_TYPE), INTENT (IN) :: B
22          A%I = B%I
23        END SUBROUTINE
24      END MODULE A_TEST_M
25
26      PROGRAM ASGN_REALLOC_TEST
27        USE A_TEST_M
28        TYPE (A_TYPE), ALLOCATABLE :: A(:)
29        INTEGER :: I, J
30
31        ALLOCATE (A(100))
32        A = (/ (A_TYPE(I), I=1,SIZE(A)) /)
33        A(1:50) = A(51:100)
34        IF (ANY(A%I /= (/ ((50+I, I=1,SIZE(A)/2), J=1,2) /))) STOP 1
35        A(::2) = A(1:50)        ! pack/unpack
36        IF (ANY(A( ::2)%I /= (/ (50+I, I=1,SIZE(A)/2) /))) STOP 2
37        IF (ANY(A(2::2)%I /= (/ ((50+2*I, I=1,SIZE(A)/4), J=1,2) /))) STOP 3
38      END PROGRAM
39
40! { dg-final { scan-tree-dump-times "_gfortran_internal_pack" 1 "original" } }
41! { dg-final { scan-tree-dump-times "_gfortran_internal_unpack" 1 "original" } }
42
43