Now that we have AST nodes for OpenACC Clauses, this patch adds their creation to Sema and makes the Parser call all the required functions. This also redoes TreeTransform to work with the clauses/make sure they are transformed. Much of this is NFC, since there is no clause we can test this behavior with. However, there IS one noticable change; we are now no longer diagnosing that a clause is 'not implemented' unless it there was no errors parsing its parameters. This is because it cleans up how we create and diagnose clauses.
174 lines
5.6 KiB
C
174 lines
5.6 KiB
C
// RUN: %clang_cc1 %s -verify -fopenacc
|
|
|
|
void func() {
|
|
int i, j;
|
|
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait
|
|
{}
|
|
|
|
// expected-error@+2{{invalid OpenACC clause 'clause'}}
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait clause-list
|
|
{}
|
|
|
|
// expected-error@+2{{expected ')'}}
|
|
// expected-note@+1{{to match this '('}}
|
|
#pragma acc parallel wait (
|
|
{}
|
|
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait ()
|
|
{}
|
|
|
|
// expected-error@+2{{invalid OpenACC clause 'clause'}}
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait () clause-list
|
|
{}
|
|
|
|
// expected-error@+3{{expected expression}}
|
|
// expected-error@+2{{expected ')'}}
|
|
// expected-note@+1{{to match this '('}}
|
|
#pragma acc parallel wait (devnum:
|
|
{}
|
|
|
|
// expected-error@+1{{expected expression}}
|
|
#pragma acc parallel wait (devnum:)
|
|
{}
|
|
|
|
// expected-error@+2{{expected expression}}
|
|
// expected-error@+1{{invalid OpenACC clause 'clause'}}
|
|
#pragma acc parallel wait (devnum:) clause-list
|
|
{}
|
|
|
|
// expected-error@+3{{expected ':'}}
|
|
// expected-error@+2{{expected ')'}}
|
|
// expected-note@+1{{to match this '('}}
|
|
#pragma acc parallel wait (devnum: i + j
|
|
{}
|
|
|
|
// expected-error@+1{{expected ':'}}
|
|
#pragma acc parallel wait (devnum: i + j)
|
|
{}
|
|
|
|
// expected-error@+2{{expected ':'}}
|
|
// expected-error@+1{{invalid OpenACC clause 'clause'}}
|
|
#pragma acc parallel wait (devnum: i + j) clause-list
|
|
{}
|
|
|
|
// expected-error@+2{{expected ')'}}
|
|
// expected-note@+1{{to match this '('}}
|
|
#pragma acc parallel wait (queues:
|
|
{}
|
|
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait (queues:)
|
|
{}
|
|
|
|
// expected-error@+2{{invalid OpenACC clause 'clause'}}
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait (queues:) clause-list
|
|
{}
|
|
|
|
// expected-error@+2{{expected ')'}}
|
|
// expected-note@+1{{to match this '('}}
|
|
#pragma acc parallel wait (devnum: i + j:queues:
|
|
{}
|
|
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait (devnum: i + j:queues:)
|
|
{}
|
|
|
|
// expected-error@+2{{invalid OpenACC clause 'clause'}}
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait (devnum: i + j:queues:) clause-list
|
|
{}
|
|
|
|
// expected-error@+3{{use of undeclared identifier 'devnum'}}
|
|
// expected-error@+2{{expected ')'}}
|
|
// expected-note@+1{{to match this '('}}
|
|
#pragma acc parallel wait (queues:devnum: i + j
|
|
{}
|
|
|
|
// expected-error@+1{{use of undeclared identifier 'devnum'}}
|
|
#pragma acc parallel wait (queues:devnum: i + j)
|
|
{}
|
|
|
|
// expected-error@+2{{use of undeclared identifier 'devnum'}}
|
|
// expected-error@+1{{invalid OpenACC clause 'clause'}}
|
|
#pragma acc parallel wait (queues:devnum: i + j) clause-list
|
|
{}
|
|
|
|
// expected-error@+2{{expected ')'}}
|
|
// expected-note@+1{{to match this '('}}
|
|
#pragma acc parallel wait(i, j, 1+1, 3.3
|
|
{}
|
|
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait(i, j, 1+1, 3.3)
|
|
{}
|
|
// expected-error@+2{{invalid OpenACC clause 'clause'}}
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait(i, j, 1+1, 3.3) clause-list
|
|
{}
|
|
|
|
// expected-error@+3{{expected expression}}
|
|
// expected-error@+2{{expected ')'}}
|
|
// expected-note@+1{{to match this '('}}
|
|
#pragma acc parallel wait(,
|
|
{}
|
|
|
|
// expected-error@+1{{expected expression}}
|
|
#pragma acc parallel wait(,)
|
|
{}
|
|
|
|
// expected-error@+2{{expected expression}}
|
|
// expected-error@+1{{invalid OpenACC clause 'clause'}}
|
|
#pragma acc parallel wait(,) clause-list
|
|
{}
|
|
|
|
// expected-error@+2{{expected ')'}}
|
|
// expected-note@+1{{to match this '('}}
|
|
#pragma acc parallel wait(queues:i, j, 1+1, 3.3
|
|
{}
|
|
|
|
// expected-error@+3{{expected expression}}
|
|
// expected-error@+2{{expected ')'}}
|
|
// expected-note@+1{{to match this '('}}
|
|
#pragma acc parallel wait(queues:i, j, 1+1, 3.3,
|
|
{}
|
|
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait(queues:i, j, 1+1, 3.3)
|
|
{}
|
|
|
|
// expected-error@+2{{invalid OpenACC clause 'clause'}}
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait(queues:i, j, 1+1, 3.3) clause-list
|
|
{}
|
|
|
|
// expected-error@+2{{expected ')'}}
|
|
// expected-note@+1{{to match this '('}}
|
|
#pragma acc parallel wait(devnum:3:i, j, 1+1, 3.3
|
|
{}
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait(devnum:3:i, j, 1+1, 3.3)
|
|
{}
|
|
// expected-error@+2{{invalid OpenACC clause 'clause'}}
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait(devnum:3:i, j, 1+1, 3.3) clause-list
|
|
{}
|
|
|
|
// expected-error@+2{{expected ')'}}
|
|
// expected-note@+1{{to match this '('}}
|
|
#pragma acc parallel wait(devnum:3:queues:i, j, 1+1, 3.3
|
|
{}
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait(devnum:3:queues:i, j, 1+1, 3.3)
|
|
{}
|
|
// expected-error@+2{{invalid OpenACC clause 'clause'}}
|
|
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
|
|
#pragma acc parallel wait(devnum:3:queues:i, j, 1+1, 3.3) clause-list
|
|
{}
|
|
}
|