MODULE ListModule IMPLICIT NONE TYPE ListElem REAL :: value; TYPE(ListElem), POINTER :: next; END TYPE ListElem CONTAINS ATTRIBUTES(DEVICE) SUBROUTINE InsertList(head, elem) IMPLICIT NONE type( ListElem ), pointer :: head, elem elem%next => head END SUBROUTINE InsertList END MODULE MODULE Test CONTAINS ATTRIBUTES(GLOBAL) SUBROUTINE KERNEL() USE ListModule IMPLICIT NONE type( ListElem ), pointer :: head type( ListElem ), pointer :: newElem, h integer :: i,N = 4 INTEGER(KIND=4),ALLOCATABLE::ND(:) allocate( newElem ) allocate( head ) newElem%value=1 head%value=2 PRINT*,newElem%value call InsertList(head, newElem) PRINT*,newElem%next%value End subroutine END MODULE Test PROGRAM LinkedList USE TEST USE CUDAFOR integer :: N CALL KERNEL<<<1,1>>>() N=cudaDeviceSynchronize() END PROGRAM LinkedList