1 // RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s 2 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s 3 // RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s 4 // expected-no-diagnostics 5 6 #ifndef HEADER 7 #define HEADER 8 9 void foo() {} 10 11 template <class T> 12 T tmain (T argc) { 13 T b = argc, c, d, e, f, g; 14 static T a; 15 #pragma omp for ordered 16 for (int i =0 ; i < argc; ++i) 17 #pragma omp ordered 18 { 19 a=2; 20 } 21 #pragma omp for ordered 22 for (int i =0 ; i < argc; ++i) 23 #pragma omp ordered threads 24 { 25 a=2; 26 } 27 #pragma omp simd 28 for (int i =0 ; i < argc; ++i) 29 #pragma omp ordered simd 30 { 31 a=2; 32 } 33 #pragma omp for simd 34 for (int i =0 ; i < argc; ++i) 35 #pragma omp ordered simd 36 { 37 a=2; 38 } 39 #pragma omp parallel for simd 40 for (int i =0 ; i < argc; ++i) 41 #pragma omp ordered simd 42 { 43 a=2; 44 } 45 return (0); 46 } 47 48 // CHECK: static int a; 49 // CHECK-NEXT: #pragma omp for ordered 50 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 51 // CHECK-NEXT: #pragma omp ordered 52 // CHECK-NEXT: { 53 // CHECK-NEXT: a = 2; 54 // CHECK-NEXT: } 55 // CHECK-NEXT: #pragma omp for ordered 56 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 57 // CHECK-NEXT: #pragma omp ordered threads 58 // CHECK-NEXT: { 59 // CHECK-NEXT: a = 2; 60 // CHECK-NEXT: } 61 // CHECK-NEXT: #pragma omp simd 62 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 63 // CHECK-NEXT: #pragma omp ordered simd 64 // CHECK-NEXT: { 65 // CHECK-NEXT: a = 2; 66 // CHECK-NEXT: } 67 // CHECK-NEXT: #pragma omp for simd 68 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 69 // CHECK-NEXT: #pragma omp ordered simd 70 // CHECK-NEXT: { 71 // CHECK-NEXT: a = 2; 72 // CHECK-NEXT: } 73 // CHECK-NEXT: #pragma omp parallel for simd 74 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 75 // CHECK-NEXT: #pragma omp ordered simd 76 // CHECK-NEXT: { 77 // CHECK-NEXT: a = 2; 78 // CHECK-NEXT: } 79 80 // CHECK: static T a; 81 // CHECK-NEXT: #pragma omp for ordered 82 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 83 // CHECK-NEXT: #pragma omp ordered 84 // CHECK-NEXT: { 85 // CHECK-NEXT: a = 2; 86 // CHECK-NEXT: } 87 // CHECK-NEXT: #pragma omp for ordered 88 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 89 // CHECK-NEXT: #pragma omp ordered threads 90 // CHECK-NEXT: { 91 // CHECK-NEXT: a = 2; 92 // CHECK-NEXT: } 93 // CHECK-NEXT: #pragma omp simd 94 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 95 // CHECK-NEXT: #pragma omp ordered simd 96 // CHECK-NEXT: { 97 // CHECK-NEXT: a = 2; 98 // CHECK-NEXT: } 99 // CHECK-NEXT: #pragma omp for simd 100 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 101 // CHECK-NEXT: #pragma omp ordered simd 102 // CHECK-NEXT: { 103 // CHECK-NEXT: a = 2; 104 // CHECK-NEXT: } 105 // CHECK-NEXT: #pragma omp parallel for simd 106 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 107 // CHECK-NEXT: #pragma omp ordered simd 108 // CHECK-NEXT: { 109 // CHECK-NEXT: a = 2; 110 // CHECK-NEXT: } 111 112 int main (int argc, char **argv) { 113 int b = argc, c, d, e, f, g; 114 static int a; 115 // CHECK: static int a; 116 #pragma omp for ordered 117 for (int i =0 ; i < argc; ++i) 118 #pragma omp ordered 119 { 120 a=2; 121 } 122 #pragma omp for ordered 123 for (int i =0 ; i < argc; ++i) 124 #pragma omp ordered threads 125 { 126 a=2; 127 } 128 #pragma omp simd 129 for (int i =0 ; i < argc; ++i) 130 #pragma omp ordered simd 131 { 132 a=2; 133 } 134 #pragma omp for simd 135 for (int i =0 ; i < argc; ++i) 136 #pragma omp ordered simd 137 { 138 a=2; 139 } 140 #pragma omp parallel for simd 141 for (int i =0 ; i < argc; ++i) 142 #pragma omp ordered simd 143 { 144 a=2; 145 } 146 // CHECK-NEXT: #pragma omp for ordered 147 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 148 // CHECK-NEXT: #pragma omp ordered 149 // CHECK-NEXT: { 150 // CHECK-NEXT: a = 2; 151 // CHECK-NEXT: } 152 // CHECK-NEXT: #pragma omp for ordered 153 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 154 // CHECK-NEXT: #pragma omp ordered threads 155 // CHECK-NEXT: { 156 // CHECK-NEXT: a = 2; 157 // CHECK-NEXT: } 158 // CHECK-NEXT: #pragma omp simd 159 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 160 // CHECK-NEXT: #pragma omp ordered simd 161 // CHECK-NEXT: { 162 // CHECK-NEXT: a = 2; 163 // CHECK-NEXT: } 164 // CHECK-NEXT: #pragma omp for simd 165 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 166 // CHECK-NEXT: #pragma omp ordered simd 167 // CHECK-NEXT: { 168 // CHECK-NEXT: a = 2; 169 // CHECK-NEXT: } 170 // CHECK-NEXT: #pragma omp parallel for simd 171 // CHECK-NEXT: for (int i = 0; i < argc; ++i) 172 // CHECK-NEXT: #pragma omp ordered simd 173 // CHECK-NEXT: { 174 // CHECK-NEXT: a = 2; 175 // CHECK-NEXT: } 176 return tmain(argc); 177 } 178 179 #endif 180