| ! REQUIRES: plugins, examples, shell | 
 |  | 
 | !RUN: %flang_fc1 -load %llvmshlibdir/flangOmpReport.so -plugin flang-omp-report -fopenmp %s -o - | FileCheck %s | 
 |  | 
 | ! Check OpenMP clause validity for the following directives: | 
 | !     2.10 Device constructs | 
 | program main | 
 |  | 
 |   real(8) :: arrayA(256), arrayB(256) | 
 |   integer :: N | 
 |  | 
 |   arrayA = 1.414 | 
 |   arrayB = 3.14 | 
 |   N = 256 | 
 |  | 
 |   !$omp target map(arrayA) | 
 |   do i = 1, N | 
 |      a = 3.14 | 
 |   enddo | 
 |   !$omp end target | 
 |  | 
 |   !$omp target device(0) | 
 |   do i = 1, N | 
 |      a = 3.14 | 
 |   enddo | 
 |   !$omp end target | 
 |  | 
 |   !$omp target defaultmap(tofrom:scalar) | 
 |   do i = 1, N | 
 |      a = 3.14 | 
 |   enddo | 
 |   !$omp end target | 
 |  | 
 |   !$omp teams num_teams(3) thread_limit(10) default(shared) private(i) shared(a) | 
 |   do i = 1, N | 
 |      a = 3.14 | 
 |   enddo | 
 |   !$omp end teams | 
 |  | 
 |   !$omp target map(tofrom:a) | 
 |   do i = 1, N | 
 |      a = 3.14 | 
 |   enddo | 
 |   !$omp end target | 
 |  | 
 |   !$omp target data device(0) map(to:a) | 
 |   do i = 1, N | 
 |     a = 3.14 | 
 |   enddo | 
 |   !$omp end target data | 
 |  | 
 | end program main | 
 |  | 
 | ! CHECK: --- | 
 | ! CHECK-NEXT: - file:            '{{[^"]*}}omp-device-constructs.f90' | 
 | ! CHECK-NEXT:   line:            16 | 
 | ! CHECK-NEXT:   construct:       target | 
 | ! CHECK-NEXT:   clauses: | 
 | ! CHECK-NEXT:     - clause:          map | 
 | ! CHECK-NEXT:       details:         arraya | 
 | ! CHECK-NEXT: - file:            '{{[^"]*}}omp-device-constructs.f90' | 
 | ! CHECK-NEXT:   line:            22 | 
 | ! CHECK-NEXT:   construct:       target | 
 | ! CHECK-NEXT:   clauses: | 
 | ! CHECK-NEXT:     - clause:          device | 
 | ! CHECK-NEXT:       details:         '0' | 
 | ! CHECK-NEXT: - file:            '{{[^"]*}}omp-device-constructs.f90' | 
 | ! CHECK-NEXT:   line:            28 | 
 | ! CHECK-NEXT:   construct:       target | 
 | ! CHECK-NEXT:   clauses: | 
 | ! CHECK-NEXT:     - clause:          defaultmap | 
 | ! CHECK-NEXT:       details:         'tofrom:scalar' | 
 | ! CHECK-NEXT: - file:            '{{[^"]*}}omp-device-constructs.f90' | 
 | ! CHECK-NEXT:   line:            34 | 
 | ! CHECK-NEXT:   construct:       teams | 
 | ! CHECK-NEXT:   clauses: | 
 | ! CHECK-NEXT:     - clause:          default | 
 | ! CHECK-NEXT:       details:         shared | 
 | ! CHECK-NEXT:     - clause:          num_teams | 
 | ! CHECK-NEXT:       details:         '3' | 
 | ! CHECK-NEXT:     - clause:          private | 
 | ! CHECK-NEXT:       details:         i | 
 | ! CHECK-NEXT:     - clause:          shared | 
 | ! CHECK-NEXT:       details:         a | 
 | ! CHECK-NEXT:     - clause:          thread_limit | 
 | ! CHECK-NEXT:       details:         '10' | 
 | ! CHECK-NEXT: - file:            '{{[^"]*}}omp-device-constructs.f90' | 
 | ! CHECK-NEXT:   line:            40 | 
 | ! CHECK-NEXT:   construct:       target | 
 | ! CHECK-NEXT:   clauses: | 
 | ! CHECK-NEXT:     - clause:          map | 
 | ! CHECK-NEXT:       details:         'tofrom:a' | 
 | ! CHECK-NEXT: - file:            '{{[^"]*}}omp-device-constructs.f90' | 
 | ! CHECK-NEXT:   line:            46 | 
 | ! CHECK-NEXT:   construct:       target data | 
 | ! CHECK-NEXT:   clauses: | 
 | ! CHECK-NEXT:     - clause:          device | 
 | ! CHECK-NEXT:       details:         '0' | 
 | ! CHECK-NEXT:     - clause:          map | 
 | ! CHECK-NEXT:       details:         'to:a' | 
 | ! CHECK-NEXT: ... |