brintos

brintos / llvm-project-archived public Read only

0
0
Text · 51.4 KiB · 0ee70be Raw
1027 lines · cpp
1// -fopenmp, -fno-openmp-extensions2// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,omp,lt51-omp -fopenmp -fno-openmp-extensions -fopenmp-version=50 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla3// RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,omp,lt51-omp -fopenmp -fno-openmp-extensions -fopenmp-version=40 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla4// RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,omp,lt51-omp -fopenmp -fno-openmp-extensions -fopenmp-version=45 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla5// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,omp,lt51-omp -fopenmp -fno-openmp-extensions -fopenmp-version=50 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla6// RUN: %clang_cc1 -verify=expected,omp5x,ge50,ge51,lt60,omp,ge51-omp -fopenmp -fno-openmp-extensions -fopenmp-version=51 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla7// RUN: %clang_cc1 -verify=expected,omp5x,ge50,ge51,ge52,lt60,omp,ge52-omp,omp52 -fopenmp -fno-openmp-extensions -fopenmp-version=52 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla8// RUN: %clang_cc1 -verify=expected,ge60,omp,ge60-omp,omp60 -fopenmp -fno-openmp-extensions -fopenmp-version=60 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla9// RUN: %clang_cc1 -DCCODE -verify -fopenmp -fno-openmp-extensions -ferror-limit 300 -x c %s -Wno-openmp -Wuninitialized -Wno-vla10 11// -fopenmp-simd, -fno-openmp-extensions12// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,omp,lt51-omp -fopenmp-simd -fno-openmp-extensions -fopenmp-version=50 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla13// RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,omp,lt51-omp -fopenmp-simd -fno-openmp-extensions -fopenmp-version=40 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla14// RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,omp,lt51-omp -fopenmp-simd -fno-openmp-extensions -fopenmp-version=45 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla15// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,omp,lt51-omp -fopenmp-simd -fno-openmp-extensions -fopenmp-version=50 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla16// RUN: %clang_cc1 -verify=expected,omp5x,ge50,ge51,lt60,omp,ge51-omp -fopenmp-simd -fno-openmp-extensions -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla17// RUN: %clang_cc1 -DCCODE -verify -fopenmp-simd -fno-openmp-extensions -ferror-limit 300 -x c %s -Wno-openmp-mapping -Wuninitialized -Wno-vla18 19// -fopenmp -fopenmp-extensions20// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,ompx,lt51-ompx -fopenmp -fopenmp-extensions -fopenmp-version=50 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla21// RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,ompx,lt51-ompx -fopenmp -fopenmp-extensions -fopenmp-version=40 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla22// RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,ompx,lt51-ompx -fopenmp -fopenmp-extensions -fopenmp-version=45 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla23// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,ompx,lt51-ompx -fopenmp -fopenmp-extensions -fopenmp-version=50 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla24// RUN: %clang_cc1 -verify=expected,omp5x,ge50,ge51,lt60,ompx,ge51-ompx -fopenmp -fopenmp-extensions -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla25// RUN: %clang_cc1 -DCCODE -verify -fopenmp -fopenmp-extensions -ferror-limit 300 -x c %s -Wno-openmp -Wuninitialized -Wno-vla26 27// -fopenmp-simd -fopenmp-extensions28// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,ompx,lt51-ompx -fopenmp-simd -fopenmp-extensions -fopenmp-version=50 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla29// RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,ompx,lt51-ompx -fopenmp-simd -fopenmp-extensions -fopenmp-version=40 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla30// RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,ompx,lt51-ompx -fopenmp-simd -fopenmp-extensions -fopenmp-version=45 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla31// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,ompx,lt51-ompx -fopenmp-simd -fopenmp-extensions -fopenmp-version=50 -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla32// RUN: %clang_cc1 -verify=expected,omp5x,ge50,ge51,lt60,ompx,ge51-ompx -fopenmp-simd -fopenmp-extensions -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized -Wno-vla33// RUN: %clang_cc1 -DCCODE -verify -fopenmp-simd -fopenmp-extensions -ferror-limit 300 -x c %s -Wno-openmp-mapping -Wuninitialized -Wno-vla34 35// Check36#ifdef CCODE37void foo(int arg) {38  const int n = 0;39 40  double marr[10][10][10];41 42  #pragma omp target map(marr[2][0:2][0:2]) // expected-error {{array section does not specify contiguous storage}}43  {}44  #pragma omp target map(marr[:][0:][:])45  {}46  #pragma omp target map(marr[:][1:][:]) // expected-error {{array section does not specify contiguous storage}}47  {}48  #pragma omp target map(marr[:][n:][:])49  {}50}51#else52 53void xxx(int argc) {54  int map; // expected-note {{initialize the variable 'map' to silence this warning}}55#pragma omp target map(tofrom: map) // expected-warning {{variable 'map' is uninitialized when used here}}56  for (int i = 0; i < 10; ++i)57    ;58}59 60 61struct SREF {62  int &a;63  int b;64  SREF(int &a) : a(a) {}65};66 67template <typename T, int I>68struct SA {69  static int ss;70  #pragma omp threadprivate(ss) // expected-note {{defined as threadprivate or thread local}}71  float a;72  int b[12];73  float *c;74  T d;75  float e[I];76  T *f;77  int bf : 20;78  void func(int arg) {79    SREF sref(arg);80    #pragma omp target81    {82      a = 0.0;83      func(arg);84      bf = 20;85    }86    #pragma omp target map(arg,a,d,sref.b)87    {}88    #pragma omp target map(arg[2:2],a,d) // expected-error {{subscripted value is not an array or pointer}}89    {}90    #pragma omp target map(arg,a*2) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}} ge50-error {{expected addressable lvalue in 'map' clause}} ge60-error {{expected addressable lvalue in 'map' clause}}91    {}92    #pragma omp target map(arg,(c+1)[2]) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}}93    {}94    #pragma omp target map(arg,a[:2],d) // expected-error {{subscripted value is not an array or pointer}}95    {}96    #pragma omp target map(arg,a,d[:2]) // expected-error {{subscripted value is not an array or pointer}}97    {}98 99    #pragma omp target map(to:ss) // expected-error {{threadprivate variables are not allowed in 'map' clause}}100    {}101 102    #pragma omp target map(to:b,e)103    {}104    #pragma omp target map(to:b,e) map(to:b) // lt50-error {{variable already marked as mapped in current construct}} lt50-note {{used here}}105    {}106    #pragma omp target map(to:b[:2],e)107    {}108    #pragma omp target map(to:b,e[:])109    {}110    #pragma omp target map(b[-1:]) // expected-error {{array section must be a subset of the original array}}111    {}112    #pragma omp target map(b[:-1]) // expected-error {{section length is evaluated to a negative value -1}}113    {}114    #pragma omp target map(b[true:true])115    {}116 117    #pragma omp target map(: c,f) // lt60-error {{missing map type}} // ge60-error {{empty modifier-specification-list is not allowed}}118    {}119    #pragma omp target map(always, tofrom: c,f)120    {}121    #pragma omp target map(always, tofrom: c[1:2],f)122    {}123    #pragma omp target map(always, tofrom: c,f[1:2])124    {}125    #pragma omp target map(always, tofrom: c[:],f)   // lt60-error {{section length is unspecified and cannot be inferred because subscripted value is not an array}}126    {}127    #pragma omp target map(always, tofrom: c,f[:])   // lt60-error {{section length is unspecified and cannot be inferred because subscripted value is not an array}}128    {}129    #pragma omp target map(always)   // expected-error {{use of undeclared identifier 'always'}}130    {}131    #pragma omp target map(self, tofrom: c,f)   // lt60-error {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}132    {}133    #pragma omp target map(self, tofrom: c[1:2],f)    // lt60-error {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}134    {}135    #pragma omp target map(self, tofrom: c,f[1:2])   // lt60-error {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}136    {}137    #pragma omp target map(self, tofrom: c[:],f)   // lt60-error {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}} // lt60-error {{section length is unspecified and cannot be inferred because subscripted value is not an array}}138    {}139    #pragma omp target map(self, tofrom: c,f[:])   // lt60-error {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}} // lt60-error {{section length is unspecified and cannot be inferred because subscripted value is not an array}} 140    {}141    #pragma omp target map(close, tofrom: c,f)142    {}143    #pragma omp target map(close, tofrom: c[1:2],f)144    {}145    #pragma omp target map(close, tofrom: c,f[1:2])146    {}147    #pragma omp target map(close, tofrom: c[:],f)   // lt60-error {{section length is unspecified and cannot be inferred because subscripted value is not an array}}148    {}149    #pragma omp target map(close, tofrom: c,f[:])   // lt60-error {{section length is unspecified and cannot be inferred because subscripted value is not an array}}150    {}151    #pragma omp target map(close)   // expected-error {{use of undeclared identifier 'close'}}152    {}153    // lt51-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}154    #pragma omp target map(present, tofrom: c,f)155    {}156    // lt51-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}157    #pragma omp target map(present, tofrom: c[1:2],f)158    {}159    // lt51-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}160    #pragma omp target map(present, tofrom: c,f[1:2])161    {}162    // lt60-error@+2 {{section length is unspecified and cannot be inferred because subscripted value is not an array}}163    // lt51-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}164    #pragma omp target map(present, tofrom: c[:],f)165    {}166    // lt60-error@+2 {{section length is unspecified and cannot be inferred because subscripted value is not an array}}167    // lt51-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}168    #pragma omp target map(present, tofrom: c,f[:])169    {}170    // expected-error@+1 {{use of undeclared identifier 'present'}}171    #pragma omp target map(present)172    {}173    // ge60-error@+4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator', 'self}}174    // ge52-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator'}}175    // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}176    // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}177    #pragma omp target map(ompx_hold, tofrom: c,f)178    {}179    // ge60-error@+4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator', 'self}}180    // ge52-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator'}}181    // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}182    // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}183    #pragma omp target map(ompx_hold, tofrom: c[1:2],f)184    {}185    // ge60-error@+4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator', 'self}}186    // ge52-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator'}}187    // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}188    // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}189    #pragma omp target map(ompx_hold, tofrom: c,f[1:2])190    {}191    // ge60-error@+5 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator', 'self}}192    // ge52-error@+4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator'}}193    // lt60-error@+3 {{section length is unspecified and cannot be inferred because subscripted value is not an array}}194    // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}195    // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}196    #pragma omp target map(ompx_hold, tofrom: c[:],f)197    {}198    // ge60-error@+5 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator', 'self}}199    // ge52-error@+4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator'}}200    // lt60-error@+3 {{section length is unspecified and cannot be inferred because subscripted value is not an array}}201    // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}202    // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}203    #pragma omp target map(ompx_hold, tofrom: c,f[:])204    {}205    // expected-error@+1 {{use of undeclared identifier 'ompx_hold'}}206    #pragma omp target map(ompx_hold)207    {}208    #pragma omp target map(close, close, tofrom: a)   // expected-error {{same map type modifier has been specified more than once}}209    {}210    #pragma omp target map(always, close, always, close, tofrom: a)   // expected-error 2 {{same map type modifier has been specified more than once}}211    {}212    #pragma omp target map(self, self, tofrom: a)   // lt60-error {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}  // lt60-error {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}} // lt60-error {{same map type modifier has been specified more than once}} // ge60-error {{same map type modifier has been specified more than once}}213    {}214    // ge60-error@+3 {{same map type modifier has been specified more than once}}215    // ge51-error@+2 {{same map type modifier has been specified more than once}}216    // lt51-error@+1 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}217    #pragma omp target map(present, present, tofrom: a)218    {}219    // ge60-error@+5 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator', 'self}}220    // ge52-error@+4 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator'}}221    // ompx-error@+3 {{same map type modifier has been specified more than once}}222    // ge51-omp-error@+2 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}223    // lt51-omp-error@+1 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}224    #pragma omp target map(ompx_hold, ompx_hold, tofrom: a)225    {}226    // ge60-error@+10 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator', 'self}}227    // ge60-error@+9 {{same map type modifier has been specified more than once}}228    // ge52-error@+8 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator'}}229    // expected-error@+7 2 {{same map type modifier has been specified more than once}}230    // ge51-error@+6 {{same map type modifier has been specified more than once}}231    // lt51-ompx-error@+5 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'ompx_hold'}}232    // lt51-omp-error@+4 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}233    // ompx-error@+3 {{same map type modifier has been specified more than once}}234    // ge51-omp-error@+2 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}235    // lt51-omp-error@+1 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}236    #pragma omp target map(always, close, present, ompx_hold, always, close, present, ompx_hold, tofrom: a)237    {}238    #pragma omp target map( , tofrom: a)   // expected-error {{missing map type modifier}}239    {}240    #pragma omp target map( , , tofrom: a)   // expected-error {{missing map type modifier}} expected-error {{missing map type modifier}}241    {}242    #pragma omp target map( , , : a)   // expected-error {{missing map type modifier}} expected-error {{missing map type modifier}} lt60-error {{missing map type}}243    {}244    // ge60-error@+4 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator'}}245    // ge51-error@+3 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}246    // lt51-error@+2 2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}247    // expected-error@+1 {{incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'}}248    #pragma omp target map( d, f, bf: a)249    {}250    // ge60-error@+5 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'iterator}}251    // expected-error@+4 {{missing map type modifier}}252    // ge51-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}253    // lt51-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}254    // lt60-error@+1 {{missing map type}}255    #pragma omp target map( , f, : a)256    {}257    #pragma omp target map(always close: a)   // lt60-error {{missing map type}} ge52-error{{missing ',' after map type modifier}} ge60-error {{missing ',' after map type modifier}}258    {}259    #pragma omp target map(always close bf: a)   // ge52-error 2 {{missing ',' after map type modifier}} expected-error {{incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'}} ge60-error 2 {{missing ',' after map type modifier}}260    {}261    // ge60-error@+5 {{missing ',' after map type modifier}}262    // ge52-error@+4 {{missing ',' after map type modifier}}263    // ge51-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}264    // lt51-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}265    // lt60-error@+1 {{missing map type}}266    #pragma omp target map(always tofrom close: a)267    {}268    // ge60-note@+4 {{map type 'tofrom' is previous specified here}}269    // ge60-error@+3 {{map type is already specified}}270    // ge51-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}271    // lt51-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}272    #pragma omp target map(tofrom from: a)273    {}274    // ge60-error@+6 {{missing ',' after map type modifier}}275    // ge60-note@+5 {{map type 'to' is previous specified here}}276    // ge60-error@+4 {{map type is already specified}}277    // ge52-error@+3 {{missing ',' after map type modifier}}278    // ge51-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}279    // lt51-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}280    #pragma omp target map(to always from: a)281    {}282    #pragma omp target map(close bf: a)   // ge52-error {{missing ',' after map type modifier}} expected-error {{incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'}} ge60-error {{missing ',' after map type modifier}}283    {}284    #pragma omp target map(([b[I]][bf])f)  // lt50-error {{expected ',' or ']' in lambda capture list}} lt50-error {{expected ')'}} lt50-note {{to match this '('}}285    {}286    // ge51-ompx-error@+4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'ompx_hold'}}287    // lt51-ompx-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'ompx_hold'}}288    // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}289    // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}290    #pragma omp target map(iterator(it=0:10), tofrom:a)291    {}292    // ompx-error@+8 {{redefinition of 'it'}}293    // ompx-note@+7 {{previous definition is here}}294    // omp-error@+6 {{redefinition of 'it'}}295    // omp-note@+5 {{previous definition is here}}296    // ge51-ompx-error@+4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'ompx_hold'}}297    // lt51-ompx-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'ompx_hold'}}298    // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}299    // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}300    #pragma omp target map(iterator(it=0:10, it=0:20), tofrom:a)301    {}302    // ge60-error@+7 {{expected '(' after 'iterator'}}303    // ge51-ompx-error@+6 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'ompx_hold'}}304    // lt51-ompx-error@+5 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'ompx_hold'}}305    // lt51-error@+4 {{expected '(' after 'iterator'}}306    // ge51-error@+3 {{expected '(' after 'iterator'}}307    // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}308    // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}309    #pragma omp target map(iterator, tofrom:a)310    {}311    // ge51-ompx-error@+4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'ompx_hold'}}312    // lt51-ompx-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'ompx_hold'}}313    // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}314    // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}315    #pragma omp target map(iterator(), tofrom:a)316    {}317    return;318  }319};320 321struct SB {322  unsigned A;323  unsigned B;324  float Arr[100];325  float *Ptr;326  float *foo() {327    return &Arr[0];328  }329};330 331struct SC {332  unsigned A : 2;333  unsigned B : 3;334  unsigned C;335  unsigned D;336  float Arr[100];337  SB S;338  SB ArrS[100];339  SB *PtrS;340  SB *&RPtrS;341  float *Ptr;342 343  SC(SB *&_RPtrS) : RPtrS(_RPtrS) {}344};345 346union SD {347  unsigned A;348  float B;349};350 351void SAclient(int arg) {352  SA<int,123> s;353  s.func(arg); // expected-note {{in instantiation of member function}}354  double marr[10][10][10];355  double marr2[5][10][1];356  double mvla[5][arg][10];357  double ***mptr;358  const int n = 0;359  const int m = 1;360  double mvla2[5][arg][m+n+10];361 362  SB *p;363 364  SD u;365  SC r(p),t(p);366#pragma omp target map(r)367  {}368#pragma omp target map(marr[2] [0:2] [0:2]) // expected-error {{array section does not specify contiguous storage}}369  {}370#pragma omp target map(marr[:] [0:2] [0:2]) // expected-error {{array section does not specify contiguous storage}}371  {}372#pragma omp target map(marr[2][3] [0:2])373  {}374#pragma omp target map(marr[:][:][:])375  {}376#pragma omp target map(marr[:2][:][:])377  {}378#pragma omp target map(marr [arg:][:][:])379  {}380#pragma omp target map(marr [arg:])381  {}382#pragma omp target map(marr [arg:][:arg][:]) // correct if arg is the size of dimension 2383  {}384#pragma omp target map(marr[:arg][:])385  {}386#pragma omp target map(marr[:arg] [n:])387  {}388#pragma omp target map(marr[:][:arg] [n:]) // correct if arg is the size of  dimension 2389  {}390#pragma omp target map(marr[:][:m] [n:])   // expected-error {{array section does not specify contiguous storage}}391  {}392#pragma omp target map(marr [n:m][:arg] [n:])393  {}394#pragma omp target map(marr[:2][:1][:])  // expected-error {{array section does not specify contiguous storage}}395  {}396#pragma omp target map(marr[:2] [1:][:]) // expected-error {{array section does not specify contiguous storage}}397  {}398#pragma omp target map(marr[:2][:][:1])  // expected-error {{array section does not specify contiguous storage}}399  {}400#pragma omp target map(marr[:2][:] [1:]) // expected-error {{array section does not specify contiguous storage}}401  {}402#pragma omp target map(marr[:1][:2][:])403  {}404#pragma omp target map(marr[:1][0][:])405  {}406#pragma omp target map(marr[:arg][:2][:]) // correct if arg is 1407  {}408#pragma omp target map(marr[:1] [3:1][:2])409  {}410#pragma omp target map(marr[:1] [3:arg][:2]) // correct if arg is 1411  {}412#pragma omp target map(marr[:1] [3:2][:2])   // expected-error {{array section does not specify contiguous storage}}413  {}414#pragma omp target map(marr[:2][:10][:])415  {}416#pragma omp target map(marr[:2][:][:5 + 5])417  {}418#pragma omp target map(marr[:2] [2 + 2 - 4:] [0:5 + 5])419  {}420 421#pragma omp target map(marr[:1][:2][0]) // expected-error {{array section does not specify contiguous storage}}422  {}423#pragma omp target map(marr2[:1][:2][0])424  {}425 426#pragma omp target map(mvla[:1][:][0])    // correct if the size of dimension 2 is 1.427  {}428#pragma omp target map(mvla[:2][:arg][:]) // correct if arg is the size of dimension 2.429  {}430#pragma omp target map(mvla[:1][:2][0])   // expected-error {{array section does not specify contiguous storage}}431   {}432#pragma omp target map(mvla[1] [2:arg][:])433  {}434#pragma omp target map(mvla[:1][:][:])435  {}436#pragma omp target map(mvla2[:1][:2][:11])437  {}438#pragma omp target map(mvla2[:1][:2][:10]) // expected-error {{array section does not specify contiguous storage}}439  {}440 441#pragma omp target map(mptr[:2] [2 + 2 - 4:1] [0:5 + 5]) // expected-error {{array section does not specify contiguous storage}}442  {}443#pragma omp target map(mptr[:1][:2 - 1] [2:4 - 3])444  {}445#pragma omp target map(mptr[:1][:arg] [2:4 - 3]) // correct if arg is 1.446  {}447#pragma omp target map(mptr[:1][:2 - 1] [0:2])448  {}449#pragma omp target map(mptr[:1][:2] [0:2]) // expected-error {{array section does not specify contiguous storage}}450  {}451#pragma omp target map(mptr[:1][:] [0:2])  // lt60-error {{section length is unspecified and cannot be inferred because subscripted value is not an array}}452  {}453#pragma omp target map(mptr[:2][:1] [0:2]) // expected-error {{array section does not specify contiguous storage}}454  {}455 456#pragma omp target map(r.ArrS[0].B)457  {}458#pragma omp target map(r.ArrS[:1].B)   // expected-error {{OpenMP array section is not allowed here}}459  {}460#pragma omp target map(r.ArrS[:arg].B) // expected-error {{OpenMP array section is not allowed here}}461  {}462#pragma omp target map(r.ArrS[0].Arr [1:23])463  {}464#pragma omp target map(r.ArrS[0].Arr [1:arg])465  {}466#pragma omp target map(r.ArrS[0].Arr [arg:23])467  {}468#pragma omp target map(r.ArrS[0].Error)          // expected-error {{no member named 'Error' in 'SB'}}469  {}470#pragma omp target map(r.ArrS[0].A, r.ArrS[1].A) // lt50-error {{multiple array elements associated with the same variable are not allowed in map clauses of the same construct}} lt50-note {{used here}}471  {}472#pragma omp target map(r.ArrS[0].A, t.ArrS[1].A)473  {}474#pragma omp target map(r.PtrS[0], r.PtrS->B) // lt50-error {{same pointer dereferenced in multiple different ways in map clause expressions}} lt50-note {{used here}}475  {}476#pragma omp target map(r.PtrS, r.PtrS->B)    // lt50-error {{pointer cannot be mapped along with a section derived from itself}} lt50-note {{used here}}477  {}478#pragma omp target map(r.PtrS->A, r.PtrS->B)479  {}480#pragma omp target map(r.RPtrS[0], r.RPtrS->B) // lt50-error {{same pointer dereferenced in multiple different ways in map clause expressions}} lt50-note {{used here}}481  {}482#pragma omp target map(r.RPtrS, r.RPtrS->B)    // lt50-error {{pointer cannot be mapped along with a section derived from itself}} lt50-note {{used here}}483  {}484#pragma omp target map(r.RPtrS->A, r.RPtrS->B)485  {}486#pragma omp target map(r.S.Arr[:12])487  {}488#pragma omp target map(r.S.foo() [:12]) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}} ge50-error {{expected addressable lvalue in 'map' clause}} ge60-error {{expected addressable lvalue in 'map' clause}}489  {}490#pragma omp target map(r.C, r.D)491  {}492#pragma omp target map(r.C, r.C)     // lt50-error {{variable already marked as mapped in current construct}} lt50-note {{used here}}493  {}494#pragma omp target map(r.C) map(r.C) // lt50-error {{variable already marked as mapped in current construct}} lt50-note {{used here}}495  {}496#pragma omp target map(r.C, r.S)     // this would be an error only caught at runtime - Sema would have to make sure there is not way for the missing data between fields to be mapped somewhere else.497  {}498#pragma omp target map(r, r.S)       // lt50-error {{variable already marked as mapped in current construct}} lt50-note {{used here}}499  {}500#pragma omp target map(r.C, t.C)501  {}502#pragma omp target map(r.A) // expected-error {{bit fields cannot be used to specify storage in a 'map' clause}}503  {}504#pragma omp target map(r.Arr)505  {}506#pragma omp target map(r.Arr [3:5])507  {}508#pragma omp target map(r.Ptr [3:5])509  {}510#pragma omp target map(r.ArrS [3:5].A)         // expected-error {{OpenMP array section is not allowed here}}511  {}512#pragma omp target map(r.ArrS [3:5].Arr [6:7]) // expected-error {{OpenMP array section is not allowed here}}513  {}514#pragma omp target map(r.ArrS[3].Arr [6:7])515  {}516#pragma omp target map(r.S.Arr [4:5])517  {}518#pragma omp target map(r.S.Ptr [4:5])519  {}520#pragma omp target map(r.S.Ptr[:]) // lt60-error {{section length is unspecified and cannot be inferred because subscripted value is not an array}}521  {}522#pragma omp target map((p + 1)->A) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}}523  {}524#pragma omp target map(u.B)        // expected-error {{mapping of union members is not allowed}}525  {}526#pragma omp target527  {528    u.B = 0;529    r.S.foo();530  }531 532#pragma omp target data map(to \533                            : r.C) // lt50-note {{used here}}534  {535#pragma omp target map(r.D)        // lt50-error {{original storage of expression in data environment is shared but data environment do not fully contain mapped expression storage}}536    {}537  }538 539#pragma omp target data map(to \540                            : t.Ptr) // lt50-note {{used here}}541  {542#pragma omp target map(t.Ptr[:23])   // lt50-error {{pointer cannot be mapped along with a section derived from itself}}543    {}544  }545 546#pragma omp target data map(to \547                            : t.C, t.D)548  {549#pragma omp target data map(to \550                            : t.C)551  {552#pragma omp target map(t.D)553    {}554  }555  }556#pragma omp target data map(marr[:][:][:])557  {558#pragma omp target data map(marr)559    {}560  }561 562#pragma omp target data map(to \563                            : t)564  {565#pragma omp target data map(to \566                            : t.C)567  {568#pragma omp target map(t.D)569    {}570  }571  }572}573void foo() {574}575 576bool foobool(int argc) {577  return argc;578}579 580struct S1; // expected-note 2 {{declared here}} // expected-note 3 {{forward declaration of 'S1'}}581extern S1 a;582class S2 {583  mutable int a;584public:585  S2():a(0) { }586  S2(S2 &s2):a(s2.a) { }587  static float S2s;588  static const float S2sc;589};590const float S2::S2sc = 0;591const S2 b;592const S2 ba[5];593class S3 {594  int a;595public:596  S3():a(0) { }597  S3(S3 &s3):a(s3.a) { }598};599const S3 c;600const S3 ca[5];601extern const int f;602class S4 {603  int a;604  S4();605  S4(const S4 &s4);606public:607  S4(int v):a(v) { }608};609class S5 {610  int a;611  S5():a(0) {}612  S5(const S5 &s5):a(s5.a) { }613public:614  S5(int v):a(v) { }615};616 617template <class T>618struct S6;619 620template<>621struct S6<int>622{623   virtual void foo();624};625 626S3 h;627#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}}628 629typedef int from;630 631struct dim {632  double x, y;633};634 635template<typename T>636class Array1D637{638  public:639    unsigned n1;640    unsigned size;641    T * dptr;642 643    inline T& operator() (unsigned i1) { return dptr[i1]; }644 645    Array1D() {n1=0;size=0;dptr=nullptr;}646};647 648template <typename T, int I> // expected-note {{declared here}}649T tmain(T argc) {650  const T d = 5;651  const T da[5] = { 0 };652  S4 e(4);653  S5 g(5);654  T i, t[20];655  T &j = i;656  T *k = &j;657  T x;658  T y;659  T to, tofrom, always, close, present;660  const T (&l)[5] = da;661#pragma omp target map // expected-error {{expected '(' after 'map'}}662  {}663#pragma omp target map( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}664  {}665#pragma omp target map() // expected-error {{expected expression}}666  {}667#pragma omp target map(alloc) // expected-error {{use of undeclared identifier 'alloc'}}668  {}669#pragma omp target map(to argc // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected ',' or ')' in 'map' clause}}670  {}671#pragma omp target map(to:) // expected-error {{expected expression}}672  {}673#pragma omp target map(from: argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}674  {}675#pragma omp target map(x: y) // expected-error {{incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'}}676  {}677#pragma omp target map(x)678  foo();679#pragma omp target map(tofrom: t[:I])680  foo();681#pragma omp target map(T: a) // expected-error {{incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'}} expected-error {{incomplete type 'S1' where a complete type is required}}682  foo();683#pragma omp target map(T) // expected-error {{'T' does not refer to a value}}684  foo();685#pragma omp target map(I) // lt50-error 2 {{expected expression containing only member accesses and/or array sections based on named variables}} ge50-error 2 {{expected addressable lvalue in 'map' clause}} ge60-error 2 {{expected addressable lvalue in 'map' clause}}686  foo();687#pragma omp target map(S2::S2s)688  foo();689#pragma omp target map(S2::S2sc)690  foo();691#pragma omp target map(x)692  foo();693#pragma omp target map(to: x)694  foo();695#pragma omp target map(to: to)696  foo();697#pragma omp target map(to)698  foo();699#pragma omp target map(to, x)700  foo();701#pragma omp target data map(to x) // expected-error {{expected ',' or ')' in 'map' clause}}702#pragma omp target data map(tofrom: argc > 0 ? x : y) // lt50-error 2 {{expected expression containing only member accesses and/or array sections based on named variables}} ge50-error 2 {{expected addressable lvalue in 'map' clause}} ge60-error 2 {{expected addressable lvalue in 'map' clause}}703#pragma omp target data map(argc)704#pragma omp target data map(S1) // expected-error {{'S1' does not refer to a value}}705#pragma omp target data map(a, b, c, d, f) // expected-error {{incomplete type 'S1' where a complete type is required}} warn-warning 2 {{type 'const S2' is not trivially copyable and not guaranteed to be mapped correctly}} warn-warning 2 {{type 'const S3' is not trivially copyable and not guaranteed to be mapped correctly}}706#pragma omp target data map(ba) // warn-warning 2 {{type 'const S2 [5]' is not trivially copyable and not guaranteed to be mapped correctly}}707#pragma omp target data map(ca) // warn-warning 2 {{type 'const S3 [5]' is not trivially copyable and not guaranteed to be mapped correctly}}708#pragma omp target data map(da)709#pragma omp target data map(S2::S2s)710#pragma omp target data map(S2::S2sc)711#pragma omp target data map(e, g) // warn-warning 2 {{type 'S4' is not trivially copyable and not guaranteed to be mapped correctly}} warn-warning 2 {{type 'S5' is not trivially copyable and not guaranteed to be mapped correctly}}712#pragma omp target data map(h) // expected-error {{threadprivate variables are not allowed in 'map' clause}}713#pragma omp target data map(k) map(k) // lt50-error 2 {{variable already marked as mapped in current construct}} lt50-note 2 {{used here}}714#pragma omp target map(k), map(k[:5]) // lt50-error 2 {{pointer cannot be mapped along with a section derived from itself}} lt50-note 2 {{used here}}715  foo();716#pragma omp target data map(da)717#pragma omp target map(da[:4])718  foo();719#pragma omp target data map(k, j, l) // lt50-note 2 {{used here}}720#pragma omp target data map(k[:4]) // lt50-error 2 {{pointer cannot be mapped along with a section derived from itself}}721#pragma omp target data map(j)722#pragma omp target map(l) map(l[:5]) // lt50-error 2 {{variable already marked as mapped in current construct}} lt50-note 2 {{used here}}723  foo();724#pragma omp target data map(k[:4], j, l[:5]) // lt50-note 2 {{used here}}725#pragma omp target data map(k) // lt50-error 2 {{pointer cannot be mapped along with a section derived from itself}}726#pragma omp target data map(j)727#pragma omp target map(l)728  foo();729 730#pragma omp target data map(always, tofrom: x)731#pragma omp target data map(always: x) // lt60-error {{missing map type}}732// ge51-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}733// lt51-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}734// lt60-error@+1 {{missing map type}}735#pragma omp target data map(tofrom, always: x)736#pragma omp target data map(always, tofrom: always, tofrom, x)737#pragma omp target map(tofrom j) // expected-error {{expected ',' or ')' in 'map' clause}}738  foo();739 740#pragma omp target data map(close, tofrom: x)741#pragma omp target data map(close: x) // lt60-error {{missing map type}}742// ge51-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}743// lt51-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}744// lt60-error@+1 {{missing map type}}745#pragma omp target data map(tofrom, close: x)746#pragma omp target data map(close, tofrom: close, tofrom, x)747  foo();748 749#pragma omp target data map(self, tofrom: x) // lt60-error {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}750#pragma omp target data map(self: x) // lt60-error {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}} // lt60-error {{missing map type}}751  foo();752 753// lt51-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}754#pragma omp target data map(present, tofrom: x)755// ge51-error@+2 {{missing map type}}756// lt51-error@+1 {{incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'}}757#pragma omp target data map(present: x)758// ge51-error@+4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}759// lt51-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}760// ge51-error@+2 {{missing map type}}761// lt51-error@+1 {{incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'}}762#pragma omp target data map(tofrom, present: x)763// lt51-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}764#pragma omp target data map(present, tofrom: present, tofrom, x)765  foo();766 767  T marr[10][10], iarr[5];768#pragma omp target data map(marr[10][0:2:2]) // expected-error {{expected ']'}} expected-note {{to match this '['}}769  {}770#pragma omp target data map(iarr[:2:d]) // expected-error {{expected ']'}} expected-note {{to match this '['}}771  {}772  return 0;773}774 775struct SA1{776  int a;777  struct SA1 *p;778  int b[10];779};780struct SB1{781  int a;782  struct SA1 s;783  struct SA1 sa[10];784  struct SA1 *sp[10];785  struct SA1 *p;786};787struct SC1{788  int a;789  struct SB1 s;790  struct SB1 *p;791  int b[10];792};793 794class S8 {795public:796  virtual void foo() = 0;797} *s8;798 799class S9 {800public:801  virtual void foo() {}802} s9;803 804 805int main(int argc, char **argv) {806  const int d = 5;807  const int da[5] = { 0 };808  S4 e(4);809  S5 g(5);810  int i;811  int &j = i;812  int *k = &j;813  S6<int> m;814  int x;815  int y;816  int to, tofrom, always, close, present;817  const int (&l)[5] = da;818  SC1 s;819  SC1 *p;820  int Arr[10];821// expected-error@+4 {{expected '(' after 'map'}}822// lt50-error@+3 {{expected at least one 'map' or 'use_device_ptr' clause for '#pragma omp target data'}}823// omp5x-error@+2 {{expected at least one 'map', 'use_device_ptr', or 'use_device_addr' clause for '#pragma omp target data'}}824// ge60-error@+1 {{expected at least one 'map', 'use_device_ptr', or 'use_device_addr' clause for '#pragma omp target_data'}}825#pragma omp target data map826#pragma omp target data map( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}827#pragma omp target data map() // expected-error {{expected expression}}828#pragma omp target data map(alloc) // expected-error {{use of undeclared identifier 'alloc'}}829#pragma omp target data map(to argc // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected ',' or ')' in 'map' clause}}830#pragma omp target data map(to:) // expected-error {{expected expression}}831#pragma omp target data map(from: argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}832#pragma omp target data map(x: y) // expected-error {{incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'}}833#pragma omp target map(x)834  foo();835#pragma omp target map(to: x)836  foo();837#pragma omp target map(to: to)838  foo();839#pragma omp target map(to)840  foo();841#pragma omp target map(to, x)842  foo();843#pragma omp target data map(to x) // expected-error {{expected ',' or ')' in 'map' clause}}844#pragma omp target data map(tofrom: argc > 0 ? argv[1] : argv[2]) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}} ge50-error {{expected addressable lvalue in 'map' clause}} ge60-error {{expected addressable lvalue in 'map' clause}}845#pragma omp target data map(argc)846#pragma omp target data map(S1) // expected-error {{'S1' does not refer to a value}}847#pragma omp target data map(a, b, c, d, f) // expected-error {{incomplete type 'S1' where a complete type is required}} warn-warning {{type 'const S2' is not trivially copyable and not guaranteed to be mapped correctly}} warn-warning {{type 'const S3' is not trivially copyable and not guaranteed to be mapped correctly}}848#pragma omp target data map(argv[1])849#pragma omp target data map(ba) // warn-warning {{type 'const S2 [5]' is not trivially copyable and not guaranteed to be mapped correctly}}850#pragma omp target data map(ca) // warn-warning {{type 'const S3 [5]' is not trivially copyable and not guaranteed to be mapped correctly}}851#pragma omp target data map(da)852#pragma omp target data map(S2::S2s)853#pragma omp target data map(S2::S2sc)854#pragma omp target data map(e, g) // warn-warning {{type 'S4' is not trivially copyable and not guaranteed to be mapped correctly}} warn-warning {{type 'S5' is not trivially copyable and not guaranteed to be mapped correctly}}855#pragma omp target data map(h) // expected-error {{threadprivate variables are not allowed in 'map' clause}}856#pragma omp target data map(k), map(k) // lt50-error {{variable already marked as mapped in current construct}} lt50-note {{used here}}857#pragma omp target map(k), map(k[:5]) // lt50-error {{pointer cannot be mapped along with a section derived from itself}} lt50-note {{used here}}858  foo();859#pragma omp target data map(da)860#pragma omp target map(da[:4])861  foo();862#pragma omp target data map(k, j, l) // lt50-note {{used here}}863#pragma omp target data map(k[:4]) // lt50-error {{pointer cannot be mapped along with a section derived from itself}}864#pragma omp target data map(j)865#pragma omp target map(l) map(l[:5]) // lt50-error {{variable already marked as mapped in current construct}} lt50-note {{used here}}866  foo();867#pragma omp target data map(k[:4], j, l[:5]) // lt50-note {{used here}}868#pragma omp target data map(k) // lt50-error {{pointer cannot be mapped along with a section derived from itself}}869#pragma omp target data map(j)870#pragma omp target map(l)871  foo();872 873#pragma omp target data map(always, tofrom: x)874#pragma omp target data map(always: x) // lt60-error {{missing map type}}875// ge51-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}876// lt51-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}877// lt60-error@+1 {{missing map type}}878#pragma omp target data map(tofrom, always: x)879#pragma omp target data map(always, tofrom: always, tofrom, x)880#pragma omp target map(tofrom j) // expected-error {{expected ',' or ')' in 'map' clause}}881  foo();882#pragma omp target data map(close, tofrom: x)883#pragma omp target data map(close: x) // lt60-error {{missing map type}}884// ge51-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}885// lt51-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}886// lt60-error@+1 {{missing map type}}887#pragma omp target data map(tofrom, close: x)888  foo();889// lt51-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}890#pragma omp target data map(present, tofrom: x)891// ge51-error@+2 {{missing map type}}892// lt51-error@+1 {{incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'}}893#pragma omp target data map(present: x)894// ge51-error@+4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}895// lt51-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}896// ge51-error@+2 {{missing map type}}897// lt51-error@+1 {{incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'}}898#pragma omp target data map(tofrom, present: x)899  foo();900#pragma omp target private(j) map(j) // expected-error {{private variable cannot be in a map clause in '#pragma omp target' directive}}  expected-note {{defined as private}}901  {}902#pragma omp target firstprivate(j) map(j)  // expected-error {{firstprivate variable cannot be in a map clause in '#pragma omp target' directive}} expected-note {{defined as firstprivate}}903  {}904#pragma omp target map(m) // warn-warning {{type 'S6<int>' is not trivially copyable and not guaranteed to be mapped correctly}}905  {}906#pragma omp target907  { s.a++; }908// lt50-note@+1 {{used here}}909#pragma omp target map(s.s.s)910// lt50-error@+1 {{variable already marked as mapped in current construct}}911  { s.a++; }912// lt50-note@+1 {{used here}}913#pragma omp target map(s.s.s.a)914// lt50-error@+1 {{variable already marked as mapped in current construct}}915  { s.a++; }916// lt50-note@+1 {{used here}}917#pragma omp target map(s.b[:5])918// lt50-error@+1 {{variable already marked as mapped in current construct}}919  { s.a++; }920#pragma omp target map(s.p[:5])921  { s.a++; }922// lt50-note@+1 {{used here}}923#pragma omp target map(s.s.sa[3].a)924// lt50-error@+1 {{variable already marked as mapped in current construct}}925  { s.a++; }926// lt50-note@+1 {{used here}}927#pragma omp target map(s.s.sp[3]->a)928// lt50-error@+1 {{variable already marked as mapped in current construct}}929  { s.a++; }930// lt50-note@+1 {{used here}}931#pragma omp target map(s.p->a)932// lt50-error@+1 {{variable already marked as mapped in current construct}}933  { s.a++; }934// lt50-note@+1 {{used here}}935#pragma omp target map(s.s.p->a)936// lt50-error@+1 {{variable already marked as mapped in current construct}}937  { s.a++; }938// lt50-note@+1 {{used here}}939#pragma omp target map(s.s.s.b[:2])940// lt50-error@+1 {{variable already marked as mapped in current construct}}941  { s.a++; }942// lt50-note@+1 {{used here}}943#pragma omp target map(s.s.p->b[:2])944// lt50-error@+1 {{variable already marked as mapped in current construct}}945  { s.a++; }946// lt50-note@+1 {{used here}}947#pragma omp target map(s.p->p->p->a)948// lt50-error@+1 {{variable already marked as mapped in current construct}}949  { s.a++; }950#pragma omp target map(s.s.s.b[:2])951  { s.s.s.b[0]++; }952#pragma omp target map(s8[0:1], s9) // warn-warning {{type 'class S8' is not trivially copyable and not guaranteed to be mapped correctly}} warn-warning {{type 'class S9' is not trivially copyable and not guaranteed to be mapped correctly}}953  {}954 955  int **BB, *offset, *a;956 957#pragma omp target map(**(BB+*offset)) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}}958  {}959#pragma omp target map(**(BB+y)) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}}960  {}961#pragma omp target map(*(a+*offset)) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}}962  {}963#pragma omp target map(**(*offset+BB)) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}}964  {}965#pragma omp target map(**(y+BB)) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}}966  {}967#pragma omp target map(*(*offset+a)) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}}968  {}969#pragma omp target map(**(*offset+BB+*a)) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}}970  {}971#pragma omp target map(**(*(*(&offset))+BB+*a)) // lt50-error {{expected expression containing only member accesses and/or array sections based on named variables}}972  {}973#pragma omp target map(*(a+(a))) // expected-error {{invalid operands to binary expression ('int *' and 'int *')}}974  {}975#pragma omp target map(*(1+*a+*a)) // expected-error {{indirection requires pointer operand ('int' invalid)}}976  {}977 978#pragma omp target map(delete: a) // expected-error {{map type 'delete' is not allowed for '#pragma omp target'}}979  {}980#pragma omp target map(release: a) // expected-error {{map type 'release' is not allowed for '#pragma omp target'}}981  {}982 983  int marr[10][10], iarr[5];984 985#pragma omp target map(marr[10][0:2:2]) // expected-error {{expected ']'}} expected-note {{to match this '['}}986  {}987#pragma omp target map(iarr[:2:d]) // expected-error {{expected ']'}} expected-note {{to match this '['}}988  {}989 990#pragma omp target data map(Arr[0:4]) // lt50-note {{used here}}991  {992#pragma omp target993    Arr[0] = 2; // lt50-error {{original storage of expression in data environment is shared but data environment do not fully contain mapped expression storage}}994  }995 996  Array1D<dim> pos;997 998#pragma omp target enter data map(to:pos)999#pragma omp target enter data map(to:pos.dptr[0:pos.size])1000#pragma omp target teams distribute parallel for1001  for(int i=0; i<100; i++) {1002    pos(i).x = i;1003    pos(i).y = i+1;1004  }1005 1006  // ge51-ompx-error@+4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'ompx_hold'}}1007  // lt51-ompx-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'ompx_hold'}}1008  // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}1009  // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}1010  #pragma omp target map(iterator(it=0:10), tofrom:a[it])1011  {}1012 1013  // ompx-error@+8 {{use of undeclared identifier 'itt'; did you mean 'it'?}}1014  // ompx-note@+7 {{'it' declared here}}1015  // omp-error@+6 {{use of undeclared identifier 'itt'; did you mean 'it'?}}1016  // omp-note@+5 {{'it' declared here}}1017  // ge51-ompx-error@+4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'ompx_hold'}}1018  // lt51-ompx-error@+3 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'ompx_hold'}}1019  // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present'}}1020  // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper'}}1021  #pragma omp target map(iterator(it=0:10), tofrom:a[itt])1022  {}1023 1024  return tmain<int, 3>(argc)+tmain<from, 4>(argc); // expected-note {{in instantiation of function template specialization 'tmain<int, 3>' requested here}} expected-note {{in instantiation of function template specialization 'tmain<int, 4>' requested here}}1025}1026#endif1027