https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80361
--- Comment #10 from Dominique d'Humieres <dominiq at lps dot ens.fr> --- If I remove the final stuff in unit_tests.f90, --- unit_tests_orig.f90 2017-04-08 16:16:57.000000000 +0200 +++ unit_tests.f90 2017-04-08 16:17:20.000000000 +0200 @@ -72,7 +72,6 @@ module unit_tests procedure, private :: add => test_results_add procedure, private :: write => test_results_write procedure, private :: report => test_results_report - procedure, private :: final => test_results_final procedure :: wrapup => test_results_wrapup end type test_results_t @@ -144,26 +143,12 @@ contains success = list%n_failure == 0 end subroutine test_results_report - subroutine test_results_final (list) - class(test_results_t), intent(inout) :: list - type(test_result_t), pointer :: result - do while (associated (list%first)) - result => list%first - list%first => result%next - deallocate (result) - end do - list%last => null () - list%n_success = 0 - list%n_failure = 0 - end subroutine test_results_final - subroutine test_results_wrapup (list, u, success) class(test_results_t), intent(inout) :: list integer, intent(in) :: u logical, intent(out), optional :: success call list%write (u) if (present (success)) call list%report (success) - call list%final () end subroutine test_results_wrapup subroutine test (test_proc, name, description, u_log, results) I still get with a clean make Fortran runtime error: Recursive call to nonrecursive procedure '__final_particle_specifiers_Prt_spec_list_t' This seems buggy unless I am missing something(?).