! { dg-do compile }
! { dg-options "-fdump-tree-original" }
!
! PR fortran/43042 - fix ICE with c_null_ptr when using
! -fwhole-file (or -flto, which implies -fwhole-file).
!
! Testcase based on c_ptr_tests_14.f90  (PR fortran/41298)
! Check that c_null_ptr default initializer is really applied

module m
  use iso_c_binding
  type, public :: fgsl_file
     type(c_ptr)    :: gsl_file = c_null_ptr
     type(c_funptr) :: gsl_func = c_null_funptr
     type(c_ptr)    :: NIptr
     type(c_funptr) :: NIfunptr
  end type fgsl_file
contains
  subroutine sub(aaa,bbb)
    type(fgsl_file), intent(out)   :: aaa
    type(fgsl_file), intent(inout) :: bbb
  end subroutine
  subroutine proc() bind(C)
  end subroutine proc
end module m

program test
  use m
  implicit none
  type(fgsl_file) :: file, noreinit
  integer, target :: tgt

  call sub(file, noreinit)
  if(c_associated(file%gsl_file)) STOP 1
  if(c_associated(file%gsl_func)) STOP 2

  file%gsl_file = c_loc(tgt)
  file%gsl_func = c_funloc(proc)
  call sub(file, noreinit)
  if(c_associated(file%gsl_file)) STOP 3
  if(c_associated(file%gsl_func)) STOP 4
end program test

! { dg-final { scan-tree-dump-times "c_funptr.\[0-9\]+ = 0B;" 1 "original" } }
! { dg-final { scan-tree-dump-times "fgsl_file.\[0-9\]+.gsl_func = c_funptr.\[0-9\]+;" 1 "original" } }
! { dg-final { scan-tree-dump-times "c_ptr.\[0-9\]+ = 0B;" 1 "original" } }
! { dg-final { scan-tree-dump-times "fgsl_file.\[0-9\]+.gsl_file = c_ptr.\[0-9\]+;" 1 "original" } }

! { dg-final { scan-tree-dump-times "NIptr = 0B"    0 "original" } }
! { dg-final { scan-tree-dump-times "NIfunptr = 0B" 0 "original" } }

! { dg-final { scan-tree-dump-times "bbb =" 0 "original" } }

