llvm-project/clang/test/ParserOpenACC/parse-wait-construct.c
erichkeane 30cfe2b2ac [OpenACC] Implement 'async' clause sema for compute constructs
This is a pretty simple clause, it takes an 'async-argument', which
effectively needs to be just parsed as an 'int' argument, since it can
be an arbitrarly integer at runtime (and negative values are legal for
implementation defined values).

This patch also cleans up the async-argument parsing, so 'wait' got some
minor quality-of-life improvements for parsing (both clause and
    construct).
2024-05-07 07:14:14 -07:00

174 lines
8.3 KiB
C

// RUN: %clang_cc1 %s -verify -fopenacc
void func() {
int i, j;
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait clause-list
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait (
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait ()
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC construct 'wait' 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 construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait (devnum:
// expected-error@+2{{expected expression}}
// expected-warning@+1{{OpenACC construct 'wait' 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 construct 'wait' 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 construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait (devnum: i + j
// expected-error@+2{{expected ':'}}
// expected-warning@+1{{OpenACC construct 'wait' 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 construct 'wait' 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 construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait (queues:
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait (queues:)
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC construct 'wait' 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 construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait (devnum: i + j:queues:
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait (devnum: i + j:queues:)
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait (devnum: i + j:queues:) clause-list
// expected-error@+5{{use of undeclared identifier 'devnum'}}
// expected-error@+4{{expected ','}}
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait (queues:devnum: i + j
// expected-error@+3{{use of undeclared identifier 'devnum'}}
// expected-error@+2{{expected ','}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait (queues:devnum: i + j)
// expected-error@+4{{use of undeclared identifier 'devnum'}}
// expected-error@+3{{expected ','}}
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait (queues:devnum: i + j) clause-list
// expected-error@+4{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(i, j, 1+1, 3.3
// expected-error@+2{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(i, j, 1+1, 3.3)
// expected-error@+3{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC construct 'wait' 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 construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(,
// expected-error@+2{{expected expression}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(,)
// expected-error@+3{{expected expression}}
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(,) clause-list
// expected-error@+4{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(queues:i, j, 1+1, 3.3
// expected-error@+5{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-error@+4{{expected expression}}
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(queues:i, j, 1+1, 3.3,
// expected-error@+2{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(queues:i, j, 1+1, 3.3)
// expected-error@+3{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(queues:i, j, 1+1, 3.3) clause-list
// expected-error@+4{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(devnum:3:i, j, 1+1, 3.3
// expected-error@+2{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(devnum:3:i, j, 1+1, 3.3)
// expected-error@+3{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(devnum:3:i, j, 1+1, 3.3) clause-list
// expected-error@+4{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-error@+3{{expected ')'}}
// expected-note@+2{{to match this '('}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(devnum:3:queues:i, j, 1+1, 3.3
// expected-error@+2{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(devnum:3:queues:i, j, 1+1, 3.3)
// expected-error@+3{{OpenACC directive 'wait' requires expression of integer type ('double' invalid)}}
// expected-error@+2{{invalid OpenACC clause 'clause'}}
// expected-warning@+1{{OpenACC construct 'wait' not yet implemented, pragma ignored}}
#pragma acc wait(devnum:3:queues:i, j, 1+1, 3.3) clause-list
}