[Bug fortran/44155] New: gfortran segmentation fault using iso_c_binding

whalen at cray dot com gcc-bugzilla@gcc.gnu.org
Sun May 16 05:13:00 GMT 2010


gfortran encounters a segfault when trying to compile a standalone file. The
source file itself appears at the end of this comment. But first, the gfortran
behavior

users/whalen> gfortran -v -save-temps test.f90
Driving: gfortran -v -save-temps test.f90 -lgfortran -lm -shared-libgcc
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=gcc/dev/20100515/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.6.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../../src/gcc-dev/configure --prefix=gcc/dev/20100515/
--with-gmp=gmp/4.3.2/ --with-mpfr=mpfr/2.4.2/ --with-mpc=mpc/0.8.1/
--with-ppl=ppl/0.10.2/ --with-cloog=cloog/0.15.9/
--enable-languages=fortran,c,c++ --enable-lto --with-libelf=libelf/0.8.13
Thread model: posix
gcc version 4.6.0 20100516 (experimental) [trunk revision 159450] (GCC) 
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-shared-libgcc' '-mtune=generic'
'-march=x86-64'
 gcc/dev/20100515/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.6.0/f951
test.f90 -quiet -dumpbase test.f90 -mtune=generic -march=x86-64 -auxbase test
-version -fintrinsic-modules-path
gcc/dev/20100515/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.6.0/finclude -o
test.s
GNU Fortran (GCC) version 4.6.0 20100516 (experimental) [trunk revision 159450]
(x86_64-unknown-linux-gnu)
        compiled by GNU C version 4.6.0 20100516 (experimental) [trunk revision
159450], GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.1
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
GNU Fortran (GCC) version 4.6.0 20100516 (experimental) [trunk revision 159450]
(x86_64-unknown-linux-gnu)
        compiled by GNU C version 4.6.0 20100516 (experimental) [trunk revision
159450], GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.1
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
test.f90: In function ‘tetgenf’:
test.f90:125:0: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.


users/whalen> cat test.f90
module mod_tetgen

  use iso_c_binding

  implicit none

  type tetgenpolygon
     logical :: initialized = .false.
     integer :: numberofvertices = 0
     integer, pointer :: vertexlist(:)
  end type tetgenpolygon

  type tetgenfacet
     logical :: initialized = .false.
     integer :: numberofpolygons = 0
     type(tetgenpolygon), pointer :: polygonlist(:)
     integer :: numberofholes = 0
     double precision, pointer :: holelist(:,:)
  end type tetgenfacet

  type tetgenio
     logical :: initialized = .false.
     integer :: handle = -1
     integer :: numberofpoints = 0
     double precision, pointer :: pointlist(:,:)
     integer :: numberoffacets = 0
     type(tetgenfacet), pointer :: facetlist(:)
     integer,           pointer :: facetmarkerlist(:)
  end type tetgenio

  interface
     subroutine tetcall &
          (inhandle, outhandle, numberofpoints, pointlist, &
          numberoffacets, numberofpolygons, numberofholes, &
          facetmarkerlist, vertexliststarts, vertexlistvals, &
          numberofoutpoints, outpointlist, numberofoutfacets) &
          bind(c)
       use iso_c_binding
       implicit none
       integer(c_int), value :: inhandle
       integer(c_int), value :: outhandle
       integer(c_int), value :: numberofpoints
       type(c_ptr), value    :: pointlist
       integer(c_int), value :: numberoffacets
       type(c_ptr), value    :: numberofpolygons
       type(c_ptr), value    :: numberofholes
       type(c_ptr), value    :: facetmarkerlist
       type(c_ptr), value    :: vertexliststarts, vertexlistvals
       integer(c_int)        :: numberofoutpoints
       type(c_ptr)           :: outpointlist
       integer(c_int)        :: numberofoutfacets
     end subroutine tetcall
  end interface

contains

  subroutine tetgenf( in, out )

    implicit none

    !-- Transferred variables
    type(tetgenio), target, intent(in)    :: in
    type(tetgenio), target, intent(inout) :: out

    !-- Local variables
    integer ppos, vpos
    integer f, p, v
    type(tetgenfacet),   pointer :: pfacet
    type(tetgenpolygon), pointer :: ppoly
    integer, allocatable, target :: npolylist(:), nholelist(:)
    integer, allocatable, target :: vertexliststarts(:), vertexlistvals(:)
    integer inhandle, outhandle
    type(c_ptr) c_outpointlist

    allocate(npolylist(in%numberoffacets))
    allocate(nholelist(in%numberoffacets))

    ppos = 1
    vpos = 1

    do f = 1, in%numberoffacets
       pfacet => in%facetlist(f)
       do p = 1, pfacet%numberofpolygons
          ppoly => pfacet%polygonlist(p)
          do v = 1, ppoly%numberofvertices
             vpos = vpos + 1
          end do
          ppos = ppos + 1
       end do
    end do

    allocate(vertexliststarts(ppos), vertexlistvals(vpos-1))

    ppos = 1
    vpos = 1

    do f = 1, in%numberoffacets
       pfacet => in%facetlist(f)
       npolylist(f) = pfacet%numberofpolygons
       nholelist(f) = pfacet%numberofholes
       do p = 1, pfacet%numberofpolygons
          vertexliststarts(ppos) = vpos
          ppoly => pfacet%polygonlist(p)
          do v = 1, ppoly%numberofvertices
             vertexlistvals(vpos) = ppoly%vertexlist(v)
             vpos = vpos + 1
          end do
          ppos = ppos + 1
       end do
    end do

    vertexliststarts(ppos) = vpos

    call tetnew(inhandle)
    call tetnew(outhandle)
    call tetcall(inhandle, outhandle,     &
         in%numberofpoints,  &
         c_loc(in%pointlist), &
         in%numberoffacets,  &
         c_loc(npolylist),   &
         c_loc(nholelist),          &
         c_loc(in%facetmarkerlist), &
         c_loc(vertexliststarts), c_loc(vertexlistvals), &
         out%numberofpoints, c_outpointlist, &
         out%numberoffacets)

    call tetfree(inhandle)

    out%initialized = .true.
    out%handle = outhandle
    call c_f_pointer(cptr=c_outpointlist, fptr=out%pointlist, &
         shape=(/ 3, out%numberofpoints /))

    deallocate(vertexliststarts, vertexlistvals)
    deallocate(npolylist, nholelist)

  end subroutine tetgenf


end module mod_tetgen


-- 
           Summary: gfortran segmentation fault using iso_c_binding
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: whalen at cray dot com
 GCC build triplet: x86_64-unknown-linux-gnu
  GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu


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



More information about the Gcc-bugs mailing list