The following reduced example, based on
http://www.lrz-muenchen.de/services/software/mathematik/gsl/fortran/, gives an
segmentation fault:

fgsl.f90: In function 'fgsl_multifit_fdfsolver_jac':
fgsl.f90:24: internal compiler error: Segmentation fault

valgrind shows:
==21413== Invalid read of size 2
==21413==    at 0x49810A: gfc_trans_structure_assign (trans-expr.c:3179)
     tmp = build3 (COMPONENT_REF, TREE_TYPE (field), dest, field, NULL_TREE);
==21413==    by 0x497FF3: gfc_trans_subcomponent_assign (trans-expr.c:3139)
==21413==    by 0x498142: gfc_trans_structure_assign (trans-expr.c:3180)
==21413==    by 0x4982FE: gfc_conv_structure (trans-expr.c:3207)
==21413==    by 0x494EA0: gfc_trans_assignment_1 (trans-expr.c:4020)
==21413==    by 0x49501B: gfc_trans_assignment (trans-expr.c:4171)
==21413==    by 0x4791CA: gfc_trans_code (trans.c:577)

The crash occurs because field = NULL, which fails when using
"TREE_TYPE(field)".

module fgsl
  use, intrinsic :: iso_c_binding
  implicit none
  type, public :: fgsl_matrix
     private
     type(c_ptr) :: gsl_matrix = c_null_ptr
  end type fgsl_matrix
  type, public :: fgsl_multifit_fdfsolver
     private
     type(c_ptr) :: gsl_multifit_fdfsolver = c_null_ptr
  end type fgsl_multifit_fdfsolver
interface
  function gsl_multifit_fdfsolver_jac(s) bind(c)
    import :: c_ptr
    type(c_ptr), value :: s
    type(c_ptr) :: gsl_multifit_fdfsolver_jac
  end function gsl_multifit_fdfsolver_jac
end interface
contains
  function fgsl_multifit_fdfsolver_jac(s)
    type(fgsl_multifit_fdfsolver), intent(in) :: s
    type(fgsl_matrix) :: fgsl_multifit_fdfsolver_jac
    fgsl_multifit_fdfsolver_jac%gsl_matrix = &
         gsl_multifit_fdfsolver_jac(s%gsl_multifit_fdfsolver)
  end function fgsl_multifit_fdfsolver_jac
end module fgsl


-- 
           Summary: ICE in gfc_trans_structure_assign
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: burnus at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33040

Reply via email to