1176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// RUN: %clang_cc1 -std=c++11 -verify %s 2176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 3176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// Note that this puts the expected lines before the directives to work around 4176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// limitations in the -verify mode. 5176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 6176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid test(int *List, int Length) { 7176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines int i = 0; 8176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 9176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma unroll 10176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i + 1 < Length) { 11176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 12176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 13176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 14176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma nounroll 15176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i < Length) { 16176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 17176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 18176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 19176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma unroll 4 20176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i - 1 < Length) { 21176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 22176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 23176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 24176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma unroll(8) 25176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i - 2 < Length) { 26176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 27176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 28176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected ')'}} */ #pragma unroll(4 30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{missing argument; expected an integer value}} */ #pragma unroll() 31176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-warning {{extra tokens at end of '#pragma unroll'}} */ #pragma unroll 1 2 32176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i-6 < Length) { 33176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 34176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 35176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 36176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-warning {{extra tokens at end of '#pragma nounroll'}} */ #pragma nounroll 1 37176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i-7 < Length) { 38176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 39176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 40176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 41176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected ')'}} */ #pragma unroll(() 42176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected expression}} */ #pragma unroll - 43176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{invalid value '0'; must be positive}} */ #pragma unroll(0) 44176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{invalid value '0'; must be positive}} */ #pragma unroll 0 45176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{value '3000000000' is too large}} */ #pragma unroll(3000000000) 46176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{value '3000000000' is too large}} */ #pragma unroll 3000000000 47176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i-8 < Length) { 48176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 49176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 50176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 51176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma unroll 52176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected a for, while, or do-while loop to follow '#pragma unroll'}} */ int j = Length; 53176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma unroll 4 54176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected a for, while, or do-while loop to follow '#pragma unroll'}} */ int k = Length; 55176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma nounroll 56176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected a for, while, or do-while loop to follow '#pragma nounroll'}} */ int l = Length; 57176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 58176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{incompatible directives 'unroll(disable)' and '#pragma unroll(4)'}} */ #pragma unroll 4 59176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma clang loop unroll(disable) 60176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i-10 < Length) { 61176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 62176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 63176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 64176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{incompatible directives 'unroll(full)' and '#pragma unroll(4)'}} */ #pragma unroll(4) 65176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma clang loop unroll(full) 66176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i-11 < Length) { 67176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 68176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 69176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 7087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar/* expected-error {{incompatible directives 'unroll(enable)' and '#pragma unroll(4)'}} */ #pragma unroll(4) 7187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma clang loop unroll(enable) 7287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar while (i-11 < Length) { 7387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar List[i] = i; 7487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar } 7587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 76176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{incompatible directives '#pragma unroll' and '#pragma unroll(4)'}} */ #pragma unroll(4) 77176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma unroll 78176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i-11 < Length) { 79176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 80176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 81176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 82176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{incompatible directives '#pragma nounroll' and 'unroll_count(4)'}} */ #pragma clang loop unroll_count(4) 83176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma nounroll 84176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i-12 < Length) { 85176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 86176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 87176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 88176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{duplicate directives '#pragma nounroll' and '#pragma nounroll'}} */ #pragma nounroll 89176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma nounroll 90176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i-13 < Length) { 91176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 92176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 93176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 94176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{duplicate directives '#pragma unroll' and '#pragma unroll'}} */ #pragma unroll 95176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma unroll 96176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i-14 < Length) { 97176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 98176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 99176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 100176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{duplicate directives 'unroll(full)' and '#pragma unroll'}} */ #pragma unroll 101176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma clang loop unroll(full) 102176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i-15 < Length) { 103176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 104176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 105176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 106176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{duplicate directives '#pragma unroll(4)' and '#pragma unroll(4)'}} */ #pragma unroll 4 107176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma unroll(4) 108176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i-16 < Length) { 109176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 110176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 111176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 112176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma unroll 113176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected statement}} */ } 114