| ! RUN: bbc -emit-hlfir -fcuda %s -o - | FileCheck %s |
| |
| ! CHECK-LABEL: func.func @_QPtest_c_devptr( |
| ! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_devptr{cptr:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>> {fir.bindc_name = "cdevptr"}) { |
| ! CHECK: %[[DSCOPE:.*]] = fir.dummy_scope : !fir.dscope |
| ! CHECK: %[[DECL:.*]]:2 = hlfir.declare %[[ARG0]] dummy_scope %[[DSCOPE]] arg {{[0-9]+}} {uniq_name = "_QFtest_c_devptrEcdevptr"} : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_devptr{cptr:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>, !fir.dscope) -> (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_devptr{cptr:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_devptr{cptr:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>) |
| ! CHECK: %[[CPTR:.*]] = fir.coordinate_of %[[DECL]]#0, cptr : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_devptr{cptr:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>) -> !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>> |
| ! CHECK: %[[ADDR:.*]] = fir.coordinate_of %[[CPTR]], __address : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>) -> !fir.ref<i64> |
| ! CHECK: %[[VAL:.*]] = fir.load %[[ADDR]] : !fir.ref<i64> |
| ! CHECK: %[[ARG:.*]] = fir.convert %[[VAL]] : (i64) -> !fir.ref<i64> |
| ! CHECK: fir.call @get_expected_f(%[[ARG]]) proc_attrs<bind_c> fastmath<contract> : (!fir.ref<i64>) -> () |
| subroutine test_c_devptr(cdevptr) |
| use __fortran_builtins, only : c_devptr => __builtin_c_devptr |
| interface |
| subroutine get_expected_f(src) bind(c) |
| use __fortran_builtins, only : c_devptr => __builtin_c_devptr |
| type(c_devptr), value :: src |
| end subroutine get_expected_f |
| end interface |
| type(c_devptr) :: cdevptr |
| call get_expected_f(cdevptr) |
| end |