! { dg-do run } ! { dg-options "-fcoarray=lib -lcaf_single" } ! { dg-additional-options "-latomic" { target libatomic_available } } ! ! Contributed by Andre Vehreschild ! Check that manually freeing components does not lead to a runtime crash, ! when the auto-deallocation is taking care. program coarray_alloc_comp_3 implicit none type dt integer, allocatable :: i end type dt type linktype type(dt), allocatable :: link end type linktype type(linktype), allocatable :: obj[:] allocate(obj[*]) allocate(obj%link) if (.not. allocated(obj)) error stop "Test failed. 'obj' not allocated." if (.not. allocated(obj%link)) error stop "Test failed. 'obj%link' not allocated." if (allocated(obj%link%i)) error stop "Test failed. 'obj%link%i' already allocated." allocate(obj%link%i, source = 42) if (.not. allocated(obj)) error stop "Test failed. 'obj' not allocated." if (.not. allocated(obj%link)) error stop "Test failed. 'obj%link' not allocated." if (.not. allocated(obj%link%i)) error stop "Test failed. 'obj%link%i' not allocated." if (obj%link%i /= 42) error stop "Test failed. obj%link%i /= 42." deallocate(obj%link%i) if (allocated(obj%link%i)) error stop "Test failed. 'obj%link%i' still allocated." if (.not. allocated(obj%link)) error stop "Test failed. 'obj%link' no longer allocated." if (.not. allocated(obj)) error stop "Test failed. 'obj' no longer allocated." ! Freeing this object, lead to crash with older gfortran... deallocate(obj%link) if (allocated(obj%link)) error stop "Test failed. 'obj%link' still allocated." if (.not. allocated(obj)) error stop "Test failed. 'obj' no longer allocated." ! ... when auto-deallocating the allocated components. deallocate(obj) if (allocated(obj)) error stop "Test failed. 'obj' still allocated." end program