https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86760
janus at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |janus at gcc dot gnu.org --- Comment #3 from janus at gcc dot gnu.org --- Further reduced test case: MODULE test_nesting_mod IMPLICIT NONE TYPE :: test_obj1 CONTAINS PROCEDURE :: destroy END TYPE TYPE :: obj_ptr CLASS(test_obj1), POINTER :: f => NULL() END TYPE TYPE :: obj_container TYPE(obj_ptr), POINTER, DIMENSION(:) :: v => NULL() END TYPE CONTAINS SUBROUTINE destroy(self) CLASS(test_obj1), INTENT(INOUT) :: self WRITE(*,*)'Obj1' END SUBROUTINE SUBROUTINE container_destroy(self) type(obj_container), INTENT(INOUT) :: self INTEGER :: i DO i=1,ubound(self%v,1) CALL self%v(i)%f%destroy() END DO END SUBROUTINE END MODULE PROGRAM test_nesting_ptr USE test_nesting_mod IMPLICIT NONE INTEGER :: i INTEGER, PARAMETER :: n = 2 TYPE(obj_container) :: var ALLOCATE(var%v(n)) DO i=1,n ALLOCATE(test_obj1::var%v(i)%f) END DO CALL container_destroy(var) END This one does not always segfault, but when compiled with trunk and -O3, valgrind reliably shows the error: ==24015== Invalid read of size 8 ==24015== at 0x400989: __test_nesting_mod_MOD_container_destroy (test.f90:27) ==24015== by 0x40075C: test_nesting_ptr (test.f90:45) ==24015== by 0x40075C: main (test.f90:35) When compiled with gfortran 8 and -O3, valgrind only shows: ==24605== Use of uninitialised value of size 8 ==24605== at 0x108B65: __test_nesting_mod_MOD_container_destroy (test.f90:27) ==24605== by 0x108912: test_nesting_ptr (test.f90:45) ==24605== by 0x108912: main (test.f90:35) When compiled with gfortran 7, valgrind shows no errors. Both errors above reference the line where 'destroy' is called.