summaryrefslogtreecommitdiffstats
path: root/test/Parser/pragma-unroll.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/Parser/pragma-unroll.cpp')
-rw-r--r--test/Parser/pragma-unroll.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/test/Parser/pragma-unroll.cpp b/test/Parser/pragma-unroll.cpp
new file mode 100644
index 0000000000..1d89e63028
--- /dev/null
+++ b/test/Parser/pragma-unroll.cpp
@@ -0,0 +1,89 @@
+// RUN: %clang_cc1 -std=c++11 -verify %s
+
+// Note that this puts the expected lines before the directives to work around
+// limitations in the -verify mode.
+
+void test(int *List, int Length) {
+ int i = 0;
+
+#pragma unroll
+ while (i + 1 < Length) {
+ List[i] = i;
+ }
+
+#pragma unroll 4
+ while (i - 1 < Length) {
+ List[i] = i;
+ }
+
+#pragma unroll(8)
+ while (i - 2 < Length) {
+ List[i] = i;
+ }
+
+#pragma unroll
+#pragma unroll(8)
+ while (i - 3 < Length) {
+ List[i] = i;
+ }
+
+#pragma clang loop unroll(enable)
+#pragma unroll(8)
+ while (i - 4 < Length) {
+ List[i] = i;
+ }
+
+#pragma unroll
+#pragma clang loop unroll_count(4)
+ while (i - 5 < Length) {
+ List[i] = i;
+ }
+
+/* expected-error {{expected ')'}} */ #pragma unroll(4
+/* expected-error {{missing argument to '#pragma unroll'; expected a positive integer value}} */ #pragma unroll()
+/* expected-warning {{extra tokens at end of '#pragma unroll'}} */ #pragma unroll 1 2
+ while (i-6 < Length) {
+ List[i] = i;
+ }
+
+/* expected-error {{invalid argument; expected a positive integer value}} */ #pragma unroll(()
+/* expected-error {{invalid argument; expected a positive integer value}} */ #pragma unroll -
+/* expected-error {{invalid argument; expected a positive integer value}} */ #pragma unroll(0)
+/* expected-error {{invalid argument; expected a positive integer value}} */ #pragma unroll 0
+/* expected-error {{invalid argument; expected a positive integer value}} */ #pragma unroll(3000000000)
+/* expected-error {{invalid argument; expected a positive integer value}} */ #pragma unroll 3000000000
+ while (i-8 < Length) {
+ List[i] = i;
+ }
+
+#pragma unroll
+/* expected-error {{expected a for, while, or do-while loop to follow '#pragma unroll'}} */ int j = Length;
+#pragma unroll 4
+/* expected-error {{expected a for, while, or do-while loop to follow '#pragma unroll'}} */ int k = Length;
+
+/* expected-error {{incompatible directives 'unroll(disable)' and '#pragma unroll(4)'}} */ #pragma unroll 4
+#pragma clang loop unroll(disable)
+ while (i-10 < Length) {
+ List[i] = i;
+ }
+
+/* expected-error {{duplicate directives '#pragma unroll' and '#pragma unroll'}} */ #pragma unroll
+#pragma unroll
+ while (i-14 < Length) {
+ List[i] = i;
+ }
+
+/* expected-error {{duplicate directives 'unroll(enable)' and '#pragma unroll'}} */ #pragma unroll
+#pragma clang loop unroll(enable)
+ while (i-15 < Length) {
+ List[i] = i;
+ }
+
+/* expected-error {{duplicate directives '#pragma unroll(4)' and '#pragma unroll(4)'}} */ #pragma unroll 4
+#pragma unroll(4)
+ while (i-16 < Length) {
+ List[i] = i;
+ }
+
+#pragma unroll
+/* expected-error {{expected statement}} */ }