http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59765
--- Comment #4 from janus at gcc dot gnu.org --- I think what happens is something like the following: generate_finalization_wrapper currently produces code like this on the test case: type(mtd), pointer :: ptr deallocate(ptr%u(:)%c) This is certainly wrong. Feeding it back to gfortran yields: deallocate(ptr%u%c) 1 Error: Component to the right of a part reference with nonzero rank must not have the ALLOCATABLE attribute at (1) For the test case here it is sufficient to just use deallocate(ptr%u(1)%c) but for longer arrays we need to generate a loop: do i=... deallocate(ptr%u(i)%c) end do