// DEFINE: %{common_opts_mac} = -triple x86_64-apple-macos10.7.0
// DEFINE: %{limit} = -fnoopenmp-use-tls -ferror-limit 100 
// DEFINE: %{target_mac} = -fopenmp-targets=x86_64-apple-macos10.7.0
// DEFINE: %{aux_triple} = -aux-triple x86_64-apple-macos10.7.0
// DEFINE: %{openmp45} = -fopenmp -fopenmp-version=45
// DEFINE: %{openmp50} = -fopenmp -fopenmp-version=50
// DEFINE: %{openmp50_simd} = -fopenmp-simd -fopenmp-version=50
// DEFINE: %{openmp52} = -fopenmp -fopenmp-version=52
// DEFINE: %{openmp60} = -fopenmp -fopenmp-version=60
// DEFINE: %{openmp60_simd} = -fopenmp-simd -fopenmp-version=60

// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp45,omp45-to-51,omp45-to-51-var,omp45-to-51-clause,omp45-to-51-clause  %{openmp45} %{limit} -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host5,host-5-and-51,no-host5-and-51  %{openmp50} %{target_mac} %{limit} -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var  %{openmp60} %{target_mac} %{limit} -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51,dev5  %{openmp50} -fopenmp-is-target-device %{target_mac} %{aux_triple} %{limit} -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var %{openmp60} -fopenmp-is-target-device %{target_mac} %{aux_triple} %{limit} -o - %s

// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host5,host-5-and-51,no-host5-and-51 %{openmp50_simd} %{target_mac} %{limit} -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var %{openmp60_simd} %{target_mac} %{limit} -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host5,host-5-and-51,no-host5-and-51 %{openmp50_simd} -fopenmp-is-target-device %{target_mac} %{limit} -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var %{openmp60_simd} -fopenmp-is-target-device %{target_mac} %{limit} -o - %s

// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp45,omp45-to-51,omp45-to-51-var,omp45-to-51-clause -fopenmp-version=45 -fopenmp-simd %{limit} -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51 -fopenmp %{limit} -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51 -fopenmp %{limit} -DTESTEND=1 -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51 -fopenmp %{limit} -I%S/Inputs -DTESTENDINC=1 -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51 -fopenmp-simd %{limit} -o - %s

// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp52,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var %{openmp52} -DVERBOSE_MODE=1 %{limit} -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var %{openmp60} -DVERBOSE_MODE=1 %{limit} -o - %s

// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51 %{openmp50} %{limit} -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51 -fopenmp %{limit} -o - %s
// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var %{openmp60} %{limit} -o - %s

#pragma omp begin declare target
static int gg;
// expected-warning@+1 {{variable 'recursive' is uninitialized when used within its own initialization}}
int recursive = recursive ^ 3 + gg;
#pragma omp end declare target

// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp end declare_target'}}
// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp end declare target'}}
// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp end declare target'}}
#pragma omp end declare target 

// ompvar-error@+1 {{variable captured in declare target region must appear in a to clause}}
int a, b, z;
// expected-note@+1 {{defined as threadprivate or thread local}}
__thread int t;

// omp60-error@+3 {{expected '(' after 'declare_target'}}
// omp52-error@+2 {{expected '(' after 'declare target'}}
// omp45-to-51-error@+1 {{expected '(' after 'declare target'}}
#pragma omp declare target . 
// omp52-or-later-warning@+1 {{the delimited form of '#pragma omp declare target' without clauses is deprecated; use '#pragma omp begin declare target' instead}}
#pragma omp declare target
void f();
// omp60-warning@+3 {{extra tokens at the end of '#pragma omp end declare_target' are ignored}}
// omp52-warning@+2 {{extra tokens at the end of '#pragma omp end declare target' are ignored}}
// omp45-to-51-warning@+1 {{extra tokens at the end of '#pragma omp end declare target' are ignored}}
#pragma omp end declare target shared(a) 

