llvm/clang/test/SemaOpenMP/hip-omp-mix.cpp

// REQUIRES: x86-registered-target
// REQUIRES: amdgpu-registered-target

// RUN: %clang_cc1 %s -x c++ -fopenmp -fsyntax-only -verify=host
// host-no-diagnostics

// RUN: %clang_cc1 %s -x hip -fopenmp -fsyntax-only -verify=device
// device-error@#01 {{HIP does not support OpenMP target directives}}
// device-error@#02 {{HIP does not support OpenMP target directives}}
// device-error@#03 {{HIP does not support OpenMP target directives}}
// device-error@#04 {{HIP does not support OpenMP target directives}}
// device-error@#05 {{HIP does not support OpenMP target directives}}
// device-error@#06 {{HIP does not support OpenMP target directives}}
// device-error@#07 {{HIP does not support OpenMP target directives}}
// device-error@#08 {{HIP does not support OpenMP target directives}}
// device-error@#09 {{HIP does not support OpenMP target directives}}
// device-error@#10 {{HIP does not support OpenMP target directives}}
// device-error@#11 {{HIP does not support OpenMP target directives}}
// device-error@#12 {{HIP does not support OpenMP target directives}}
// device-error@#13 {{HIP does not support OpenMP target directives}}
// device-error@#14 {{HIP does not support OpenMP target directives}}
// device-error@#15 {{HIP does not support OpenMP target directives}}
// device-error@#16 {{HIP does not support OpenMP target directives}}
// device-error@#17 {{HIP does not support OpenMP target directives}}
// device-error@#18 {{HIP does not support OpenMP target directives}}
// device-error@#19 {{HIP does not support OpenMP target directives}}
// device-error@#20 {{HIP does not support OpenMP target directives}}
// device-error@#21 {{HIP does not support OpenMP target directives}}
// device-error@#22 {{HIP does not support OpenMP target directives}}
// device-error@#23 {{HIP does not support OpenMP target directives}}
// device-error@#24 {{HIP does not support OpenMP target directives}}

void test01() {
#pragma omp target // #01
  ;
}


void test02() {
#pragma omp target parallel // #02
  ;
}

void test03() {
#pragma omp target parallel for // #03
  for (int i = 0; i < 1; ++i);
}

void test04(int x) {
#pragma omp target data map(x) // #04
  ;
}

void test05(int * x, int n) {
#pragma omp target enter data map(to:x[:n]) // #05
}

void test06(int * x, int n) {
#pragma omp target exit data map(from:x[:n]) // #06
}

void test07(int * x, int n) {
#pragma omp target update to(x[:n]) // #07
}

#pragma omp declare target (test07) // #08
void test08() {

}

#pragma omp begin declare target // #09
void test09_1() {

}

void test09_2() {

}
#pragma omp end declare target

void test10(int n) {
  #pragma omp target parallel // #10
  for (int i = 0; i < n; ++i)
    ;
}

void test11(int n) {
  #pragma omp target parallel for // #11
  for (int i = 0; i < n; ++i)
    ;
}

void test12(int n) {
  #pragma omp target parallel for simd // #12
  for (int i = 0; i < n; ++i)
    ;
}

void test13(int n) {
  #pragma omp target parallel loop // #13
  for (int i = 0; i < n; ++i)
    ;
}

void test14(int n) {
  #pragma omp target simd // #14
  for (int i = 0; i < n; ++i)
    ;
}

void test15(int n) {
  #pragma omp target teams // #15
  for (int i = 0; i < n; ++i)
    ;
}

void test16(int n) {
  #pragma omp target teams distribute // #16
  for (int i = 0; i < n; ++i)
    ;
}

void test17(int n) {
  #pragma omp target teams distribute simd // #17
  for (int i = 0; i < n; ++i)
    ;
}

void test18(int n) {
  #pragma omp target teams loop // #18
  for (int i = 0; i < n; ++i)
    ;
}

void test19(int n) {
  #pragma omp target teams distribute parallel for // #19
  for (int i = 0; i < n; ++i)
    ;
}

void test20(int n) {
  #pragma omp target teams distribute parallel for simd // #20
  for (int i = 0; i < n; ++i)
    ;
}

void test21() {
#pragma omp target // #21
  {
#pragma omp teams // #22
    {}
  }
}

void test22() {
#pragma omp target // #23
#pragma omp teams // #24
  {}
}

void test23() {
// host code
#pragma omp teams
  {}
}