File: bindc5.f90

package info (click to toggle)
lfortran 0.59.0-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 56,736 kB
  • sloc: cpp: 168,052; f90: 74,272; python: 17,537; ansic: 7,705; yacc: 2,345; sh: 1,334; fortran: 895; makefile: 37; javascript: 15
file content (37 lines) | stat: -rw-r--r-- 883 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
module thread_data_module_tasks
  use, intrinsic :: iso_c_binding
  implicit none
  type :: thread_data
    type(c_ptr) :: i_ptr
  end type thread_data
end module thread_data_module_tasks

program bindc5
    use thread_data_module_tasks
    use, intrinsic :: iso_c_binding
    implicit none
    integer, target :: i
    integer, pointer :: ptr_i, ptr_i2
    type(thread_data), pointer :: d,d1
    type(thread_data), target :: threadData, taskData
    type(c_ptr) :: threadPtr, taskPtr

    i=0

    threadData%i_ptr = c_loc(i)
    threadPtr = c_loc(threadData)
    call c_f_pointer(threadPtr, d)
    call c_f_pointer(d%i_ptr, ptr_i)

    ptr_i=2

    taskData%i_ptr = d%i_ptr
    taskPtr = c_loc(taskData)
    call c_f_pointer(taskPtr, d1)
    call c_f_pointer(d1%i_ptr, ptr_i2)

    ptr_i2=3

    print*, i,ptr_i2,ptr_i
    if(i/=ptr_i2 .and. i/=ptr_i) error stop
end program bindc5