brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.4 KiB · 6536d94 Raw
317 lines · c
1// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s -Wuninitialized2 3// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify %s -Wuninitialized4 5// expected-error@+1 {{unexpected OpenMP directive '#pragma omp parallel for'}}6#pragma omp parallel for7 8// expected-error@+1 {{unexpected OpenMP directive '#pragma omp parallel for'}}9#pragma omp parallel for foo10 11void test_no_clause(void) {12  int i;13#pragma omp parallel for14  for (i = 0; i < 16; ++i)15    ;16 17// expected-error@+2 {{statement after '#pragma omp parallel for' must be a for loop}}18#pragma omp parallel for19  ++i;20}21 22void test_branch_protected_scope(void) {23  int i = 0;24L1:25  ++i;26 27  int x[24];28 29#pragma omp parallel for30  for (i = 0; i < 16; ++i) {31    if (i == 5)32      goto L1; // expected-error {{use of undeclared label 'L1'}}33    else if (i == 6)34      return; // expected-error {{cannot return from OpenMP region}}35    else if (i == 7)36      goto L2;37    else if (i == 8) {38    L2:39      x[i]++;40    }41  }42 43  if (x[0] == 0)44    goto L2; // expected-error {{use of undeclared label 'L2'}}45  else if (x[1] == 1)46    goto L1;47}48 49void test_invalid_clause(void) {50  int i;51// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for' are ignored}}52#pragma omp parallel for foo bar53  for (i = 0; i < 16; ++i)54    ;55}56 57void test_non_identifiers(void) {58  int i, x;59 60// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for' are ignored}}61#pragma omp parallel for;62  for (i = 0; i < 16; ++i)63    ;64 65// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for' are ignored}}66#pragma omp parallel for private(x);67  for (i = 0; i < 16; ++i)68    ;69 70// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for' are ignored}}71#pragma omp parallel for, private(x);72  for (i = 0; i < 16; ++i)73    ;74}75 76extern int foo(void);77 78void test_collapse(void) {79  int i;80// expected-error@+1 {{expected '('}}81#pragma omp parallel for collapse82  for (i = 0; i < 16; ++i)83    ;84// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}85#pragma omp parallel for collapse(86  for (i = 0; i < 16; ++i)87    ;88// expected-error@+1 {{expected expression}}89#pragma omp parallel for collapse()90  for (i = 0; i < 16; ++i)91    ;92// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}93#pragma omp parallel for collapse(,94  for (i = 0; i < 16; ++i)95    ;96// expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}97#pragma omp parallel for collapse(, )98  for (i = 0; i < 16; ++i)99    ;100// expected-warning@+2 {{extra tokens at the end of '#pragma omp parallel for' are ignored}}101// expected-error@+1 {{expected '('}}102#pragma omp parallel for collapse 4)103  for (i = 0; i < 16; ++i)104    ;105// expected-error@+2 {{expected ')'}}106// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}107#pragma omp parallel for collapse(4108  for (i = 0; i < 16; ++i)109    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for', but found only 1}}110// expected-error@+2 {{expected ')'}}111// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}112#pragma omp parallel for collapse(4,113  for (i = 0; i < 16; ++i)114    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for', but found only 1}}115// expected-error@+2 {{expected ')'}}116// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}117#pragma omp parallel for collapse(4, )118  for (i = 0; i < 16; ++i)119    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for', but found only 1}}120// expected-note@+1 {{as specified in 'collapse' clause}}121#pragma omp parallel for collapse(4)122  for (i = 0; i < 16; ++i)123    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for', but found only 1}}124// expected-error@+2 {{expected ')'}}125// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}126#pragma omp parallel for collapse(4 4)127  for (i = 0; i < 16; ++i)128    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for', but found only 1}}129// expected-error@+2 {{expected ')'}}130// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}131#pragma omp parallel for collapse(4, , 4)132  for (i = 0; i < 16; ++i)133    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for', but found only 1}}134#pragma omp parallel for collapse(4)135  for (int i1 = 0; i1 < 16; ++i1)136    for (int i2 = 0; i2 < 16; ++i2)137      for (int i3 = 0; i3 < 16; ++i3)138        for (int i4 = 0; i4 < 16; ++i4)139          foo();140// expected-error@+2 {{expected ')'}}141// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}142#pragma omp parallel for collapse(4, 8)143  for (i = 0; i < 16; ++i)144    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for', but found only 1}}145// expected-error@+1 {{integer constant expression}}146#pragma omp parallel for collapse(2.5)147  for (i = 0; i < 16; ++i)148    ;149// expected-error@+1 {{integer constant expression}}150#pragma omp parallel for collapse(foo())151  for (i = 0; i < 16; ++i)152    ;153// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}154#pragma omp parallel for collapse(-5)155  for (i = 0; i < 16; ++i)156    ;157// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}158#pragma omp parallel for collapse(0)159  for (i = 0; i < 16; ++i)160    ;161// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}162#pragma omp parallel for collapse(5 - 5)163  for (i = 0; i < 16; ++i)164    ;165// expected-note@+1 2 {{defined as firstprivate}}166#pragma omp parallel for collapse(2) firstprivate(i)167  for (i = 0; i < 16; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp parallel for' directive may not be firstprivate, predetermined as private}}168// expected-note@+1 {{variable with automatic storage duration is predetermined as private; perhaps you forget to enclose 'omp for' directive into a parallel or another task region?}}169    for (int j = 0; j < 16; ++j)170// expected-error@+2 2 {{reduction variable must be shared}}171// expected-error@+1 {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}172#pragma omp for reduction(+ : i, j)173      for (int k = 0; k < 16; ++k)174        i += j;175}176 177void test_private(void) {178  int i;179// expected-error@+2 {{expected expression}}180// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}181#pragma omp parallel for private(182  for (i = 0; i < 16; ++i)183    ;184// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}185// expected-error@+1 2 {{expected expression}}186#pragma omp parallel for private(,187  for (i = 0; i < 16; ++i)188    ;189// expected-error@+1 2 {{expected expression}}190#pragma omp parallel for private(, )191  for (i = 0; i < 16; ++i)192    ;193// expected-error@+1 {{expected expression}}194#pragma omp parallel for private()195  for (i = 0; i < 16; ++i)196    ;197// expected-error@+1 {{expected expression}}198#pragma omp parallel for private(int)199  for (i = 0; i < 16; ++i)200    ;201// expected-error@+1 {{expected variable name}}202#pragma omp parallel for private(0)203  for (i = 0; i < 16; ++i)204    ;205 206  int x, y, z;207#pragma omp parallel for private(x)208  for (i = 0; i < 16; ++i)209    ;210#pragma omp parallel for private(x, y)211  for (i = 0; i < 16; ++i)212    ;213#pragma omp parallel for private(x, y, z)214  for (i = 0; i < 16; ++i) {215    x = y * i + z;216  }217}218 219void test_lastprivate(void) {220  int i;221// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}222// expected-error@+1 {{expected expression}}223#pragma omp parallel for lastprivate(224  for (i = 0; i < 16; ++i)225    ;226 227// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}228// expected-error@+1 2 {{expected expression}}229#pragma omp parallel for lastprivate(,230  for (i = 0; i < 16; ++i)231    ;232// expected-error@+1 2 {{expected expression}}233#pragma omp parallel for lastprivate(, )234  for (i = 0; i < 16; ++i)235    ;236// expected-error@+1 {{expected expression}}237#pragma omp parallel for lastprivate()238  for (i = 0; i < 16; ++i)239    ;240// expected-error@+1 {{expected expression}}241#pragma omp parallel for lastprivate(int)242  for (i = 0; i < 16; ++i)243    ;244// expected-error@+1 {{expected variable name}}245#pragma omp parallel for lastprivate(0)246  for (i = 0; i < 16; ++i)247    ;248 249  int x, y, z;250#pragma omp parallel for lastprivate(x)251  for (i = 0; i < 16; ++i)252    ;253#pragma omp parallel for lastprivate(x, y)254  for (i = 0; i < 16; ++i)255    ;256#pragma omp parallel for lastprivate(x, y, z)257  for (i = 0; i < 16; ++i)258    ;259}260 261void test_firstprivate(void) {262  int i;263// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}264// expected-error@+1 {{expected expression}}265#pragma omp parallel for firstprivate(266  for (i = 0; i < 16; ++i)267    ;268 269// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}270// expected-error@+1 2 {{expected expression}}271#pragma omp parallel for firstprivate(,272  for (i = 0; i < 16; ++i)273    ;274// expected-error@+1 2 {{expected expression}}275#pragma omp parallel for firstprivate(, )276  for (i = 0; i < 16; ++i)277    ;278// expected-error@+1 {{expected expression}}279#pragma omp parallel for firstprivate()280  for (i = 0; i < 16; ++i)281    ;282// expected-error@+1 {{expected expression}}283#pragma omp parallel for firstprivate(int)284  for (i = 0; i < 16; ++i)285    ;286// expected-error@+1 {{expected variable name}}287#pragma omp parallel for firstprivate(0)288  for (i = 0; i < 16; ++i)289    ;290 291  int x, y, z;292#pragma omp parallel for lastprivate(x) firstprivate(x)293  for (i = 0; i < 16; ++i)294    ;295#pragma omp parallel for lastprivate(x, y) firstprivate(x, y)296  for (i = 0; i < 16; ++i)297    ;298#pragma omp parallel for lastprivate(x, y, z) firstprivate(x, y, z)299  for (i = 0; i < 16; ++i)300    ;301}302 303void test_loop_messages(void) {304  float a[100], b[100], c[100];305// expected-error@+2 {{variable must be of integer or pointer type}}306#pragma omp parallel for307  for (float fi = 0; fi < 10.0; fi++) {308    c[(int)fi] = a[(int)fi] + b[(int)fi];309  }310// expected-error@+2 {{variable must be of integer or pointer type}}311#pragma omp parallel for312  for (double fi = 0; fi < 10.0; fi++) {313    c[(int)fi] = a[(int)fi] + b[(int)fi];314  }315}316 317