1 // RUN: %clang_cc1 %s -fopenacc -verify 2 3 #define MACRO +FOO 4 5 void uses() { 6 typedef struct S{} STy; 7 STy SImpl; 8 9 #pragma acc loop device_type(I) 10 for(int i = 0; i < 5; ++i); 11 #pragma acc loop device_type(S) dtype(STy) 12 for(int i = 0; i < 5; ++i); 13 #pragma acc loop dtype(SImpl) 14 for(int i = 0; i < 5; ++i); 15 #pragma acc loop dtype(int) device_type(*) 16 for(int i = 0; i < 5; ++i); 17 #pragma acc loop dtype(true) device_type(false) 18 for(int i = 0; i < 5; ++i); 19 20 // expected-error@+1{{expected identifier}} 21 #pragma acc loop dtype(int, *) 22 for(int i = 0; i < 5; ++i); 23 24 #pragma acc loop device_type(I, int) 25 for(int i = 0; i < 5; ++i); 26 // expected-error@+2{{expected ','}} 27 // expected-error@+1{{expected identifier}} 28 #pragma acc loop dtype(int{}) 29 for(int i = 0; i < 5; ++i); 30 // expected-error@+1{{expected identifier}} 31 #pragma acc loop dtype(5) 32 for(int i = 0; i < 5; ++i); 33 // expected-error@+1{{expected identifier}} 34 #pragma acc loop dtype(MACRO) 35 for(int i = 0; i < 5; ++i); 36 37 38 // Only 'collapse', 'gang', 'worker', 'vector', 'seq', 'independent', 'auto', 39 // and 'tile' allowed after 'device_type'. 40 41 #pragma acc loop device_type(*) vector 42 for(int i = 0; i < 5; ++i); 43 44 // expected-error@+1{{OpenACC 'finalize' clause is not valid on 'loop' directive}} 45 #pragma acc loop device_type(*) finalize 46 for(int i = 0; i < 5; ++i); 47 // expected-error@+1{{OpenACC 'if_present' clause is not valid on 'loop' directive}} 48 #pragma acc loop device_type(*) if_present 49 for(int i = 0; i < 5; ++i); 50 #pragma acc loop device_type(*) seq 51 for(int i = 0; i < 5; ++i); 52 #pragma acc loop device_type(*) independent 53 for(int i = 0; i < 5; ++i); 54 #pragma acc loop device_type(*) auto 55 for(int i = 0; i < 5; ++i); 56 #pragma acc loop device_type(*) worker 57 for(int i = 0; i < 5; ++i); 58 // expected-error@+2{{OpenACC clause 'nohost' may not follow a 'device_type' clause in a 'loop' construct}} 59 // expected-note@+1{{previous clause is here}} 60 #pragma acc loop device_type(*) nohost 61 for(int i = 0; i < 5; ++i); 62 // expected-error@+1{{OpenACC 'default' clause is not valid on 'loop' directive}} 63 #pragma acc loop device_type(*) default(none) 64 for(int i = 0; i < 5; ++i); 65 // expected-error@+1{{OpenACC 'if' clause is not valid on 'loop' directive}} 66 #pragma acc loop device_type(*) if(1) 67 for(int i = 0; i < 5; ++i); 68 // expected-error@+1{{OpenACC 'self' clause is not valid on 'loop' directive}} 69 #pragma acc loop device_type(*) self 70 for(int i = 0; i < 5; ++i); 71 72 int Var; 73 int *VarPtr; 74 // expected-error@+1{{OpenACC 'copy' clause is not valid on 'loop' directive}} 75 #pragma acc loop device_type(*) copy(Var) 76 for(int i = 0; i < 5; ++i); 77 // expected-error@+1{{OpenACC 'pcopy' clause is not valid on 'loop' directive}} 78 #pragma acc loop device_type(*) pcopy(Var) 79 for(int i = 0; i < 5; ++i); 80 // expected-error@+1{{OpenACC 'present_or_copy' clause is not valid on 'loop' directive}} 81 #pragma acc loop device_type(*) present_or_copy(Var) 82 for(int i = 0; i < 5; ++i); 83 // expected-error@+1{{OpenACC 'use_device' clause is not valid on 'loop' directive}} 84 #pragma acc loop device_type(*) use_device(Var) 85 for(int i = 0; i < 5; ++i); 86 // expected-error@+1{{OpenACC 'attach' clause is not valid on 'loop' directive}} 87 #pragma acc loop device_type(*) attach(Var) 88 for(int i = 0; i < 5; ++i); 89 // expected-error@+1{{OpenACC 'delete' clause is not valid on 'loop' directive}} 90 #pragma acc loop device_type(*) delete(Var) 91 for(int i = 0; i < 5; ++i); 92 // expected-error@+1{{OpenACC 'detach' clause is not valid on 'loop' directive}} 93 #pragma acc loop device_type(*) detach(Var) 94 for(int i = 0; i < 5; ++i); 95 // expected-error@+1{{OpenACC 'device' clause is not valid on 'loop' directive}} 96 #pragma acc loop device_type(*) device(VarPtr) 97 for(int i = 0; i < 5; ++i); 98 // expected-error@+1{{OpenACC 'deviceptr' clause is not valid on 'loop' directive}} 99 #pragma acc loop device_type(*) deviceptr(VarPtr) 100 for(int i = 0; i < 5; ++i); 101 // expected-error@+2{{OpenACC clause 'device_resident' may not follow a 'device_type' clause in a 'loop' construct}} 102 // expected-note@+1{{previous clause is here}} 103 #pragma acc loop device_type(*) device_resident(VarPtr) 104 for(int i = 0; i < 5; ++i); 105 // expected-error@+1{{OpenACC 'firstprivate' clause is not valid on 'loop' directive}} 106 #pragma acc loop device_type(*) firstprivate(Var) 107 for(int i = 0; i < 5; ++i); 108 // expected-error@+1{{OpenACC 'host' clause is not valid on 'loop' directive}} 109 #pragma acc loop device_type(*) host(Var) 110 for(int i = 0; i < 5; ++i); 111 // expected-error@+2{{OpenACC clause 'link' may not follow a 'device_type' clause in a 'loop' construct}} 112 // expected-note@+1{{previous clause is here}} 113 #pragma acc loop device_type(*) link(Var) 114 for(int i = 0; i < 5; ++i); 115 // expected-error@+1{{OpenACC 'no_create' clause is not valid on 'loop' directive}} 116 #pragma acc loop device_type(*) no_create(Var) 117 for(int i = 0; i < 5; ++i); 118 // expected-error@+1{{OpenACC 'present' clause is not valid on 'loop' directive}} 119 #pragma acc loop device_type(*) present(Var) 120 for(int i = 0; i < 5; ++i); 121 // expected-error@+2{{OpenACC clause 'private' may not follow a 'device_type' clause in a 'loop' construct}} 122 // expected-note@+1{{previous clause is here}} 123 #pragma acc loop device_type(*) private(Var) 124 for(int i = 0; i < 5; ++i); 125 // expected-error@+1{{OpenACC 'copyout' clause is not valid on 'loop' directive}} 126 #pragma acc loop device_type(*) copyout(Var) 127 for(int i = 0; i < 5; ++i); 128 // expected-error@+1{{OpenACC 'pcopyout' clause is not valid on 'loop' directive}} 129 #pragma acc loop device_type(*) pcopyout(Var) 130 for(int i = 0; i < 5; ++i); 131 // expected-error@+1{{OpenACC 'present_or_copyout' clause is not valid on 'loop' directive}} 132 #pragma acc loop device_type(*) present_or_copyout(Var) 133 for(int i = 0; i < 5; ++i); 134 // expected-error@+1{{OpenACC 'copyin' clause is not valid on 'loop' directive}} 135 #pragma acc loop device_type(*) copyin(Var) 136 for(int i = 0; i < 5; ++i); 137 // expected-error@+1{{OpenACC 'pcopyin' clause is not valid on 'loop' directive}} 138 #pragma acc loop device_type(*) pcopyin(Var) 139 for(int i = 0; i < 5; ++i); 140 // expected-error@+1{{OpenACC 'present_or_copyin' clause is not valid on 'loop' directive}} 141 #pragma acc loop device_type(*) present_or_copyin(Var) 142 for(int i = 0; i < 5; ++i); 143 // expected-error@+1{{OpenACC 'create' clause is not valid on 'loop' directive}} 144 #pragma acc loop device_type(*) create(Var) 145 for(int i = 0; i < 5; ++i); 146 // expected-error@+1{{OpenACC 'pcreate' clause is not valid on 'loop' directive}} 147 #pragma acc loop device_type(*) pcreate(Var) 148 for(int i = 0; i < 5; ++i); 149 // expected-error@+1{{OpenACC 'present_or_create' clause is not valid on 'loop' directive}} 150 #pragma acc loop device_type(*) present_or_create(Var) 151 for(int i = 0; i < 5; ++i); 152 // expected-error@+2{{OpenACC clause 'reduction' may not follow a 'device_type' clause in a 'loop' construct}} 153 // expected-note@+1{{previous clause is here}} 154 #pragma acc loop device_type(*) reduction(+:Var) 155 for(int i = 0; i < 5; ++i); 156 #pragma acc loop device_type(*) collapse(1) 157 for(int i = 0; i < 5; ++i); 158 // expected-error@+2{{OpenACC clause 'bind' may not follow a 'device_type' clause in a 'loop' construct}} 159 // expected-note@+1{{previous clause is here}} 160 #pragma acc loop device_type(*) bind(Var) 161 for(int i = 0; i < 5; ++i); 162 // expected-error@+1{{OpenACC 'vector_length' clause is not valid on 'loop' directive}} 163 #pragma acc loop device_type(*) vector_length(1) 164 for(int i = 0; i < 5; ++i); 165 // expected-error@+1{{OpenACC 'num_gangs' clause is not valid on 'loop' directive}} 166 #pragma acc loop device_type(*) num_gangs(1) 167 for(int i = 0; i < 5; ++i); 168 // expected-error@+1{{OpenACC 'num_workers' clause is not valid on 'loop' directive}} 169 #pragma acc loop device_type(*) num_workers(1) 170 for(int i = 0; i < 5; ++i); 171 // expected-error@+1{{OpenACC 'device_num' clause is not valid on 'loop' directive}} 172 #pragma acc loop device_type(*) device_num(1) 173 for(int i = 0; i < 5; ++i); 174 // expected-error@+1{{OpenACC 'default_async' clause is not valid on 'loop' directive}} 175 #pragma acc loop device_type(*) default_async(1) 176 for(int i = 0; i < 5; ++i); 177 // expected-error@+1{{OpenACC 'async' clause is not valid on 'loop' directive}} 178 #pragma acc loop device_type(*) async 179 for(int i = 0; i < 5; ++i); 180 181 #pragma acc loop device_type(*) tile(*, 1) 182 for(int j = 0; j < 5; ++j) 183 for(int i = 0; i < 5; ++i); 184 185 #pragma acc loop dtype(*) gang 186 for(int i = 0; i < 5; ++i); 187 // expected-error@+1{{OpenACC 'wait' clause is not valid on 'loop' directive}} 188 #pragma acc loop device_type(*) wait 189 for(int i = 0; i < 5; ++i); 190 } 191