CPtrToPointer¶
Associtates a data pointer with the target of a C pointer and specifies its
shape, a stmt node.
Declaration¶
Syntax¶
CPtrToPointer(expr cptr, expr ptr, expr? shape)
Arguments¶
cptr contains the C address of an interoperable data entity, or the result of
a reference to function C_LOC with a noninteroperable argument. If the value
of cptr is the C address of a Fortran varible, it must have the TARGET
attribute.
ptr contains data pointer. If it is an array, shape must be specified.
shape is of type integer and rank one. Its size equals the rank of ptr.
Return values¶
None.
Description¶
CPtrToPointer is the statement node for conversion from C pointer to data pointer.
If the ptr is an array, it has the shape specified by shape and each lower
bound is 1.
Types¶
cptr and ptr should be of type pointer holding an address.
shape must be of type integer.
Examples¶
program bindc
use iso_c_binding, only: c_loc, c_ptr, c_f_pointer
type(c_ptr) :: queries
integer :: idx = 1
integer(2), pointer :: x
integer(2), target :: y
call c_f_pointer(queries, x)
print *, c_loc(x), queries
x => y
print *, c_loc(x), c_loc(y)
end program
ASR:
(TranslationUnit
(SymbolTable
1
{
bindc:
(Program
(SymbolTable
2
{
c_f_pointer:
(ExternalSymbol
2
c_f_pointer
4 c_f_pointer
lfortran_intrinsic_iso_c_binding
[]
c_f_pointer
Public
),
c_loc:
(ExternalSymbol
2
c_loc
4 c_loc
lfortran_intrinsic_iso_c_binding
[]
c_loc
Public
),
c_ptr:
(ExternalSymbol
2
c_ptr
4 c_ptr
lfortran_intrinsic_iso_c_binding
[]
c_ptr
Public
),
idx:
(Variable
2
idx
Local
(IntegerConstant 1 (Integer 4 []))
()
Save
(Integer 4 [])
Source
Public
Required
.false.
),
queries:
(Variable
2
queries
Local
()
()
Default
(CPtr)
Source
Public
Required
.false.
),
x:
(Variable
2
x
Local
()
()
Default
(Pointer
(Integer 2 [])
)
Source
Public
Required
.false.
),
y:
(Variable
2
y
Local
()
()
Default
(Integer 2 [])
Source
Public
Required
.false.
)
})
bindc
[iso_c_binding]
[(CPtrToPointer
(Var 2 queries)
(Var 2 x)
()
)
(Print
()
[(PointerToCPtr
(Var 2 x)
(CPtr)
()
)
(Var 2 queries)]
()
()
)
(=>
(Var 2 x)
(Var 2 y)
)
(Print
()
[(PointerToCPtr
(Var 2 x)
(CPtr)
()
)
(PointerToCPtr
(GetPointer
(Var 2 y)
(Pointer
(Integer 2 [])
)
()
)
(CPtr)
()
)]
()
()
)]
),
iso_c_binding:
(IntrinsicModule lfortran_intrinsic_iso_c_binding),
lfortran_intrinsic_builtin:
(IntrinsicModule lfortran_intrinsic_builtin)
})
[]
)