1! { dg-do compile } 2! Test the fix for PR48456 and PR48360 in which the backend 3! declarations for components were not located in the automatic 4! reallocation on assignments, thereby causing ICEs. 5! 6! Contributed by Keith Refson <krefson@googlemail.com> 7! and Douglas Foulds <mixnmaster@gmail.com> 8! 9! This is PR48360 10 11module m 12 type mm 13 real, dimension(3,3) :: h0 14 end type mm 15end module m 16 17module gf33 18 19 real, allocatable, save, dimension(:,:) :: hmat 20 21contains 22 subroutine assignit 23 24 use m 25 implicit none 26 27 type(mm) :: mmv 28 29 hmat = mmv%h0 30 end subroutine assignit 31end module gf33 32 33! This is PR48456 34 35module custom_type 36 37integer, parameter :: dp = kind(0.d0) 38 39type :: my_type_sub 40 real(dp), dimension(5) :: some_vector 41end type my_type_sub 42 43type :: my_type 44 type(my_type_sub) :: some_element 45end type my_type 46 47end module custom_type 48 49module custom_interfaces 50 51interface 52 subroutine store_data_subroutine(vec_size) 53 implicit none 54 integer, intent(in) :: vec_size 55 integer :: k 56 end subroutine store_data_subroutine 57end interface 58 59end module custom_interfaces 60 61module store_data_test 62 63use custom_type 64 65save 66type(my_type), dimension(:), allocatable :: some_type_to_save 67 68end module store_data_test 69 70program test 71 72use store_data_test 73 74integer :: vec_size 75 76vec_size = 2 77 78call store_data_subroutine(vec_size) 79call print_after_transfer() 80 81end program test 82 83subroutine store_data_subroutine(vec_size) 84 85use custom_type 86use store_data_test 87 88implicit none 89 90integer, intent(in) :: vec_size 91integer :: k 92 93allocate(some_type_to_save(vec_size)) 94 95do k = 1,vec_size 96 97 some_type_to_save(k)%some_element%some_vector(1) = 1.0_dp 98 some_type_to_save(k)%some_element%some_vector(2) = 2.0_dp 99 some_type_to_save(k)%some_element%some_vector(3) = 3.0_dp 100 some_type_to_save(k)%some_element%some_vector(4) = 4.0_dp 101 some_type_to_save(k)%some_element%some_vector(5) = 5.0_dp 102 103end do 104 105end subroutine store_data_subroutine 106 107subroutine print_after_transfer() 108 109use custom_type 110use store_data_test 111 112implicit none 113 114real(dp), dimension(:), allocatable :: C_vec 115integer :: k 116 117allocate(C_vec(5)) 118 119do k = 1,size(some_type_to_save) 120 121 C_vec = some_type_to_save(k)%some_element%some_vector 122 print *, "C_vec", C_vec 123 124end do 125 126end subroutine print_after_transfer 127