brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.7 KiB · e9ef234 Raw
206 lines · cpp
1// RUN: %clang_cc1 -x c++ -std=c++11 -verify -fopenmp %s -Wuninitialized2 3// RUN: %clang_cc1 -x c++ -std=c++11 -verify -fopenmp-simd %s -Wuninitialized4 5struct B {6  static int ib[20]; // expected-note 0 {{'B::ib' declared here}}7  static constexpr int bfoo() { return 8; }8};9namespace X {10  B x; // expected-note {{'x' defined here}}11};12constexpr int bfoo() { return 4; }13 14int **z;15const int C1 = 1;16const int C2 = 2;17void test_aligned_colons(int *&rp)18{19  int *B = 0;20  #pragma omp parallel for simd aligned(B:bfoo())21  for (int i = 0; i < 10; ++i) ;22  // expected-error@+1 {{unexpected ':' in nested name specifier; did you mean '::'}}23  #pragma omp parallel for simd aligned(B::ib:B:bfoo())24  for (int i = 0; i < 10; ++i) ;25  #pragma omp parallel for simd aligned(B:B::bfoo())26  for (int i = 0; i < 10; ++i) ;27  // expected-error@+1 {{unexpected ':' in nested name specifier; did you mean '::'?}}28  #pragma omp parallel for simd aligned(z:B:bfoo())29  for (int i = 0; i < 10; ++i) ;30  #pragma omp parallel for simd aligned(B:B::bfoo())31  for (int i = 0; i < 10; ++i) ;32  // expected-error@+2 {{integral constant expression must have integral or unscoped enumeration type, not 'int **'}}33  // expected-error@+1 {{argument of aligned clause should be array, pointer, reference to array or reference to pointer, not 'B'}}34  #pragma omp parallel for simd aligned(X::x : ::z)35  for (int i = 0; i < 10; ++i) ;36  // expected-error@+1 {{integral constant expression must have integral or unscoped enumeration type, not 'B'}}37  #pragma omp parallel for simd aligned(B,rp,::z: X::x)38  for (int i = 0; i < 10; ++i) ;39  #pragma omp parallel for simd aligned(::z)40  for (int i = 0; i < 10; ++i) ;41  // expected-error@+1 {{expected variable name}}42  #pragma omp parallel for simd aligned(B::bfoo())43  for (int i = 0; i < 10; ++i) ;44  // expected-warning@+1 {{aligned clause will be ignored because the requested alignment is not a power of 2}}45  #pragma omp parallel for simd aligned(B::ib,B:C1+C2)46  for (int i = 0; i < 10; ++i) ;47}48 49// expected-note@+1 {{'num' defined here}}50template<int L, class T, class N> T test_template(T* arr, N num) {51  N i;52  T sum = (T)0;53  T ind2 = - num * L;54  // Negative number is passed as L.55  // expected-error@+1 {{argument to 'aligned' clause must be a strictly positive integer value}}56  #pragma omp parallel for simd aligned(arr:L)57  for (i = 0; i < num; ++i) {58    T cur = arr[(int)ind2];59    ind2 += L;60    sum += cur;61  }62  // expected-error@+1 {{argument of aligned clause should be array, pointer, reference to array or reference to pointer, not 'int'}}63  #pragma omp parallel for simd aligned(num:4)64  for (i = 0; i < num; ++i);65  return T();66}67 68template<int LEN> int test_warn() {69  int *ind2 = 0;70  // expected-error@+1 {{argument to 'aligned' clause must be a strictly positive integer value}}71  #pragma omp parallel for simd aligned(ind2:LEN)72  for (int i = 0; i < 100; i++) {73    ind2 += LEN;74  }75  return 0;76}77 78struct S1; // expected-note 2 {{declared here}}79extern S1 a; // expected-note {{'a' declared here}}80class S2 {81  mutable int a;82public:83  S2():a(0) { }84};85const S2 b; // expected-note 1 {{'b' defined here}}86const S2 ba[5];87class S3 {88  int a;89public:90  S3():a(0) { }91};92const S3 ca[5];93class S4 {94  int a;95  S4();96public:97  S4(int v):a(v) { }98};99class S5 {100  int a;101  S5():a(0) {}102public:103  S5(int v):a(v) { }104};105 106S3 h; // expected-note 2 {{'h' defined here}}107#pragma omp threadprivate(h)108 109template<class I, class C> int foomain(I argc, C **argv) {110  I e(argc);111  I g(argc);112  int i; // expected-note {{'i' defined here}}113  // expected-note@+1 {{declared here}}114  int &j = i;115  #pragma omp parallel for simd aligned // expected-error {{expected '(' after 'aligned'}}116  for (I k = 0; k < argc; ++k) ++k;117  #pragma omp parallel for simd aligned ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}118  for (I k = 0; k < argc; ++k) ++k;119  #pragma omp parallel for simd aligned () // expected-error {{expected expression}}120  for (I k = 0; k < argc; ++k) ++k;121  #pragma omp parallel for simd aligned (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}122  for (I k = 0; k < argc; ++k) ++k;123  #pragma omp parallel for simd aligned (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}124  for (I k = 0; k < argc; ++k) ++k;125// FIXME: Should argc really be a pointer?126  #pragma omp parallel for simd aligned (*argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}127  for (I k = 0; k < argc; ++k) ++k;128  #pragma omp parallel for simd aligned (argc : 5) // expected-warning {{aligned clause will be ignored because the requested alignment is not a power of 2}}129  for (I k = 0; k < argc; ++k) ++k;130  #pragma omp parallel for simd aligned (S1) // expected-error {{'S1' does not refer to a value}}131  for (I k = 0; k < argc; ++k) ++k;132  #pragma omp parallel for simd aligned (argv[1]) // expected-error {{expected variable name}}133  for (I k = 0; k < argc; ++k) ++k;134  #pragma omp parallel for simd aligned(e, g)135  for (I k = 0; k < argc; ++k) ++k;136  // expected-error@+1 {{argument of aligned clause should be array, pointer, reference to array or reference to pointer, not 'S3'}}137  #pragma omp parallel for simd aligned(h)138  for (I k = 0; k < argc; ++k) ++k;139  // expected-error@+1 {{argument of aligned clause should be array, pointer, reference to array or reference to pointer, not 'int'}}140  #pragma omp parallel for simd aligned(i)141  for (I k = 0; k < argc; ++k) ++k;142  #pragma omp parallel143  {144    int *v = 0;145    I i;146    #pragma omp parallel for simd aligned(v:16)147    for (I k = 0; k < argc; ++k) { i = k; v += 2; }148  }149  float *f;150  #pragma omp parallel for simd aligned(f)151  for (I k = 0; k < argc; ++k) ++k;152  int v = 0;153  // expected-note@+2 {{initializer of 'j' is not a constant expression}}154  // expected-error@+1 {{integral constant expression}}155  #pragma omp parallel for simd aligned(f:j)156  for (I k = 0; k < argc; ++k) { ++k; v += j; }157  #pragma omp parallel for simd aligned(f)158  for (I k = 0; k < argc; ++k) ++k;159  return 0;160}161 162// expected-note@+1 2 {{'argc' defined here}}163int main(int argc, char **argv) {164  double darr[100];165  // expected-note@+1 {{in instantiation of function template specialization 'test_template<-4, double, int>' requested here}}166  test_template<-4>(darr, 4);167  test_warn<4>(); // ok168  // expected-note@+1 {{in instantiation of function template specialization 'test_warn<0>' requested here}}169  test_warn<0>();170 171  int i;172  int &j = i;173  #pragma omp parallel for simd aligned // expected-error {{expected '(' after 'aligned'}}174  for (int k = 0; k < argc; ++k) ++k;175  #pragma omp parallel for simd aligned ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}176  for (int k = 0; k < argc; ++k) ++k;177  #pragma omp parallel for simd aligned () // expected-error {{expected expression}}178  for (int k = 0; k < argc; ++k) ++k;179  #pragma omp parallel for simd aligned (argv // expected-error {{expected ')'}} expected-note {{to match this '('}}180  for (int k = 0; k < argc; ++k) ++k;181  // expected-error@+1 {{argument of aligned clause should be array, pointer, reference to array or reference to pointer, not 'int'}}182  #pragma omp parallel for simd aligned (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}183  for (int k = 0; k < argc; ++k) ++k;184  #pragma omp parallel for simd aligned (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}185  for (int k = 0; k < argc; ++k) ++k;186  // expected-error@+1 {{argument of aligned clause should be array, pointer, reference to array or reference to pointer, not 'int'}}187  #pragma omp parallel for simd aligned (argc)188  for (int k = 0; k < argc; ++k) ++k;189  #pragma omp parallel for simd aligned (S1) // expected-error {{'S1' does not refer to a value}}190  for (int k = 0; k < argc; ++k) ++k;191  // expected-error@+2 {{argument of aligned clause should be array, pointer, reference to array or reference to pointer, not 'S1'}}192  // expected-error@+1 {{argument of aligned clause should be array, pointer, reference to array or reference to pointer, not 'S2'}}193  #pragma omp parallel for simd aligned (a, b) 194  for (int k = 0; k < argc; ++k) ++k;195  #pragma omp parallel for simd aligned (argv[1]) // expected-error {{expected variable name}}196  for (int k = 0; k < argc; ++k) ++k;197  // expected-error@+1 {{argument of aligned clause should be array, pointer, reference to array or reference to pointer, not 'S3'}}198  #pragma omp parallel for simd aligned(h)199  for (int k = 0; k < argc; ++k) ++k;200  int *pargc = &argc;201  // expected-note@+1 {{in instantiation of function template specialization 'foomain<int *, char>' requested here}}202  foomain<int*,char>(pargc,argv);203  return 0;204}205 206