1! RUN: %flang_fc1 -fdebug-unparse-no-sema -fopenmp %s | FileCheck --ignore-case %s 2! RUN: %flang_fc1 -fdebug-dump-parse-tree-no-sema -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s 3program main 4!CHECK-LABEL: program main 5 implicit none 6 7 integer, parameter :: N = 256 8 9 type data01 10 integer :: a 11 integer :: arr(N) 12 end type 13 14 real :: arrA(N), arrB(N) 15 integer, target :: arrC(N) 16 type(data01) :: data01_a 17 integer, allocatable :: alloc_arr(:) 18 integer, pointer :: ptrArr(:) 19 20 arrA = 1.414 21 arrB = 3.14 22 arrC = -1 23 data01_a%a = -1 24 data01_arr = -1 25 allocate(alloc_arr(N)) 26 alloc_arr = -1 27 28 29!CHECK: !$omp target defaultmap(tofrom:scalar) 30 !$omp target defaultmap(tofrom:scalar) 31 do i = 1, N 32 a = 3.14 33 enddo 34!CHECK: !$omp end target 35 !$omp end target 36 37!PARSE-TREE: OmpBeginBlockDirective 38!PARSE-TREE: OmpBlockDirective -> llvm::omp::Directive = target 39!PARSE-TREE: OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause 40!PARSE-TREE: ImplicitBehavior = Tofrom 41!PARSE-TREE: Modifier -> OmpVariableCategory -> Value = Scalar 42 43!CHECK: !$omp target defaultmap(alloc:scalar) 44 !$omp target defaultmap(alloc:scalar) 45 a = 4.56 46!CHECK: !$omp end target 47 !$omp end target 48 49!PARSE-TREE: OmpBeginBlockDirective 50!PARSE-TREE: OmpBlockDirective -> llvm::omp::Directive = target 51!PARSE-TREE: OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause 52!PARSE-TREE: ImplicitBehavior = Alloc 53!PARSE-TREE: Modifier -> OmpVariableCategory -> Value = Scalar 54 55!CHECK: !$omp target defaultmap(none) 56 !$omp target defaultmap(none) 57 a = 6.78 58!CHECK: !$omp end target 59 !$omp end target 60 61!PARSE-TREE: OmpBeginBlockDirective 62!PARSE-TREE: OmpBlockDirective -> llvm::omp::Directive = target 63!PARSE-TREE: OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause 64!PARSE-TREE: ImplicitBehavior = None 65 66!CHECK: !$omp target defaultmap(none:scalar) 67 !$omp target defaultmap(none:scalar) 68 a = 4.78 69!CHECK: !$omp end target 70 !$omp end target 71 72!PARSE-TREE: OmpBeginBlockDirective 73!PARSE-TREE: OmpBlockDirective -> llvm::omp::Directive = target 74!PARSE-TREE: OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause 75!PARSE-TREE: ImplicitBehavior = None 76!PARSE-TREE: Modifier -> OmpVariableCategory -> Value = Scalar 77 78!CHECK: !$omp target defaultmap(to:scalar) 79 !$omp target defaultmap(to:scalar) 80 a = 2.39 81!CHECK: !$omp end target 82 !$omp end target 83 84!PARSE-TREE: OmpBeginBlockDirective 85!PARSE-TREE: OmpBlockDirective -> llvm::omp::Directive = target 86!PARSE-TREE: OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause 87!PARSE-TREE: ImplicitBehavior = To 88!PARSE-TREE: Modifier -> OmpVariableCategory -> Value = Scalar 89 90!CHECK: !$omp target defaultmap(firstprivate:scalar) 91 !$omp target defaultmap(firstprivate:scalar) 92 a = 9.45 93!CHECK: !$omp end target 94 !$omp end target 95 96!PARSE-TREE: OmpBeginBlockDirective 97!PARSE-TREE: OmpBlockDirective -> llvm::omp::Directive = target 98!PARSE-TREE: OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause 99!PARSE-TREE: ImplicitBehavior = Firstprivate 100!PARSE-TREE: Modifier -> OmpVariableCategory -> Value = Scalar 101 102!CHECK: !$omp target defaultmap(tofrom:aggregate) 103 !$omp target defaultmap(tofrom:aggregate) 104 arrC(1) = 10 105 data01_a%a = 11 106 data01_a%arr(1) = 100 107 data01_a%arr(2) = 245 108!CHECK: !$omp end target 109 !$omp end target 110 111!PARSE-TREE: OmpBeginBlockDirective 112!PARSE-TREE: OmpBlockDirective -> llvm::omp::Directive = target 113!PARSE-TREE: OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause 114!PARSE-TREE: ImplicitBehavior = Tofrom 115!PARSE-TREE: Modifier -> OmpVariableCategory -> Value = Aggregate 116 117!CHECK: !$omp target defaultmap(tofrom:allocatable) 118 !$omp target defaultmap(tofrom:allocatable) 119 alloc_arr(23) = 234 120!CHECK: !$omp end target 121 !$omp end target 122 123!PARSE-TREE: OmpBeginBlockDirective 124!PARSE-TREE: OmpBlockDirective -> llvm::omp::Directive = target 125!PARSE-TREE: OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause 126!PARSE-TREE: ImplicitBehavior = Tofrom 127!PARSE-TREE: Modifier -> OmpVariableCategory -> Value = Allocatable 128 129!CHECK: !$omp target defaultmap(default:pointer) 130 !$omp target defaultmap(default:pointer) 131 ptrArr=>arrC 132 ptrArr(2) = 5 133 prtArr(200) = 34 134!CHECK: !$omp end target 135 !$omp end target 136 137!PARSE-TREE: OmpBeginBlockDirective 138!PARSE-TREE: OmpBlockDirective -> llvm::omp::Directive = target 139!PARSE-TREE: OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause 140!PARSE-TREE: ImplicitBehavior = Default 141!PARSE-TREE: Modifier -> OmpVariableCategory -> Value = Pointer 142 143end program main 144!CHECK-LABEL: end program main 145