1 // RUN: %clang_cc1 %s -verify -fopenacc 2 3 void func() { 4 5 // expected-error@+1{{expected OpenACC directive}} 6 #pragma acc 7 for(;;){} 8 9 // expected-error@+2{{expected OpenACC directive}} 10 // expected-error@+1{{invalid OpenACC clause 'whatever'}} 11 #pragma acc(whatever) routine 12 13 // expected-error@+2{{expected OpenACC directive}} 14 // expected-error@+1{{invalid OpenACC clause 'routine'}} 15 #pragma acc) routine 16 17 // expected-error@+1{{invalid OpenACC directive 'invalid'}} 18 #pragma acc invalid 19 for(;;){} 20 21 // expected-error@+1{{invalid OpenACC clause 'clause'}} 22 #pragma acc parallel clause list 23 for(;;){} 24 // expected-error@+2{{expected clause-list or newline in OpenACC directive}} 25 // expected-error@+1{{invalid OpenACC clause 'clause'}} 26 #pragma acc parallel() clause list 27 for(;;){} 28 // expected-error@+3{{expected clause-list or newline in OpenACC directive}} 29 // expected-error@+2{{expected ')'}} 30 // expected-note@+1{{to match this '('}} 31 #pragma acc parallel( clause list 32 for(;;){} 33 // expected-error@+2{{expected clause-list or newline in OpenACC directive}} 34 // expected-error@+1{{invalid OpenACC clause 'clause'}} 35 #pragma acc parallel() clause list 36 for(;;){} 37 // expected-error@+3{{expected clause-list or newline in OpenACC directive}} 38 // expected-error@+2{{expected ')'}} 39 // expected-note@+1{{to match this '('}} 40 #pragma acc parallel( clause list 41 for(;;){} 42 // expected-error@+2{{expected clause-list or newline in OpenACC directive}} 43 // expected-error@+1{{invalid OpenACC clause 'clause'}} 44 #pragma acc serial() clause list 45 for(;;){} 46 // expected-error@+3{{expected clause-list or newline in OpenACC directive}} 47 // expected-error@+2{{expected ')'}} 48 // expected-note@+1{{to match this '('}} 49 #pragma acc serial( clause list 50 for(;;){} 51 // expected-error@+1{{invalid OpenACC clause 'clause'}} 52 #pragma acc serial clause list 53 for(;;){} 54 // expected-error@+1{{invalid OpenACC clause 'clause'}} 55 #pragma acc kernels clause list 56 for(;;){} 57 // expected-error@+2{{OpenACC 'data' construct must have at least one 'copy', 'copyin', 'copyout', 'create', 'no_create', 'present', 'deviceptr', 'attach' or 'default' clause}} 58 // expected-error@+1{{invalid OpenACC clause 'clause'}} 59 #pragma acc data clause list 60 for(;;){} 61 // expected-error@+2{{OpenACC 'enter data' construct must have at least one 'copyin', 'create' or 'attach' clause}} 62 // expected-error@+1{{invalid OpenACC clause 'clause'}} 63 #pragma acc enter data clause list 64 for(;;){} 65 // expected-error@+2{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}} 66 // expected-error@+1{{invalid OpenACC clause 'clause'}} 67 #pragma acc exit data clause list 68 for(;;){} 69 // expected-error@+1{{invalid OpenACC directive 'enter invalid'}} 70 #pragma acc enter invalid 71 for(;;){} 72 // expected-error@+1{{invalid OpenACC directive 'exit invalid'}} 73 #pragma acc exit invalid 74 for(;;){} 75 // expected-error@+1{{invalid OpenACC directive 'enter'}} 76 #pragma acc enter 77 for(;;){} 78 // expected-error@+1{{expected identifier}} 79 #pragma acc exit } 80 for(;;){} 81 // expected-error@+2{{OpenACC 'host_data' construct must have at least one 'use_device' clause}} 82 // expected-error@+1{{invalid OpenACC clause 'clause'}} 83 #pragma acc host_data clause list 84 for(;;){} 85 // expected-error@+1{{invalid OpenACC clause 'clause'}} 86 #pragma acc loop clause list 87 for(int i = 0; i < 6;++i){} 88 // expected-error@+1{{invalid OpenACC clause 'invalid'}} 89 #pragma acc parallel invalid clause list 90 for(int i = 0; i < 6;++i){} 91 // expected-error@+1{{invalid OpenACC clause 'invalid'}} 92 #pragma acc serial invalid clause list 93 for(int i = 0; i < 6;++i){} 94 // expected-error@+1{{invalid OpenACC clause 'clause'}} 95 #pragma acc parallel loop clause list 96 for(int i = 0; i < 6;++i){} 97 98 #pragma acc parallel loop 99 for(int i = 0; i < 6;++i){} 100 // expected-error@+1{{invalid OpenACC clause 'clause'}} 101 #pragma acc serial loop clause list 102 for(int i = 0; i < 6;++i){} 103 #pragma acc serial loop 104 for(int i = 0; i < 6;++i){} 105 // expected-error@+1{{invalid OpenACC clause 'clause'}} 106 #pragma acc kernels loop clause list 107 for(int i = 0; i < 6;++i){} 108 #pragma acc kernels loop 109 for(int i = 0; i < 6;++i){} 110 111 int i = 0, j = 0, k = 0; 112 // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 113 #pragma acc atomic 114 i = j; 115 // expected-error@+2{{invalid OpenACC clause 'garbage'}} 116 // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 117 #pragma acc atomic garbage 118 i = j; 119 // expected-error@+2{{invalid OpenACC clause 'garbage'}} 120 // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 121 #pragma acc atomic garbage clause list 122 i = j; 123 // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 124 #pragma acc atomic read 125 i = j; 126 // expected-error@+2{{invalid OpenACC clause 'clause'}} 127 // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 128 #pragma acc atomic write clause list 129 i = i + j; 130 // expected-error@+2{{invalid OpenACC clause 'clause'}} 131 // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 132 #pragma acc atomic update clause list 133 i++; 134 // expected-error@+2{{invalid OpenACC clause 'clause'}} 135 // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 136 #pragma acc atomic capture clause list 137 i = j++; 138 139 140 // expected-error@+2{{invalid OpenACC clause 'clause'}} 141 // expected-warning@+1{{OpenACC construct 'declare' not yet implemented, pragma ignored}} 142 #pragma acc declare clause list 143 for(;;){} 144 // expected-error@+1{{invalid OpenACC clause 'clause'}} 145 #pragma acc init clause list 146 for(;;){} 147 // expected-error@+1{{invalid OpenACC clause 'clause'}} 148 #pragma acc shutdown clause list 149 for(;;){} 150 // expected-error@+2{{invalid OpenACC clause 'clause'}} 151 // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', 'device_type' or 'if' clause}} 152 #pragma acc set clause list 153 for(;;){} 154 // expected-error@+2{{OpenACC 'update' construct must have at least one 'self', 'host' or 'device' clause}} 155 // expected-error@+1{{invalid OpenACC clause 'clause'}} 156 #pragma acc update clause list 157 for(;;){} 158 } 159 160 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 161 #pragma acc routine 162 void routine_func(); 163 // expected-error@+2{{invalid OpenACC clause 'clause'}} 164 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 165 #pragma acc routine clause list 166 void routine_func(); 167 168 // expected-error@+2{{use of undeclared identifier 'func_name'}} 169 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 170 #pragma acc routine (func_name) 171 // expected-error@+3{{use of undeclared identifier 'func_name'}} 172 // expected-error@+2{{invalid OpenACC clause 'clause'}} 173 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 174 #pragma acc routine (func_name) clause list 175 176 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 177 #pragma acc routine (routine_func) 178 // expected-error@+2{{invalid OpenACC clause 'clause'}} 179 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 180 #pragma acc routine (routine_func) clause list 181 182 // expected-error@+3{{expected ')'}} 183 // expected-note@+2{{to match this '('}} 184 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 185 #pragma acc routine (routine_func()) 186 187 // expected-error@+2{{expected identifier}} 188 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 189 #pragma acc routine() 190 191 // expected-error@+2{{expected identifier}} 192 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 193 #pragma acc routine(int) 194