14967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -fsyntax-only -fopenmp -x c++ -std=c++11 -fexceptions -fcxx-exceptions -verify %s 24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarclass S { 44967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar int a; 54967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar S() : a(0) {} 64967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarpublic: 84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar S(int v) : a(v) {} 94967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar S(const S &s) : a(s.a) {} 104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstatic int sii; 134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+1 {{defined as threadprivate or thread local}} 144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp threadprivate(sii) 154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstatic int globalii; 164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint test_iteration_spaces() { 184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar const int N = 100; 194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar float a[N], b[N], c[N]; 204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar int ii, jj, kk; 214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar float fii; 224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar double dii; 234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0; i < 10; i += 1) { 254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i] + b[i]; 264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (char i = 0; i < 10; i++) { 294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i] + b[i]; 304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (char i = 0; i < 10; i += '\1') { 334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i] + b[i]; 344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (long long i = 0; i < 10; i++) { 374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i] + b[i]; 384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{expression must have integral or unscoped enumeration type, not 'double'}} 404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (long long i = 0; i < 10; i += 1.5) { 424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i] + b[i]; 434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (long long i = 0; i < 'z'; i += 1u) { 464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i] + b[i]; 474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{variable must be of integer or random access iterator type}} 494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (float fi = 0; fi < 10.0; fi++) { 514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[(int)fi] = a[(int)fi] + b[(int)fi]; 524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{variable must be of integer or random access iterator type}} 544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (double fi = 0; fi < 10.0; fi++) { 564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[(int)fi] = a[(int)fi] + b[(int)fi]; 574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int &ref = ii; ref < 10; ref++) { 614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i; i < 10; i++) 654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i]; 664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0, j = 0; i < 10; ++i) 704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i]; 714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (; ii < 10; ++ii) 754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-warning@+3 {{expression result unused}} 784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii + 1; ii < 10; ++ii) 814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (c[ii] = 0; ii < 10; ++ii) 864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Ok to skip parenthesises. 894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (((ii)) = 0; ii < 10; ++ii) 914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} 944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0; i; i++) 964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i]; 974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+3 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} 994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable 'i'}} 1004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0; jj < kk; ii++) 1024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i]; 1034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} 1054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0; !!i; i++) 1074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i]; 1084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} 1104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0; i != 1; i++) 1124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i]; 1134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} 1154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0;; i++) 1174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i]; 1184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Ok. 1204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 11; i > 10; i--) 1224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i]; 1234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Ok. 1254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0; i < 10; ++i) 1274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i]; 1284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Ok. 1304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ++ii) 1324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 1334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable 'ii'}} 1354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ++jj) 1374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[jj]; 1384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable 'ii'}} 1404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ++++ii) 1424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 1434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Ok but undefined behavior (in general, cannot check that incr 1454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// is really loop-invariant). 1464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ii = ii + ii) 1484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 1494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{expression must have integral or unscoped enumeration type, not 'float'}} 1514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ii = ii + 1.0f) 1534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 1544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Ok - step was converted to integer type. 1564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ii = ii + (int)1.1f) 1584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 1594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable 'ii'}} 1614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; jj = ii + 2) 1634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 1644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-warning@+3 {{relational comparison result unused}} 1664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable 'ii'}} 1674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii<10; jj> kk + 2) 1694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 1704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable 'ii'}} 1724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10;) 1744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 1754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-warning@+3 {{expression result unused}} 1774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable 'ii'}} 1784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; !ii) 1804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 1814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable 'ii'}} 1834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ii ? ++ii : ++jj) 1854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 1864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable 'ii'}} 1884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ii = ii < 10) 1904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 1914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be positive due to this condition}} 1934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'ii' to increase on each iteration of OpenMP for loop}} 1944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 1954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ii = ii + 0) 1964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 1974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be positive due to this condition}} 1994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'ii' to increase on each iteration of OpenMP for loop}} 2004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 2014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ii = ii + (int)(0.8 - 0.45)) 2024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 2034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be positive due to this condition}} 2054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'ii' to increase on each iteration of OpenMP for loop}} 2064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 2074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; (ii) < 10; ii -= 25) 2084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 2094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be positive due to this condition}} 2114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'ii' to increase on each iteration of OpenMP for loop}} 2124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 2134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; (ii < 10); ii -= 0) 2144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 2154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be negative due to this condition}} 2174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'ii' to decrease on each iteration of OpenMP for loop}} 2184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 2194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii > 10; (ii += 0)) 2204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 2214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be positive due to this condition}} 2234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'ii' to increase on each iteration of OpenMP for loop}} 2244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 2254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; (ii) = (1 - 1) + (ii)) 2264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 2274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be negative due to this condition}} 2294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'ii' to decrease on each iteration of OpenMP for loop}} 2304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 2314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for ((ii = 0); ii > 10; (ii -= 0)) 2324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 2334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be positive due to this condition}} 2354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'ii' to increase on each iteration of OpenMP for loop}} 2364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 2374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; (ii < 10); (ii -= 0)) 2384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 2394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+2 {{defined as firstprivate}} 2414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as private}} 2424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd firstprivate(ii) 2434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ii++) 2444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 2454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+2 {{defined as linear}} 2474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be linear, predetermined as private}} 2484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd linear(ii) 2494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ii++) 2504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 2514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd private(ii) 2534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ii++) 2544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 2554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd lastprivate(ii) 2574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ii++) 2584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[ii] = a[ii]; 2594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar { 2614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be threadprivate or thread local, predetermined as private}} 2624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 2634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (sii = 0; sii < 10; sii += 1) 2644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[sii] = a[sii]; 2654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 2664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar { 2684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 2694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (globalii = 0; globalii < 10; globalii += 1) 2704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[globalii] = a[globalii]; 2714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 2724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar { 2744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd collapse(2) 2754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (ii = 0; ii < 10; ii += 1) 2764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (globalii = 0; globalii < 10; globalii += 1) 2774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[globalii] += a[globalii] + ii; 2784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 2794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{statement after '#pragma omp target parallel for simd' must be a for loop}} 2814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 2824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (auto &item : a) { 2834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar item = item + 1; 2844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 2854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be positive due to this condition}} 2874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'i' to increase on each iteration of OpenMP for loop}} 2884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 2894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (unsigned i = 9; i < 10; i--) { 2904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i] + b[i]; 2914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 2924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar int(*lb)[4] = nullptr; 2944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 2954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int(*p)[4] = lb; p < lb + 8; ++p) { 2964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 2974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-warning@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 2994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 3004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int a{0}; a < 10; ++a) { 3014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 3024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return 0; 3044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 3054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Iterators allowed in openmp for-loops. 3074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarnamespace std { 3084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct random_access_iterator_tag {}; 3094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartemplate <class Iter> 3104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct iterator_traits { 3114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar typedef typename Iter::difference_type difference_type; 3124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar typedef typename Iter::iterator_category iterator_category; 3134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 3144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartemplate <class Iter> 3154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartypename iterator_traits<Iter>::difference_type 3164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainardistance(Iter first, Iter last) { return first - last; } 3174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 3184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarclass Iter0 { 3194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarpublic: 3204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Iter0() {} 3214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Iter0(const Iter0 &) {} 3224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Iter0 operator++() { return *this; } 3234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Iter0 operator--() { return *this; } 3244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar bool operator<(Iter0 a) { return true; } 3254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 3264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+2 {{candidate function not viable: no known conversion from 'GoodIter' to 'Iter0' for 1st argument}} 3274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+1 2 {{candidate function not viable: no known conversion from 'Iter1' to 'Iter0' for 1st argument}} 3284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint operator-(Iter0 a, Iter0 b) { return 0; } 3294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarclass Iter1 { 3304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarpublic: 3314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Iter1(float f = 0.0f, double d = 0.0) {} 3324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Iter1(const Iter1 &) {} 3334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Iter1 operator++() { return *this; } 3344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Iter1 operator--() { return *this; } 3354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar bool operator<(Iter1 a) { return true; } 3364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar bool operator>=(Iter1 a) { return false; } 3374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 3384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarclass GoodIter { 3394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarpublic: 3404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar GoodIter() {} 3414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar GoodIter(const GoodIter &) {} 3424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar GoodIter(int fst, int snd) {} 3434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar GoodIter &operator=(const GoodIter &that) { return *this; } 3444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar GoodIter &operator=(const Iter0 &that) { return *this; } 3454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar GoodIter &operator+=(int x) { return *this; } 3464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar GoodIter &operator-=(int x) { return *this; } 3474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar explicit GoodIter(void *) {} 3484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar GoodIter operator++() { return *this; } 3494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar GoodIter operator--() { return *this; } 3504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar bool operator!() { return true; } 3514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar bool operator<(GoodIter a) { return true; } 3524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar bool operator<=(GoodIter a) { return true; } 3534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar bool operator>=(GoodIter a) { return false; } 3544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar typedef int difference_type; 3554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar typedef std::random_access_iterator_tag iterator_category; 3564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 3574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+2 {{candidate function not viable: no known conversion from 'const Iter0' to 'GoodIter' for 2nd argument}} 3584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+1 2 {{candidate function not viable: no known conversion from 'Iter1' to 'GoodIter' for 1st argument}} 3594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint operator-(GoodIter a, GoodIter b) { return 0; } 3604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+1 3 {{candidate function not viable: requires single argument 'a', but 2 arguments were provided}} 3614967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarGoodIter operator-(GoodIter a) { return a; } 3624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+2 {{candidate function not viable: no known conversion from 'const Iter0' to 'int' for 2nd argument}} 3634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+1 2 {{candidate function not viable: no known conversion from 'Iter1' to 'GoodIter' for 1st argument}} 3644967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarGoodIter operator-(GoodIter a, int v) { return GoodIter(); } 3654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+1 2 {{candidate function not viable: no known conversion from 'Iter0' to 'GoodIter' for 1st argument}} 3664967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarGoodIter operator+(GoodIter a, int v) { return GoodIter(); } 3674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+2 {{candidate function not viable: no known conversion from 'GoodIter' to 'int' for 1st argument}} 3684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+1 2 {{candidate function not viable: no known conversion from 'Iter1' to 'int' for 1st argument}} 3694967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarGoodIter operator-(int v, GoodIter a) { return GoodIter(); } 3704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+1 2 {{candidate function not viable: no known conversion from 'Iter0' to 'int' for 1st argument}} 3714967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarGoodIter operator+(int v, GoodIter a) { return GoodIter(); } 3724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint test_with_random_access_iterator() { 3744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar GoodIter begin, end; 3754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Iter0 begin0, end0; 3764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 3774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I = begin; I < end; ++I) 3784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 3794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 3804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 3814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter &I = begin; I < end; ++I) 3824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 3834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 3844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I = begin; I >= end; --I) 3854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 3864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-warning@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 3874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 3884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I(begin); I < end; ++I) 3894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 3904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-warning@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 3914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 3924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I(nullptr); I < end; ++I) 3934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 3944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-warning@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 3954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 3964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I(0); I < end; ++I) 3974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 3984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-warning@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 3994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I(1, 2); I < end; ++I) 4014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (begin = GoodIter(0); begin < end; ++begin) 4044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++begin; 4054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+3 {{invalid operands to binary expression ('GoodIter' and 'const Iter0')}} 4064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{could not calculate number of iterations calling 'operator-' with upper and lower loop bounds}} 4074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (begin = begin0; begin < end; ++begin) 4094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++begin; 4104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 4114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (++begin; begin < end; ++begin) 4134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++begin; 4144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (begin = end; begin < end; ++begin) 4164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++begin; 4174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'I'}} 4184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I = begin; I - I; ++I) 4204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'I'}} 4224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I = begin; begin < end; ++I) 4244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'I'}} 4264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I = begin; !I; ++I) 4284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be negative due to this condition}} 4304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'I' to decrease on each iteration of OpenMP for loop}} 4314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I = begin; I >= end; I = I + 1) 4334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I = begin; I >= end; I = I - 1) 4364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable 'I'}} 4384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I = begin; I >= end; I = -I) 4404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be negative due to this condition}} 4424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'I' to decrease on each iteration of OpenMP for loop}} 4434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I = begin; I >= end; I = 2 + I) 4454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable 'I'}} 4474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (GoodIter I = begin; I >= end; I = 2 - I) 4494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{invalid operands to binary expression ('Iter0' and 'int')}} 4514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (Iter0 I = begin0; I < end0; ++I) 4534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Initializer is constructor without params. 4554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+3 {{invalid operands to binary expression ('Iter0' and 'int')}} 4564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-warning@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 4574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (Iter0 I; I < end0; ++I) 4594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Iter1 begin1, end1; 4614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+3 {{invalid operands to binary expression ('Iter1' and 'Iter1')}} 4624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{could not calculate number of iterations calling 'operator-' with upper and lower loop bounds}} 4634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (Iter1 I = begin1; I < end1; ++I) 4654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be negative due to this condition}} 4674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'I' to decrease on each iteration of OpenMP for loop}} 4684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (Iter1 I = begin1; I >= end1; ++I) 4704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+5 {{invalid operands to binary expression ('Iter1' and 'float')}} 4724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+4 {{could not calculate number of iterations calling 'operator-' with upper and lower loop bounds}} 4734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Initializer is constructor with all default params. 4744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-warning@+2 {{initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')}} 4754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (Iter1 I; I < end1; ++I) { 4774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 4784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return 0; 4794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 4804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 4814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartemplate <typename IT, int ST> 4824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarclass TC { 4834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarpublic: 4844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar int dotest_lt(IT begin, IT end) { 4854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be positive due to this condition}} 4864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'I' to increase on each iteration of OpenMP for loop}} 4874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (IT I = begin; I < end; I = I + ST) { 4894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 4914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be positive due to this condition}} 4924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'I' to increase on each iteration of OpenMP for loop}} 4934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (IT I = begin; I <= end; I += ST) { 4954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 4964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 4974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 4984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (IT I = begin; I < end; ++I) { 4994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 5004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar static IT step() { 5044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return IT(ST); 5054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 5074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartemplate <typename IT, int ST = 0> 5084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint dotest_gt(IT begin, IT end) { 5094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 2 {{loop step is expected to be negative due to this condition}} 5104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 2 {{increment expression must cause 'I' to decrease on each iteration of OpenMP for loop}} 5114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 5124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (IT I = begin; I >= end; I = I + ST) { 5134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 5144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 2 {{loop step is expected to be negative due to this condition}} 5164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 2 {{increment expression must cause 'I' to decrease on each iteration of OpenMP for loop}} 5174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 5184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (IT I = begin; I >= end; I += ST) { 5194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 5204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-note@+3 {{loop step is expected to be negative due to this condition}} 5234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-error@+2 {{increment expression must cause 'I' to decrease on each iteration of OpenMP for loop}} 5244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 5254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (IT I = begin; I >= end; ++I) { 5264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 5274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 5304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (IT I = begin; I < end; I += TC<int, ST>::step()) { 5314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ++I; 5324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 5344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid test_with_template() { 5364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar GoodIter begin, end; 5374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar TC<GoodIter, 100> t1; 5384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar TC<GoodIter, -100> t2; 5394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar t1.dotest_lt(begin, end); 5404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar t2.dotest_lt(begin, end); // expected-note {{in instantiation of member function 'TC<GoodIter, -100>::dotest_lt' requested here}} 5414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar dotest_gt(begin, end); // expected-note {{in instantiation of function template specialization 'dotest_gt<GoodIter, 0>' requested here}} 5424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar dotest_gt<unsigned, -10>(0, 100); // expected-note {{in instantiation of function template specialization 'dotest_gt<unsigned int, -10>' requested here}} 5434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 5444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid test_loop_break() { 5464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar const int N = 100; 5474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar float a[N], b[N], c[N]; 5484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 5494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0; i < 10; i++) { 5504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i] + b[i]; 5514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int j = 0; j < 10; ++j) { 5524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar if (a[i] > b[j]) 5534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar break; // OK in nested loop 5544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar switch (i) { 5564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar case 1: 5574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar b[i]++; 5584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar break; 5594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar default: 5604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar break; 5614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar if (c[i] > 10) 5634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar break; // expected-error {{'break' statement cannot be used in OpenMP for loop}} 5644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar if (c[i] > 11) 5664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar break; // expected-error {{'break' statement cannot be used in OpenMP for loop}} 5674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 5704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0; i < 10; i++) { 5714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int j = 0; j < 10; j++) { 5724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i] + b[i]; 5734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar if (c[i] > 10) { 5744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar if (c[i] < 20) { 5754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar break; // OK 5764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 5814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid test_loop_eh() { 5834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar const int N = 100; 5844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar float a[N], b[N], c[N]; 5854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 5864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0; i < 10; i++) { 5874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c[i] = a[i] + b[i]; 5884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar try { 5894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int j = 0; j < 10; ++j) { 5904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar if (a[i] > b[j]) 5914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar throw a[i]; 5924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar throw a[i]; 5944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } catch (float f) { 5954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar if (f > 0.1) 5964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar throw a[i]; 5974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return; // expected-error {{cannot return from OpenMP region}} 5984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 5994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar switch (i) { 6004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar case 1: 6014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar b[i]++; 6024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar break; 6034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar default: 6044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar break; 6054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 6064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int j = 0; j < 10; j++) { 6074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar if (c[i] > 10) 6084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar throw c[i]; 6094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 6104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 6114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar if (c[9] > 10) 6124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar throw c[9]; // OK 6134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 6144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd 6154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0; i < 10; ++i) { 6164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar struct S { 6174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar void g() { throw 0; } 6184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar }; 6194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 6204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 6214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 6224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid test_loop_firstprivate_lastprivate() { 6234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar S s(4); 6244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp target parallel for simd lastprivate(s) firstprivate(s) 6254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int i = 0; i < 16; ++i) 6264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar ; 6274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 628