[flang] Support lowering of C_PTR and C_FUNPTR argument with VALUE attribute
As Fortran 2018 18.3.2, C_PTR is interoperable with any C object pointer type. C_FUNPTR is interoperable with any C function pointer type. As 18.3.6, a C pointer can correspond to a Fortran dummy argument of type C_PTR with the VALUE attribute. The interface for type(C_PTR)/type(C_FUNPTR) argument with value attribute is different from the the usual derived type. For type(C_PTR) or type(C_FUNPTR), the component is the address, and the interface is a pointer even with VALUE attribute. For a usual derived type such as the drived type with the component of integer 64, the interface is a i64 value when it has VALUE attribute on aarch64 linux. To lower the type(C_PTR)/type(C_FUNPTR) argument with value attribute, get the value of the component of the type(C_PTR)/type(C_FUNPTR), which is the address, and then convert it to the pointer and pass it. Reviewed By: Jean Perier Differential Revision: https://reviews.llvm.org/D131583
Loading
Please sign in to comment