// omp60-error@+10 {{unexpected 'map' clause, only 'enter', 'link', 'device_type' or 'indirect' clauses expected}}
// omp60-error@+9 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// omp52-error@+8 {{unexpected 'map' clause, only 'enter', 'link', 'device_type' or 'indirect' clauses expected}}
// omp52-error@+7 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// omp51-error@+6 {{unexpected 'map' clause, only 'to', 'link', 'device_type' or 'indirect' clauses expected}} 
// omp51-error@+5 {{expected at least one 'to', 'link' or 'indirect' clause}}
// omp5-error@+4 {{unexpected 'map' clause, only 'to', 'link' or 'device_type' clauses expected}}
// omp5-error@+3 {{expected at least one 'to' or 'link' clause}}
// omp45-error@+2 {{unexpected 'map' clause, only 'to' or 'link' clauses expected}}
// omp45-error@+1 {{expected at least one 'to' or 'link' clause}} 
#pragma omp declare target map(a)

// omp60-error@+5 {{unexpected 'to' clause, use 'enter' instead}}
// omp60-error@+4 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// omp52-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// omp45-to-51-error@+1 {{use of undeclared identifier 'foo1'}}
#pragma omp declare target to(foo1) 

// expected-error@+1 {{use of undeclared identifier 'foo2'}}
#pragma omp declare target link(foo2) 

// omp60-error@+6 {{unexpected 'to' clause, use 'enter' instead}}
// omp60-error@+5 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// dev5-note@+2 {{marked as 'device_type(host)' here}}
// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
#pragma omp declare target to(f) device_type(host)

void q();
// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// omp5-and-51-warning@+2 {{more than one 'device_type' clause is specified}}
// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
#pragma omp declare target to(q) device_type(any) device_type(any) device_type(host) 

#if _OPENMP == 202011
// omp51-error@+1 {{directive '#pragma omp declare target' cannot contain more than one 'indirect' clause}}
#pragma omp declare target to(q) indirect(true) indirect(false)

// expected-note@+1 {{declared here}}
int xxx;
// omp51-error@+2 {{expression is not an integral constant expression}}
// omp51-note@+1 {{read of non-const variable 'xxx' is not allowed in a constant expression}}
#pragma omp declare target to(q) indirect(xxx)

constexpr bool fz() {return true;}
// omp51-error@+1 {{unexpected 'to' clause, only 'device_type', 'indirect' clauses expected}}
#pragma omp begin declare target to(q) indirect(fz()) device_type(nohost)
#pragma omp end declare target

// omp51-error@+1 {{unexpected 'to' clause, only 'device_type', 'indirect' clauses expected}}
#pragma omp begin declare target indirect to(xxx)
void bar();
#pragma omp end declare target

// omp51-error@+2 {{unexpected 'tofrom' clause, only 'to', 'link', 'device_type' or 'indirect' clauses expected}}
// omp51-error@+1 {{expected at least one 'to', 'link' or 'indirect' clause}}
#pragma omp declare target tofrom(xxx)

// omp51-error@+1 {{only 'device_type(any)' clause is allowed with indirect clause}}
#pragma omp begin declare target device_type(host) indirect
void bar();
#pragma omp end declare target
#endif  // _OPENMP

void c();

// expected-note@+1 {{'func' defined here}}
void func() {} 

// omp52-or-later-error@+5 {{unexpected 'allocate' clause, only 'enter', 'link', 'device_type' or 'indirect' clauses expected}}
// omp51-error@+4 {{unexpected 'allocate' clause, only 'to', 'link', 'device_type' or 'indirect' clauses expected}}
// omp5-error@+3 {{unexpected 'allocate' clause, only 'to', 'link' or 'device_type' clauses expected}}
// expected-error@+2 {{function name is not allowed in 'link' clause}}
// omp45-error@+1 {{unexpected 'allocate' clause, only 'to' or 'link' clauses expected}}
#pragma omp declare target link(func) allocate(a)

void bar();
void baz() {bar();}
// omp5-or-later-warning@+1 {{declaration marked as declare target after first use, it may lead to incorrect results}}
#pragma omp declare target(bar)

extern int b;

struct NonT {
  int a;
};

typedef int sint;

template <typename T>
T bla1() { return 0; }

