diff --git a/flang/lib/Lower/OpenACC.cpp b/flang/lib/Lower/OpenACC.cpp index 97691232192b3..073cb9bc46a97 100644 --- a/flang/lib/Lower/OpenACC.cpp +++ b/flang/lib/Lower/OpenACC.cpp @@ -2685,8 +2685,7 @@ genDeclareInModule(Fortran::lower::AbstractConverter &converter, } else if (const auto *deviceResidentClause = std::get_if( &clause.u)) { - genGlobalCtors( + genGlobalCtors( converter, modBuilder, deviceResidentClause->v, mlir::acc::DataClause::acc_declare_device_resident); } else if (const auto *linkClause = diff --git a/flang/test/Lower/OpenACC/acc-declare.f90 b/flang/test/Lower/OpenACC/acc-declare.f90 index b253294ab33cf..d3b9efe438b1a 100644 --- a/flang/test/Lower/OpenACC/acc-declare.f90 +++ b/flang/test/Lower/OpenACC/acc-declare.f90 @@ -54,6 +54,14 @@ module acc_declare_device_resident_test ! CHECK: acc.terminator ! CHECK: } +! CHECK-LABEL: acc.global_dtor @_QMacc_declare_device_resident_testEdata1_acc_dtor { +! CHECK: %[[GLOBAL_ADDR:.*]] = fir.address_of(@_QMacc_declare_device_resident_testEdata1) {acc.declare = #acc.declare} : !fir.ref> +! CHECK: %[[DEVPTR:.*]] = acc.getdeviceptr varPtr(%[[GLOBAL_ADDR]] : !fir.ref>) -> !fir.ref> {dataClause = #acc, name = "data1", structured = false} +! CHECK: acc.declare_exit dataOperands(%[[DEVICEPTR]] : !fir.ref>) +! CHECK: acc.delete accPtr(%[[DEVICEPTR]] : !fir.ref>) {dataClause = #acc, name = "data1", structured = false} +! CHECK: acc.terminator +! CHECK: } + module acc_declare_device_link_test integer, parameter :: n = 5000 integer, dimension(n) :: data1