46 lines
1.0 KiB
Fortran
46 lines
1.0 KiB
Fortran
! { dg-do compile }
|
|
! Verify that initialization of c_ptr components works. This is based on
|
|
! code from fgsl:
|
|
! http://www.lrz-muenchen.de/services/software/mathematik/gsl/fortran/
|
|
! and tests PR 33395.
|
|
module fgsl
|
|
use, intrinsic :: iso_c_binding
|
|
implicit none
|
|
!
|
|
!
|
|
! Kind and length parameters are default integer
|
|
!
|
|
integer, parameter, public :: fgsl_double = c_double
|
|
|
|
!
|
|
! Types : Array support
|
|
!
|
|
type, public :: fgsl_vector
|
|
private
|
|
type(c_ptr) :: gsl_vector = c_null_ptr
|
|
end type fgsl_vector
|
|
|
|
contains
|
|
function fgsl_vector_align(p_x, f_x)
|
|
real(fgsl_double), pointer :: p_x(:)
|
|
type(fgsl_vector) :: f_x
|
|
integer :: fgsl_vector_align
|
|
fgsl_vector_align = 4
|
|
end function fgsl_vector_align
|
|
end module fgsl
|
|
|
|
module tmod
|
|
use fgsl
|
|
implicit none
|
|
contains
|
|
subroutine expb_df() bind(c)
|
|
type(fgsl_vector) :: f_x
|
|
real(fgsl_double), pointer :: p_x(:)
|
|
integer :: status
|
|
status = fgsl_vector_align(p_x, f_x)
|
|
end subroutine expb_df
|
|
end module tmod
|
|
|
|
! { dg-final { cleanup-modules "fgsl tmod" } }
|
|
|