! Tests `do concurrent` mapping when mapped value(s) depend on values defined ! outside the target region; e.g. the size of the array is dynamic. This needs ! to be handled by localizing these region outsiders by either cloning them in ! the region or in case we cannot do that, map them and use the mapped values. ! RUN: %flang_fc1 -emit-hlfir -fopenmp -fdo-concurrent-to-openmp=device %s -o - \ ! RUN: | FileCheck %s subroutine foo(n) implicit none integer :: n integer :: i integer, dimension(n) :: a do concurrent(i=1:10) a(i) = i end do end subroutine ! CHECK-DAG: %[[I_DECL:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFfooEi"} ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %{{.*}}(%{{.*}}) {uniq_name = "_QFfooEa"} ! CHECK-DAG: %[[I_MAP:.*]] = omp.map.info var_ptr(%[[I_DECL]]#1 : {{.*}}) {{.*}} {name = "_QFfooEi"} ! CHECK-DAG: %[[A_MAP:.*]] = omp.map.info var_ptr(%[[A_DECL]]#1 : {{.*}}) {{.*}} {name = "_QFfooEa"} ! CHECK-DAG: %[[N_MAP:.*]] = omp.map.info var_ptr(%{{.*}} : {{.*}}) {{.*}} {name = "_QFfooEa.extent.dim0"} ! CHECK: omp.target ! CHECK-SAME: map_entries( ! CHECK-SAME: %{{[[:alnum:]]+}} -> %{{[^,]+}}, ! CHECK-SAME: %{{[[:alnum:]]+}} -> %{{[^,]+}}, ! CHECK-SAME: %{{[[:alnum:]]+}} -> %{{[^,]+}}, ! CHECK-SAME: %[[I_MAP]] -> %[[I_ARG:arg[0-9]*]], ! CHECK-SAME: %[[A_MAP]] -> %[[A_ARG:arg[0-9]*]], ! CHECK-SAME: %[[N_MAP]] -> %[[N_ARG:arg[0-9]*]] : {{.*}}) ! CHECK-SAME: {{.*}} { ! CHECK-DAG: %{{.*}} = hlfir.declare %[[I_ARG]] ! CHECK-DAG: %{{.*}} = hlfir.declare %[[A_ARG]] ! CHECK-DAG: %{{.*}} = fir.load %[[N_ARG]] ! CHECK: omp.terminator ! CHECK: }