brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.6 KiB · 26c47ec Raw
442 lines · cpp
1// DEFINE: %{common_opts_mac} = -triple x86_64-apple-macos10.7.02// DEFINE: %{limit} = -fnoopenmp-use-tls -ferror-limit 100 3// DEFINE: %{target_mac} = -fopenmp-targets=x86_64-apple-macos10.7.04// DEFINE: %{aux_triple} = -aux-triple x86_64-apple-macos10.7.05// DEFINE: %{openmp45} = -fopenmp -fopenmp-version=456// DEFINE: %{openmp50} = -fopenmp -fopenmp-version=507// DEFINE: %{openmp50_simd} = -fopenmp-simd -fopenmp-version=508// DEFINE: %{openmp52} = -fopenmp -fopenmp-version=529// DEFINE: %{openmp60} = -fopenmp -fopenmp-version=6010// DEFINE: %{openmp60_simd} = -fopenmp-simd -fopenmp-version=6011 12// 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 - %s13// 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 - %s14// 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 - %s15// 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 - %s16// 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 - %s17 18// 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 - %s19// 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 - %s20// 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 - %s21// 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 - %s22 23// 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 - %s24// 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 - %s25// 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 - %s26// 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 - %s27// 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 - %s28 29// 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 - %s30// 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 - %s31 32// 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 - %s33// 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 - %s34// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var %{openmp60} %{limit} -o - %s35 36#pragma omp begin declare target37static int gg;38// expected-warning@+1 {{variable 'recursive' is uninitialized when used within its own initialization}}39int recursive = recursive ^ 3 + gg;40#pragma omp end declare target41 42// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp end declare_target'}}43// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp end declare target'}}44// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp end declare target'}}45#pragma omp end declare target 46 47// ompvar-error@+1 {{variable captured in declare target region must appear in a to clause}}48int a, b, z;49// expected-note@+1 {{defined as threadprivate or thread local}}50__thread int t;51 52// omp60-error@+3 {{expected '(' after 'declare_target'}}53// omp52-error@+2 {{expected '(' after 'declare target'}}54// omp45-to-51-error@+1 {{expected '(' after 'declare target'}}55#pragma omp declare target . 56// omp52-or-later-warning@+1 {{the delimited form of '#pragma omp declare target' without clauses is deprecated; use '#pragma omp begin declare target' instead}}57#pragma omp declare target58void f();59// omp60-warning@+3 {{extra tokens at the end of '#pragma omp end declare_target' are ignored}}60// omp52-warning@+2 {{extra tokens at the end of '#pragma omp end declare target' are ignored}}61// omp45-to-51-warning@+1 {{extra tokens at the end of '#pragma omp end declare target' are ignored}}62#pragma omp end declare target shared(a) 63 64// omp60-error@+10 {{unexpected 'map' clause, only 'enter', 'link', 'device_type' or 'indirect' clauses expected}}65// omp60-error@+9 {{expected at least one 'enter', 'link' or 'indirect' clause}}66// omp52-error@+8 {{unexpected 'map' clause, only 'enter', 'link', 'device_type' or 'indirect' clauses expected}}67// omp52-error@+7 {{expected at least one 'enter', 'link' or 'indirect' clause}}68// omp51-error@+6 {{unexpected 'map' clause, only 'to', 'link', 'device_type' or 'indirect' clauses expected}} 69// omp51-error@+5 {{expected at least one 'to', 'link' or 'indirect' clause}}70// omp5-error@+4 {{unexpected 'map' clause, only 'to', 'link' or 'device_type' clauses expected}}71// omp5-error@+3 {{expected at least one 'to' or 'link' clause}}72// omp45-error@+2 {{unexpected 'map' clause, only 'to' or 'link' clauses expected}}73// omp45-error@+1 {{expected at least one 'to' or 'link' clause}} 74#pragma omp declare target map(a)75 76// omp60-error@+5 {{unexpected 'to' clause, use 'enter' instead}}77// omp60-error@+4 {{expected at least one 'enter', 'link' or 'indirect' clause}}78// omp52-error@+3 {{unexpected 'to' clause, use 'enter' instead}}79// omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' clause}}80// omp45-to-51-error@+1 {{use of undeclared identifier 'foo1'}}81#pragma omp declare target to(foo1) 82 83// expected-error@+1 {{use of undeclared identifier 'foo2'}}84#pragma omp declare target link(foo2) 85 86// omp60-error@+6 {{unexpected 'to' clause, use 'enter' instead}}87// omp60-error@+5 {{expected at least one 'enter', 'link' or 'indirect' clause}}88// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}89// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}90// dev5-note@+2 {{marked as 'device_type(host)' here}}91// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}92#pragma omp declare target to(f) device_type(host)93 94void q();95// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}96// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}97// omp5-and-51-warning@+2 {{more than one 'device_type' clause is specified}}98// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}99#pragma omp declare target to(q) device_type(any) device_type(any) device_type(host) 100 101#if _OPENMP == 202011102// omp51-error@+1 {{directive '#pragma omp declare target' cannot contain more than one 'indirect' clause}}103#pragma omp declare target to(q) indirect(true) indirect(false)104 105// expected-note@+1 {{declared here}}106int xxx;107// omp51-error@+2 {{expression is not an integral constant expression}}108// omp51-note@+1 {{read of non-const variable 'xxx' is not allowed in a constant expression}}109#pragma omp declare target to(q) indirect(xxx)110 111constexpr bool fz() {return true;}112// omp51-error@+1 {{unexpected 'to' clause, only 'device_type', 'indirect' clauses expected}}113#pragma omp begin declare target to(q) indirect(fz()) device_type(nohost)114#pragma omp end declare target115 116// omp51-error@+1 {{unexpected 'to' clause, only 'device_type', 'indirect' clauses expected}}117#pragma omp begin declare target indirect to(xxx)118void bar();119#pragma omp end declare target120 121// omp51-error@+2 {{unexpected 'tofrom' clause, only 'to', 'link', 'device_type' or 'indirect' clauses expected}}122// omp51-error@+1 {{expected at least one 'to', 'link' or 'indirect' clause}}123#pragma omp declare target tofrom(xxx)124 125// omp51-error@+1 {{only 'device_type(any)' clause is allowed with indirect clause}}126#pragma omp begin declare target device_type(host) indirect127void bar();128#pragma omp end declare target129#endif  // _OPENMP130 131void c();132 133// expected-note@+1 {{'func' defined here}}134void func() {} 135 136// omp52-or-later-error@+5 {{unexpected 'allocate' clause, only 'enter', 'link', 'device_type' or 'indirect' clauses expected}}137// omp51-error@+4 {{unexpected 'allocate' clause, only 'to', 'link', 'device_type' or 'indirect' clauses expected}}138// omp5-error@+3 {{unexpected 'allocate' clause, only 'to', 'link' or 'device_type' clauses expected}}139// expected-error@+2 {{function name is not allowed in 'link' clause}}140// omp45-error@+1 {{unexpected 'allocate' clause, only 'to' or 'link' clauses expected}}141#pragma omp declare target link(func) allocate(a)142 143void bar();144void baz() {bar();}145// omp5-or-later-warning@+1 {{declaration marked as declare target after first use, it may lead to incorrect results}}146#pragma omp declare target(bar)147 148extern int b;149 150struct NonT {151  int a;152};153 154typedef int sint;155 156template <typename T>157T bla1() { return 0; }158 159#pragma omp begin declare target160template <typename T>161T bla2() { return 0; }162#pragma omp end declare target163 164template<>165float bla2() { return 1.0; }166 167#pragma omp begin declare target168void blub2() {169  bla2<float>();170  bla2<int>();171}172#pragma omp end declare target173 174void t2() {175#pragma omp target176  {177    bla2<float>();178    bla2<long>();179  }180}181 182#pragma omp begin declare target183  void abc();184#pragma omp end declare target185void cba();186// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp end declare_target'}}187// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp end declare target'}}188// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp end declare target'}}189#pragma omp end declare target 190 191#pragma omp begin declare target192#pragma omp begin declare target193void def();194#pragma omp end declare target195void fed();196 197#pragma omp begin declare target198// expected-note@+1 {{defined as threadprivate or thread local}}199#pragma omp threadprivate(a) 200extern int b;201int g;202 203struct T {204  int a;205  virtual int method();206};207 208class VC {209  T member;210  NonT member1;211  public:212    virtual int method() { T a; return 0; }213};214 215struct C {216  NonT a;217  sint b;218  int method();219  int method1();220};221 222int C::method1() {223  return 0;224}225 226void foo(int p) {227// expected-error@+1 {{threadprivate variables cannot be used in target constructs}}228  a = 0; 229  b = 0;230// expected-error@+1 {{threadprivate variables cannot be used in target constructs}}231  t = 1; 232  C object;233  VC object1;234  g = object.method();235  g += object.method1();236  g += object1.method() + p;237  // dev5-error@+1 {{function with 'device_type(host)' is not available on device}}238  f(); 239  q();240  c();241}242#pragma omp begin declare target243void foo1() {244  // omp5-or-later-var-note@+1 {{variable 'z' is captured here}}245  [&](){ (void)(b+z);}(); 246}247#pragma omp end declare target248 249#pragma omp end declare target250#pragma omp end declare target251// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp end declare_target'}}252// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp end declare target'}}253// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp end declare target'}}254#pragma omp end declare target 255 256int C::method() {257  return 0;258}259 260struct S {261#pragma omp begin declare target262  int v;263#pragma omp end declare target264};265 266void foo3() {267  return;268}269 270int *y;271int **w = &y;272int main (int argc, char **argv) {273  int a = 2;274// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp declare_target'}}275// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp declare target'}}276// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp declare target'}}277#pragma omp declare target 278  int v;279// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp end declare_target'}}280// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp end declare target'}}281// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp end declare target'}}282#pragma omp end declare target 283  foo(v);284 285  // omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 'indirect' clause}}286  // omp52-or-later-error@+1 {{unexpected 'to' clause, use 'enter' instead}}287#pragma omp declare target to(foo3) link(w)288  // omp52-or-later-error@+3 {{unexpected 'to' clause, use 'enter' instead}}289  // omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 'indirect' clause}}290  // omp45-to-51-var-error@+1 {{local variable 'a' should not be used in 'declare target' directive}}291#pragma omp declare target to(a) 292  return (0);293}294 295namespace {296#pragma omp begin declare target297  int x;298}299#pragma omp end declare target300 301// expected-error@+1 {{'S' used in declare target directive is not a variable or a function name}}302#pragma omp declare target link(S) 303 304// expected-error@+1 {{'x' appears multiple times in clauses on the same declare target directive}}305#pragma omp declare target (x, x) 306// omp52-or-later-error@+3 {{unexpected 'to' clause, use 'enter' instead}}307// omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 'indirect' clause}}308// omp45-to-51-clause-error@+1 {{'x' appears multiple times in clauses on the same declare target directive}}309#pragma omp declare target to(x) to(x)310// expected-error@+1 {{'x' must not appear in both clauses 'to' and 'link'}}311#pragma omp declare target link(x) 312 313void bazz() {}314// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}315// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}316// host5-note@+2 3 {{marked as 'device_type(nohost)' here}}317// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}} 318#pragma omp declare target to(bazz) device_type(nohost)319void bazzz() {bazz();}320// omp52-or-later-error@+3 {{unexpected 'to' clause, use 'enter' instead}}321// omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 'indirect' clause}}322// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}323#pragma omp declare target to(bazzz) device_type(nohost) 324// host5-error@+1 {{function with 'device_type(nohost)' is not available on host}}325void any() {bazz();} 326// host5-error@+1 {{function with 'device_type(nohost)' is not available on host}}327void host1() {bazz();}328// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}329// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}330// dev5-note@+2 3 {{marked as 'device_type(host)' here}}331// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}332#pragma omp declare target to(host1) device_type(host)333//host5-error@+1 {{function with 'device_type(nohost)' is not available on host}}334void host2() {bazz();}335// omp52-or-later-error@+2 {{unexpected 'to' clause, use 'enter' instead}}336// omp52-or-later-error@+1 {{expected at least one 'enter', 'link' or 'indirect' clause}}337#pragma omp declare target to(host2) 338// dev5-error@+1 {{function with 'device_type(host)' is not available on device}}339void device() {host1();}340// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}341// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}342// host5-note@+2 2 {{marked as 'device_type(nohost)' here}} 343// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}344#pragma omp declare target to(device) device_type(nohost)345void host3() {host1();} // dev5-error {{function with 'device_type(host)' is not available on device}}346// omp52-or-later-error@+2 {{unexpected 'to' clause, use 'enter' instead}}347// omp52-or-later-error@+1 {{expected at least one 'enter', 'link' or 'indirect' clause}}348#pragma omp declare target to(host3)349 350#pragma omp begin declare target351void any1() {any();}352// dev5-error@+1 {{function with 'device_type(host)' is not available on device}}353void any2() {host1();} 354// host5-error@+1 {{function with 'device_type(nohost)' is not available on host}}355void any3() {device();}356void any4() {any2();}357#pragma omp end declare target358 359void any5() {any();}360void any6() {host1();}361// host5-error@+1 {{function with 'device_type(nohost)' is not available on host}}362void any7() {device();}363void any8() {any2();}364 365int MultiDevTy;366// omp52-or-later-error@+3 {{unexpected 'to' clause, use 'enter' instead}}367// omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 'indirect' clause}}368// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}369#pragma omp declare target to(MultiDevTy) device_type(any)370// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}371// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}372// host-5-and-51-error@+2 {{'device_type(host)' does not match previously specified 'device_type(any)' for the same declaration}}373// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}374#pragma omp declare target to(MultiDevTy) device_type(host)375// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}376// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 'indirect' clause}}377// no-host5-and-51-error@+2 {{'device_type(nohost)' does not match previously specified 'device_type(any)' for the same declaration}}378// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}379#pragma omp declare target to(MultiDevTy) device_type(nohost)380 381// expected-warning@+1 {{declaration is not declared in any declare target region}}382static int variable = 100; 383static float variable1 = 200;384// expected-warning@+1 {{declaration is not declared in any declare target region}}385static float variable2 = variable1;  386 387// expected-warning@+1 {{declaration is not declared in any declare target region}}388static int var = 1;  389 390static int var1 = 10;391static int *var2 = &var1;392// expected-warning@+1 {{declaration is not declared in any declare target region}}393static int **ptr1 = &var2;  394 395int arr[2] = {1,2};396// expected-warning@+1 {{declaration is not declared in any declare target region}}397int (*arrptr)[2] = &arr;  398 399class declare{400  public: int x;401          void print();402};403declare obj1;404// expected-warning@+1 {{declaration is not declared in any declare target region}}405declare *obj2 = &obj1;  406 407struct target{408  int x;409  void print();410};411// expected-warning@+1 {{declaration is not declared in any declare target region}}412static target S;  413 414#pragma omp begin declare target415// expected-note@+1 {{used here}}416int target_var = variable;  417// expected-note@+1 {{used here}}418float target_var1 = variable2;  419// expected-note@+1 {{used here}}420int *ptr = &var;  421// expected-note@+1 {{used here}}422int ***ptr2 = &ptr1; 423// expected-note@+1 {{used here}}424int (**ptr3)[2] = &arrptr;425// expected-note@+1 {{used here}}426declare **obj3 = &obj2;427// expected-note@+1 {{used here}}428target *S1 = &S;429#pragma omp end declare target430 431#if TESTENDINC432#include "unterminated_declare_target_include.h"433#elif TESTEND434// expected-warning@+1 {{expected '#pragma omp end declare target' at end of file to match '#pragma omp declare target'}}435#pragma omp declare target436#else437// omp60-warning@+3 {{expected '#pragma omp end declare target' at end of file to match '#pragma omp begin declare_target'}}438// omp52-warning@+2 {{expected '#pragma omp end declare target' at end of file to match '#pragma omp begin declare target'}}439// omp45-to-51-warning@+1 {{expected '#pragma omp end declare target' at end of file to match '#pragma omp begin declare target'}}440#pragma omp begin declare target441#endif442