#pragma omp begin declare target
template <typename T>
T bla2() { return 0; }
#pragma omp end declare target

template<>
float bla2() { return 1.0; }

#pragma omp begin declare target
void blub2() {
  bla2<float>();
  bla2<int>();
}
#pragma omp end declare target

void t2() {
#pragma omp target
  {
    bla2<float>();
    bla2<long>();
  }
}

#pragma omp begin declare target
  void abc();
#pragma omp end declare target
void cba();
// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp end declare_target'}}
// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp end declare target'}}
// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp end declare target'}}
#pragma omp end declare target 

#pragma omp begin declare target
#pragma omp begin declare target
void def();
#pragma omp end declare target
void fed();

#pragma omp begin declare target
// expected-note@+1 {{defined as threadprivate or thread local}}
#pragma omp threadprivate(a) 
extern int b;
int g;

struct T {
  int a;
  virtual int method();
};

class VC {
  T member;
  NonT member1;
  public:
    virtual int method() { T a; return 0; }
};

struct C {
  NonT a;
  sint b;
  int method();
  int method1();
};

int C::method1() {
  return 0;
}

void foo(int p) {
// expected-error@+1 {{threadprivate variables cannot be used in target constructs}}
  a = 0; 
  b = 0;
// expected-error@+1 {{threadprivate variables cannot be used in target constructs}}
  t = 1; 
  C object;
  VC object1;
  g = object.method();
  g += object.method1();
  g += object1.method() + p;
  // dev5-error@+1 {{function with 'device_type(host)' is not available on device}}
  f(); 
  q();
  c();
}
#pragma omp begin declare target
void foo1() {
  // omp5-or-later-var-note@+1 {{variable 'z' is captured here}}
  [&](){ (void)(b+z);}(); 
}
#pragma omp end declare target

#pragma omp end declare target
#pragma omp end declare target
// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp end declare_target'}}
// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp end declare target'}}
// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp end declare target'}}
#pragma omp end declare target 

int C::method() {
  return 0;
}

struct S {
#pragma omp begin declare target
  int v;
#pragma omp end declare target
};

void foo3() {
  return;
}

int *y;
int **w = &y;
int main (int argc, char **argv) {
  int a = 2;
// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp declare_target'}}
// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp declare target'}}
// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp declare target'}}
#pragma omp declare target 
  int v;
// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp end declare_target'}}
// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp end declare target'}}
// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp end declare target'}}
#pragma omp end declare target 
  foo(v);

  // omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 'indirect' clause}}
  // omp52-or-later-error@+1 {{unexpected 'to' clause, use 'enter' instead}}
#pragma omp declare target to(foo3) link(w)
  // omp52-or-later-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
  // omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 'indirect' clause}}
  // omp45-to-51-var-error@+1 {{local variable 'a' should not be used in 'declare target' directive}}
#pragma omp declare target to(a) 
  return (0);
}

namespace {
#pragma omp begin declare target
  int x;
}
#pragma omp end declare target

// expected-error@+1 {{'S' used in declare target directive is not a variable or a function name}}
#pragma omp declare target link(S) 

// expected-error@+1 {{'x' appears multiple times in clauses on the same declare target directive}}
#pragma omp declare target (x, x) 
// omp52-or-later-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// omp45-to-51-clause-error@+1 {{'x' appears multiple times in clauses on the same declare target directive}}
#pragma omp declare target to(x) to(x)
// expected-error@+1 {{'x' must not appear in both clauses 'to' and 'link'}}
#pragma omp declare target link(x) 

