blob: 0cd49087f63faf6163652ccd7d702314cd9787b1 [file] [log] [blame]
! { dg-do run }
! Test the fix for PR47517
!
! Reported by Tobias Burnus <burnus@gcc.gnu.org>
! from a testcase by James Van Buskirk
module mytypes
implicit none
type label
integer, allocatable :: parts(:)
end type label
type table
type(label), allocatable :: headers(:)
end type table
end module mytypes
program allocate_assign
use mytypes
implicit none
integer, parameter :: ik8 = selected_int_kind(18)
type(table) x1(2)
type(table) x2(3)
type(table), allocatable :: x(:)
integer i, j, k
integer(ik8) s
call foo
s = 0
do k = 1, 10000
x = x1
s = s+x(2)%headers(2)%parts(2)
x = x2
s = s+x(2)%headers(2)%parts(2)
end do
if (s .ne. 40000) STOP 1
contains
!
! TODO - these assignments lose 1872 bytes on x86_64/FC17
! This is PR38319
!
subroutine foo
x1 = [table([(label([(j,j=1,3)]),i=1,3)]), &
table([(label([(j,j=1,4)]),i=1,4)])]
x2 = [table([(label([(j,j=1,4)]),i=1,4)]), &
table([(label([(j,j=1,5)]),i=1,5)]), &
table([(label([(j,j=1,6)]),i=1,6)])]
end subroutine
end program allocate_assign