xref: /llvm-project/flang/test/Lower/OpenMP/task2.f90 (revision 8f9dbb0a780feed60416ebc6ef8e89f4b0c2dca7)
1!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
2
3
4!CHECK-LABEL: omp.private
5!CHECK-SAME:      {type = firstprivate} @[[PRIVATIZER:.*]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>> alloc {
6!CHECK:         fir.if
7!CHECK:       } copy {
8!CHECK:         fir.if
9!CHECK:       } dealloc {
10!CHECK:         fir.if
11!CHECK:       }
12
13!CHECK-LABEL: func @_QPomp_task_nested_allocatable_firstprivate
14subroutine omp_task_nested_allocatable_firstprivate
15  integer, allocatable :: a(:)
16
17  allocate(a(7))
18  a = 10
19
20!CHECK:       %[[A:.*]]:2 = hlfir.declare %{{.*}} {fortran_attrs = #fir.var_attrs<allocatable>,
21!CHECK-SAME:    uniq_name = "_QFomp_task_nested_allocatable_firstprivateEa"} :
22!CHECK-SAME:    (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>) ->
23!CHECK-SAME:    (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>)
24!CHECK:       omp.task {
25  !$omp task default(firstprivate)
26!CHECK:         omp.task private(@[[PRIVATIZER]] %[[A]]#0 -> %[[A_ARG:.*]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>) {
27!CHECK:           %[[PRIV_A:.*]]:2 = hlfir.declare %{{.*}} {fortran_attrs = #fir.var_attrs<allocatable>,
28!CHECK-SAME:        uniq_name = "_QFomp_task_nested_allocatable_firstprivateEa"} :
29!CHECK-SAME:        (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>) ->
30!CHECK-SAME:        (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>)
31    !$omp task default(firstprivate)
32      a = 2
33!CHECK:         }
34    !$omp end task
35!CHECK:       }
36  !$omp end task
37end subroutine
38