void bazz() {}
// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// host5-note@+2 3 {{marked as 'device_type(nohost)' here}}
// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}} 
#pragma omp declare target to(bazz) device_type(nohost)
void bazzz() {bazz();}
// omp52-or-later-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
#pragma omp declare target to(bazzz) device_type(nohost) 
// host5-error@+1 {{function with 'device_type(nohost)' is not available on host}}
void any() {bazz();} 
// host5-error@+1 {{function with 'device_type(nohost)' is not available on host}}
void host1() {bazz();}
// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// dev5-note@+2 3 {{marked as 'device_type(host)' here}}
// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
#pragma omp declare target to(host1) device_type(host)
//host5-error@+1 {{function with 'device_type(nohost)' is not available on host}}
void host2() {bazz();}
// omp52-or-later-error@+2 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-or-later-error@+1 {{expected at least one 'enter', 'link' or 'indirect' clause}}
#pragma omp declare target to(host2) 
// dev5-error@+1 {{function with 'device_type(host)' is not available on device}}
void device() {host1();}
// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// host5-note@+2 2 {{marked as 'device_type(nohost)' here}} 
// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
#pragma omp declare target to(device) device_type(nohost)
void host3() {host1();} // dev5-error {{function with 'device_type(host)' is not available on device}}
// omp52-or-later-error@+2 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-or-later-error@+1 {{expected at least one 'enter', 'link' or 'indirect' clause}}
#pragma omp declare target to(host3)

#pragma omp begin declare target
void any1() {any();}
// dev5-error@+1 {{function with 'device_type(host)' is not available on device}}
void any2() {host1();} 
// host5-error@+1 {{function with 'device_type(nohost)' is not available on host}}
void any3() {device();}
void any4() {any2();}
#pragma omp end declare target

void any5() {any();}
void any6() {host1();}
// host5-error@+1 {{function with 'device_type(nohost)' is not available on host}}
void any7() {device();}
void any8() {any2();}

int MultiDevTy;
// omp52-or-later-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
#pragma omp declare target to(MultiDevTy) device_type(any)
// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// host-5-and-51-error@+2 {{'device_type(host)' does not match previously specified 'device_type(any)' for the same declaration}}
// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
#pragma omp declare target to(MultiDevTy) device_type(host)
// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
// no-host5-and-51-error@+2 {{'device_type(nohost)' does not match previously specified 'device_type(any)' for the same declaration}}
// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
#pragma omp declare target to(MultiDevTy) device_type(nohost)

// expected-warning@+1 {{declaration is not declared in any declare target region}}
static int variable = 100; 
static float variable1 = 200;
// expected-warning@+1 {{declaration is not declared in any declare target region}}
static float variable2 = variable1;  

// expected-warning@+1 {{declaration is not declared in any declare target region}}
static int var = 1;  

static int var1 = 10;
static int *var2 = &var1;
// expected-warning@+1 {{declaration is not declared in any declare target region}}
static int **ptr1 = &var2;  

int arr[2] = {1,2};
// expected-warning@+1 {{declaration is not declared in any declare target region}}
int (*arrptr)[2] = &arr;  

class declare{
  public: int x;
          void print();
};
declare obj1;
// expected-warning@+1 {{declaration is not declared in any declare target region}}
declare *obj2 = &obj1;  

struct target{
  int x;
  void print();
};
// expected-warning@+1 {{declaration is not declared in any declare target region}}
static target S;  

#pragma omp begin declare target
// expected-note@+1 {{used here}}
int target_var = variable;  
// expected-note@+1 {{used here}}
float target_var1 = variable2;  
// expected-note@+1 {{used here}}
int *ptr = &var;  
// expected-note@+1 {{used here}}
int ***ptr2 = &ptr1; 
// expected-note@+1 {{used here}}
int (**ptr3)[2] = &arrptr;
// expected-note@+1 {{used here}}
declare **obj3 = &obj2;
// expected-note@+1 {{used here}}
target *S1 = &S;
#pragma omp end declare target

#if TESTENDINC
#include "unterminated_declare_target_include.h"
#elif TESTEND
// expected-warning@+1 {{expected '#pragma omp end declare target' at end of file to match '#pragma omp declare target'}}
#pragma omp declare target
#else
// omp60-warning@+3 {{expected '#pragma omp end declare target' at end of file to match '#pragma omp begin declare_target'}}
// omp52-warning@+2 {{expected '#pragma omp end declare target' at end of file to match '#pragma omp begin declare target'}}
// omp45-to-51-warning@+1 {{expected '#pragma omp end declare target' at end of file to match '#pragma omp begin declare target'}}
#pragma omp begin declare target
#endif
