brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 583793a Raw
299 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -std=c++11 -ast-print %s | FileCheck %s2// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s3// RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s4 5// RUN: %clang_cc1 -verify -fopenmp-simd -std=c++11 -ast-print %s | FileCheck %s6// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -emit-pch -o %t %s7// RUN: %clang_cc1 -fopenmp-simd -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s8// expected-no-diagnostics9 10#ifndef HEADER11#define HEADER12 13struct ST {14  int *a;15};16typedef int arr[10];17typedef ST STarr[10];18struct SA {19  const int da[5] = { 0 };20  ST g[10];21  STarr &rg = g;22  int i;23  int &j = i;24  int *k = &j;25  int *&z = k;26  int aa[10];27  arr &raa = aa;28  void func(int arg) {29#pragma omp target is_device_ptr(k)30    {}31#pragma omp target is_device_ptr(z)32    {}33#pragma omp target is_device_ptr(aa) // OK34    {}35#pragma omp target is_device_ptr(raa) // OK36    {}37#pragma omp target is_device_ptr(g) // OK38    {}39#pragma omp target is_device_ptr(rg) // OK40    {}41#pragma omp target is_device_ptr(da) // OK42    {}43  return;44 }45};46// CHECK: struct SA47// CHECK-NEXT: const int da[5] = {0};48// CHECK-NEXT: ST g[10];49// CHECK-NEXT: STarr &rg = this->g;50// CHECK-NEXT: int i;51// CHECK-NEXT: int &j = this->i;52// CHECK-NEXT: int *k = &this->j;53// CHECK-NEXT: int *&z = this->k;54// CHECK-NEXT: int aa[10];55// CHECK-NEXT: arr &raa = this->aa;56// CHECK-NEXT: func(57// CHECK-NEXT: #pragma omp target is_device_ptr(this->k){{$}}58// CHECK-NEXT: {59// CHECK-NEXT: }60// CHECK-NEXT: #pragma omp target is_device_ptr(this->z)61// CHECK-NEXT: {62// CHECK-NEXT: }63// CHECK-NEXT: #pragma omp target is_device_ptr(this->aa)64// CHECK-NEXT: {65// CHECK-NEXT: }66// CHECK-NEXT: #pragma omp target is_device_ptr(this->raa)67// CHECK-NEXT: {68// CHECK-NEXT: }69// CHECK-NEXT: #pragma omp target is_device_ptr(this->g)70// CHECK-NEXT: {71// CHECK-NEXT: }72// CHECK-NEXT: #pragma omp target is_device_ptr(this->rg)73// CHECK-NEXT: {74// CHECK-NEXT: }75// CHECK-NEXT: #pragma omp target is_device_ptr(this->da)76 77struct SB {78  unsigned A;79  unsigned B;80  float Arr[100];81  float *Ptr;82  float *foo() {83    return &Arr[0];84  }85};86 87struct SC {88  unsigned A : 2;89  unsigned B : 3;90  unsigned C;91  unsigned D;92  float Arr[100];93  SB S;94  SB ArrS[100];95  SB *PtrS;96  SB *&RPtrS;97  float *Ptr;98 99  SC(SB *&_RPtrS) : RPtrS(_RPtrS) {}100};101 102union SD {103  unsigned A;104  float B;105};106 107struct S1;108extern S1 a;109class S2 {110  mutable int a;111public:112  S2():a(0) { }113  S2(S2 &s2):a(s2.a) { }114  static float S2s;115  static const float S2sc;116};117const float S2::S2sc = 0;118const S2 b;119const S2 ba[5];120class S3 {121  int a;122public:123  S3():a(0) { }124  S3(S3 &s3):a(s3.a) { }125};126const S3 c;127const S3 ca[5];128extern const int f;129class S4 {130  int a;131  S4();132  S4(const S4 &s4);133public:134  S4(int v):a(v) { }135};136class S5 {137  int a;138  S5():a(0) {}139  S5(const S5 &s5):a(s5.a) { }140public:141  S5(int v):a(v) { }142};143 144S3 h;145#pragma omp threadprivate(h)146 147typedef struct {148  int a;149} S6;150 151template <typename T>152T tmain(T argc) {153  const T da[5] = { 0 };154  S6 h[10];155  auto &rh = h;156  T i;157  T &j = i;158  T *k = &j;159  T *&z = k;160  T aa[10];161  auto &raa = aa;162#pragma omp target is_device_ptr(k)163  {}164#pragma omp target is_device_ptr(z)165  {}166#pragma omp target is_device_ptr(aa)167  {}168#pragma omp target is_device_ptr(raa)169  {}170#pragma omp target is_device_ptr(h)171  {}172#pragma omp target is_device_ptr(rh)173  {}174#pragma omp target is_device_ptr(da)175  {}176  return 0;177}178 179// CHECK: template<> int tmain<int>(int argc) {180// CHECK-NEXT: const int da[5] = {0};181// CHECK-NEXT: S6 h[10];182// CHECK-NEXT: auto &rh = h;183// CHECK-NEXT: int i;184// CHECK-NEXT: int &j = i;185// CHECK-NEXT: int *k = &j;186// CHECK-NEXT: int *&z = k;187// CHECK-NEXT: int aa[10];188// CHECK-NEXT: auto &raa = aa;189// CHECK-NEXT: #pragma omp target is_device_ptr(k)190// CHECK-NEXT: {191// CHECK-NEXT: }192// CHECK-NEXT: #pragma omp target is_device_ptr(z)193// CHECK-NEXT: {194// CHECK-NEXT: }195// CHECK-NEXT: #pragma omp target is_device_ptr(aa)196// CHECK-NEXT: {197// CHECK-NEXT: }198// CHECK-NEXT: #pragma omp target is_device_ptr(raa)199// CHECK-NEXT: {200// CHECK-NEXT: }201// CHECK-NEXT: #pragma omp target is_device_ptr(h)202// CHECK-NEXT: {203// CHECK-NEXT: }204// CHECK-NEXT: #pragma omp target is_device_ptr(rh)205// CHECK-NEXT: {206// CHECK-NEXT: }207// CHECK-NEXT: #pragma omp target is_device_ptr(da)208 209// CHECK: template<> int *tmain<int *>(int *argc) {210// CHECK-NEXT: int *const da[5] = {0};211// CHECK-NEXT: S6 h[10];212// CHECK-NEXT: auto &rh = h;213// CHECK-NEXT: int *i;214// CHECK-NEXT: int *&j = i;215// CHECK-NEXT: int **k = &j;216// CHECK-NEXT: int **&z = k;217// CHECK-NEXT: int *aa[10];218// CHECK-NEXT: auto &raa = aa;219// CHECK-NEXT: #pragma omp target is_device_ptr(k)220// CHECK-NEXT: {221// CHECK-NEXT: }222// CHECK-NEXT: #pragma omp target is_device_ptr(z)223// CHECK-NEXT: {224// CHECK-NEXT: }225// CHECK-NEXT: #pragma omp target is_device_ptr(aa)226// CHECK-NEXT: {227// CHECK-NEXT: }228// CHECK-NEXT: #pragma omp target is_device_ptr(raa)229// CHECK-NEXT: {230// CHECK-NEXT: }231// CHECK-NEXT: #pragma omp target is_device_ptr(h)232// CHECK-NEXT: {233// CHECK-NEXT: }234// CHECK-NEXT: #pragma omp target is_device_ptr(rh)235// CHECK-NEXT: {236// CHECK-NEXT: }237// CHECK-NEXT: #pragma omp target is_device_ptr(da)238 239// CHECK-LABEL: int main(int argc, char **argv) {240int main(int argc, char **argv) {241  const int da[5] = { 0 };242  S6 h[10];243  auto &rh = h;244  int i;245  int &j = i;246  int *k = &j;247  int *&z = k;248  int aa[10];249  auto &raa = aa;250// CHECK-NEXT: const int da[5] = {0};251// CHECK-NEXT: S6 h[10];252// CHECK-NEXT: auto &rh = h;253// CHECK-NEXT: int i;254// CHECK-NEXT: int &j = i;255// CHECK-NEXT: int *k = &j;256// CHECK-NEXT: int *&z = k;257// CHECK-NEXT: int aa[10];258// CHECK-NEXT: auto &raa = aa;259#pragma omp target is_device_ptr(k)260// CHECK-NEXT: #pragma omp target is_device_ptr(k)261  {}262// CHECK-NEXT: {263// CHECK-NEXT: }264#pragma omp target is_device_ptr(z)265// CHECK-NEXT: #pragma omp target is_device_ptr(z)266  {}267// CHECK-NEXT: {268// CHECK-NEXT: }269#pragma omp target is_device_ptr(aa)270// CHECK-NEXT: #pragma omp target is_device_ptr(aa)271  {}272// CHECK-NEXT: {273// CHECK-NEXT: }274#pragma omp target is_device_ptr(raa)275// CHECK-NEXT: #pragma omp target is_device_ptr(raa)276  {}277// CHECK-NEXT: {278// CHECK-NEXT: }279#pragma omp target is_device_ptr(h)280// CHECK-NEXT: #pragma omp target is_device_ptr(h)281  {}282// CHECK-NEXT: {283// CHECK-NEXT: }284#pragma omp target is_device_ptr(rh)285// CHECK-NEXT: #pragma omp target is_device_ptr(rh)286  {}287// CHECK-NEXT: {288// CHECK-NEXT: }289#pragma omp target is_device_ptr(da)290// CHECK-NEXT: #pragma omp target is_device_ptr(da)291  {}292// CHECK-NEXT: {293// CHECK-NEXT: }294  return tmain<int>(argc) + *tmain<int *>(&argc);295}296 297 298#endif299