Files
clang-p2996/clang/test/ParserOpenACC/parse-wait-construct.c
Erich Keane fdee0a35d9 [OpenACC] Add 'clause' parsing infrastructure plus a few clauses (#75052)
As we've now finished parsing the constructs, we're moving onto
implementing 'clause' parsing. While some are complicated and require
their own patch, the handful added here are simple to parse (that is,
    they are a single identifier).

This patch adds the infrastructure to parse these and a clause-list in
its entirety. This adds some complication to how we are diagnosing
parsing errors elsewhere, so a few changes were made to better recover
from errors.
2023-12-18 18:53:37 -08:00

158 lines
6.6 KiB
C

// RUN: %clang_cc1 %s -verify -fopenacc
void func() {
int i, j;
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait clause-list
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait ()
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait () clause-list
// expected-error@+4{{expected expression}}
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (devnum:
// expected-error@+2{{expected expression}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (devnum:)
// expected-error@+3{{expected expression}}
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (devnum:) clause-list
// expected-error@+4{{expected ':'}}
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (devnum: i + j
// expected-error@+2{{expected ':'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (devnum: i + j)
// expected-error@+3{{expected ':'}}
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (devnum: i + j) clause-list
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (queues:
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (queues:)
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (queues:) clause-list
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (devnum: i + j:queues:
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (devnum: i + j:queues:)
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (devnum: i + j:queues:) clause-list
// expected-error@+4{{use of undeclared identifier 'devnum'}}
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (queues:devnum: i + j
// expected-error@+2{{use of undeclared identifier 'devnum'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (queues:devnum: i + j)
// expected-error@+3{{use of undeclared identifier 'devnum'}}
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait (queues:devnum: i + j) clause-list
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(i, j, 1+1, 3.3
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(i, j, 1+1, 3.3)
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(i, j, 1+1, 3.3) clause-list
// expected-error@+4{{expected expression}}
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(,
// expected-error@+2{{expected expression}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(,)
// expected-error@+3{{expected expression}}
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(,) clause-list
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(queues:i, j, 1+1, 3.3
// expected-error@+4{{expected expression}}
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(queues:i, j, 1+1, 3.3,
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(queues:i, j, 1+1, 3.3)
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(queues:i, j, 1+1, 3.3) clause-list
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(devnum:3:i, j, 1+1, 3.3
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(devnum:3:i, j, 1+1, 3.3)
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(devnum:3:i, j, 1+1, 3.3) clause-list
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(devnum:3:queues:i, j, 1+1, 3.3
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(devnum:3:queues:i, j, 1+1, 3.3)
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc wait(devnum:3:queues:i, j, 1+1, 3.3) clause-list
}