164b6ef02SErich Keane // RUN: %clang_cc1 %s -verify -fopenacc 264b6ef02SErich Keane 364b6ef02SErich Keane void func() { 461683376Serichkeane 5db4ea21dSerichkeane // expected-error@+1{{expected OpenACC directive}} 661683376Serichkeane #pragma acc 761683376Serichkeane for(;;){} 861683376Serichkeane 9db4ea21dSerichkeane // expected-error@+2{{expected OpenACC directive}} 10db4ea21dSerichkeane // expected-error@+1{{invalid OpenACC clause 'whatever'}} 11731361cdSerichkeane #pragma acc(whatever) routine 12731361cdSerichkeane 13db4ea21dSerichkeane // expected-error@+2{{expected OpenACC directive}} 14db4ea21dSerichkeane // expected-error@+1{{invalid OpenACC clause 'routine'}} 15731361cdSerichkeane #pragma acc) routine 16731361cdSerichkeane 17db4ea21dSerichkeane // expected-error@+1{{invalid OpenACC directive 'invalid'}} 1864b6ef02SErich Keane #pragma acc invalid 1964b6ef02SErich Keane for(;;){} 2064b6ef02SErich Keane 21cb891127SErich Keane // expected-error@+1{{invalid OpenACC clause 'clause'}} 2264b6ef02SErich Keane #pragma acc parallel clause list 2364b6ef02SErich Keane for(;;){} 24cb891127SErich Keane // expected-error@+2{{expected clause-list or newline in OpenACC directive}} 25cb891127SErich Keane // expected-error@+1{{invalid OpenACC clause 'clause'}} 2664b6ef02SErich Keane #pragma acc parallel() clause list 279bd5f808Serichkeane for(;;){} 28cb891127SErich Keane // expected-error@+3{{expected clause-list or newline in OpenACC directive}} 29cb891127SErich Keane // expected-error@+2{{expected ')'}} 30cb891127SErich Keane // expected-note@+1{{to match this '('}} 31cb891127SErich Keane #pragma acc parallel( clause list 32cb891127SErich Keane for(;;){} 33cb891127SErich Keane // expected-error@+2{{expected clause-list or newline in OpenACC directive}} 34cb891127SErich Keane // expected-error@+1{{invalid OpenACC clause 'clause'}} 35cb891127SErich Keane #pragma acc parallel() clause list 36cb891127SErich Keane for(;;){} 37cb891127SErich Keane // expected-error@+3{{expected clause-list or newline in OpenACC directive}} 38cb891127SErich Keane // expected-error@+2{{expected ')'}} 39cb891127SErich Keane // expected-note@+1{{to match this '('}} 40ba1c869fSErich Keane #pragma acc parallel( clause list 41ba1c869fSErich Keane for(;;){} 42bb97c992Serichkeane // expected-error@+2{{expected clause-list or newline in OpenACC directive}} 43bb97c992Serichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 44db4ea21dSerichkeane #pragma acc serial() clause list 45db4ea21dSerichkeane for(;;){} 46bb97c992Serichkeane // expected-error@+3{{expected clause-list or newline in OpenACC directive}} 47bb97c992Serichkeane // expected-error@+2{{expected ')'}} 48bb97c992Serichkeane // expected-note@+1{{to match this '('}} 49db4ea21dSerichkeane #pragma acc serial( clause list 50db4ea21dSerichkeane for(;;){} 51bb97c992Serichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 529bd5f808Serichkeane #pragma acc serial clause list 539bd5f808Serichkeane for(;;){} 54bb97c992Serichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 559bd5f808Serichkeane #pragma acc kernels clause list 569bd5f808Serichkeane for(;;){} 57bfc2dbe0Serichkeane // expected-error@+2{{OpenACC 'data' construct must have at least one 'copy', 'copyin', 'copyout', 'create', 'no_create', 'present', 'deviceptr', 'attach' or 'default' clause}} 58010d0115Serichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 599bd5f808Serichkeane #pragma acc data clause list 609bd5f808Serichkeane for(;;){} 61bfc2dbe0Serichkeane // expected-error@+2{{OpenACC 'enter data' construct must have at least one 'copyin', 'create' or 'attach' clause}} 62010d0115Serichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 63147b38b1SErich Keane #pragma acc enter data clause list 64147b38b1SErich Keane for(;;){} 65bfc2dbe0Serichkeane // expected-error@+2{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}} 66010d0115Serichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 67147b38b1SErich Keane #pragma acc exit data clause list 68147b38b1SErich Keane for(;;){} 69db4ea21dSerichkeane // expected-error@+1{{invalid OpenACC directive 'enter invalid'}} 70147b38b1SErich Keane #pragma acc enter invalid 71147b38b1SErich Keane for(;;){} 72db4ea21dSerichkeane // expected-error@+1{{invalid OpenACC directive 'exit invalid'}} 73147b38b1SErich Keane #pragma acc exit invalid 74147b38b1SErich Keane for(;;){} 75db4ea21dSerichkeane // expected-error@+1{{invalid OpenACC directive 'enter'}} 76147b38b1SErich Keane #pragma acc enter 77147b38b1SErich Keane for(;;){} 78db4ea21dSerichkeane // expected-error@+1{{expected identifier}} 79147b38b1SErich Keane #pragma acc exit } 80147b38b1SErich Keane for(;;){} 81bfc2dbe0Serichkeane // expected-error@+2{{OpenACC 'host_data' construct must have at least one 'use_device' clause}} 82010d0115Serichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 839bd5f808Serichkeane #pragma acc host_data clause list 849bd5f808Serichkeane for(;;){} 8542f4e505SErich Keane // expected-error@+1{{invalid OpenACC clause 'clause'}} 869bd5f808Serichkeane #pragma acc loop clause list 87b0cfbfd7SErich Keane for(int i = 0; i < 6;++i){} 88cb891127SErich Keane // expected-error@+1{{invalid OpenACC clause 'invalid'}} 899bd5f808Serichkeane #pragma acc parallel invalid clause list 9039351f8eSerichkeane for(int i = 0; i < 6;++i){} 91bb97c992Serichkeane // expected-error@+1{{invalid OpenACC clause 'invalid'}} 92db4ea21dSerichkeane #pragma acc serial invalid clause list 9339351f8eSerichkeane for(int i = 0; i < 6;++i){} 9439351f8eSerichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 959bd5f808Serichkeane #pragma acc parallel loop clause list 9639351f8eSerichkeane for(int i = 0; i < 6;++i){} 9770f41022SErich Keane 9870f41022SErich Keane #pragma acc parallel loop 9939351f8eSerichkeane for(int i = 0; i < 6;++i){} 10039351f8eSerichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 1019bd5f808Serichkeane #pragma acc serial loop clause list 10239351f8eSerichkeane for(int i = 0; i < 6;++i){} 10370f41022SErich Keane #pragma acc serial loop 10439351f8eSerichkeane for(int i = 0; i < 6;++i){} 10539351f8eSerichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 1069bd5f808Serichkeane #pragma acc kernels loop clause list 10739351f8eSerichkeane for(int i = 0; i < 6;++i){} 10870f41022SErich Keane #pragma acc kernels loop 10939351f8eSerichkeane for(int i = 0; i < 6;++i){} 1109bd5f808Serichkeane 11104e9b61cSErich Keane int i = 0, j = 0, k = 0; 112db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 11304e9b61cSErich Keane #pragma acc atomic 11404e9b61cSErich Keane i = j; 115fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'garbage'}} 116db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 11704e9b61cSErich Keane #pragma acc atomic garbage 11804e9b61cSErich Keane i = j; 119fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'garbage'}} 120db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 12104e9b61cSErich Keane #pragma acc atomic garbage clause list 12204e9b61cSErich Keane i = j; 123db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 12404e9b61cSErich Keane #pragma acc atomic read 12504e9b61cSErich Keane i = j; 126fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'clause'}} 127db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 12804e9b61cSErich Keane #pragma acc atomic write clause list 12904e9b61cSErich Keane i = i + j; 130fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'clause'}} 131db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 13204e9b61cSErich Keane #pragma acc atomic update clause list 13304e9b61cSErich Keane i++; 134fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'clause'}} 135db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}} 13604e9b61cSErich Keane #pragma acc atomic capture clause list 13704e9b61cSErich Keane i = j++; 13804e9b61cSErich Keane 13904e9b61cSErich Keane 140fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'clause'}} 141db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'declare' not yet implemented, pragma ignored}} 1429bd5f808Serichkeane #pragma acc declare clause list 1439bd5f808Serichkeane for(;;){} 1444bbdb018Serichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 1459bd5f808Serichkeane #pragma acc init clause list 1469bd5f808Serichkeane for(;;){} 1474bbdb018Serichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 1489bd5f808Serichkeane #pragma acc shutdown clause list 1499bd5f808Serichkeane for(;;){} 150fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'clause'}} 15121c785d7Serichkeane // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', 'device_type' or 'if' clause}} 1529bd5f808Serichkeane #pragma acc set clause list 1539bd5f808Serichkeane for(;;){} 154*553fa204Serichkeane // expected-error@+2{{OpenACC 'update' construct must have at least one 'self', 'host' or 'device' clause}} 155db81e8c4Serichkeane // expected-error@+1{{invalid OpenACC clause 'clause'}} 1569bd5f808Serichkeane #pragma acc update clause list 1579bd5f808Serichkeane for(;;){} 15864b6ef02SErich Keane } 159ba1c869fSErich Keane 160db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 161ba1c869fSErich Keane #pragma acc routine 162ba1c869fSErich Keane void routine_func(); 163fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'clause'}} 164db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 165ba1c869fSErich Keane #pragma acc routine clause list 166ba1c869fSErich Keane void routine_func(); 167ba1c869fSErich Keane 168ba1c869fSErich Keane // expected-error@+2{{use of undeclared identifier 'func_name'}} 169db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 170ba1c869fSErich Keane #pragma acc routine (func_name) 171ba1c869fSErich Keane // expected-error@+3{{use of undeclared identifier 'func_name'}} 172fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'clause'}} 173db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 174ba1c869fSErich Keane #pragma acc routine (func_name) clause list 175ba1c869fSErich Keane 176db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 177ba1c869fSErich Keane #pragma acc routine (routine_func) 178fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'clause'}} 179db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 180ba1c869fSErich Keane #pragma acc routine (routine_func) clause list 181ba1c869fSErich Keane 182ba1c869fSErich Keane // expected-error@+3{{expected ')'}} 183ba1c869fSErich Keane // expected-note@+2{{to match this '('}} 184db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 185ba1c869fSErich Keane #pragma acc routine (routine_func()) 186ba1c869fSErich Keane 187ba1c869fSErich Keane // expected-error@+2{{expected identifier}} 188db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 189ba1c869fSErich Keane #pragma acc routine() 190ba1c869fSErich Keane 191ba1c869fSErich Keane // expected-error@+2{{expected identifier}} 192db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}} 193ba1c869fSErich Keane #pragma acc routine(int) 194