Author: erichkeane Date: 2024-12-11T14:19:20-08:00 New Revision: ee090cb83b523e4c8c888ded8ca1a70334ba65fa
URL: https://github.com/llvm/llvm-project/commit/ee090cb83b523e4c8c888ded8ca1a70334ba65fa DIFF: https://github.com/llvm/llvm-project/commit/ee090cb83b523e4c8c888ded8ca1a70334ba65fa.diff LOG: [OpenACC] Treat 'delete' as a valid clause during parsing in C++ mode This didn't end up being properly tested, but 'delete' as a keyword causes us to not properly recognize it as a clause kind. This patch correctly adds the work to make sure it is recognized correctly. Added: Modified: clang/lib/Parse/ParseOpenACC.cpp clang/test/ParserOpenACC/parse-clauses.c clang/test/ParserOpenACC/parse-clauses.cpp Removed: ################################################################################ diff --git a/clang/lib/Parse/ParseOpenACC.cpp b/clang/lib/Parse/ParseOpenACC.cpp index b64c72904b19a4..bc59de3c1a0ada 100644 --- a/clang/lib/Parse/ParseOpenACC.cpp +++ b/clang/lib/Parse/ParseOpenACC.cpp @@ -86,10 +86,14 @@ OpenACCClauseKind getOpenACCClauseKind(Token Tok) { if (Tok.is(tok::kw_if)) return OpenACCClauseKind::If; - // 'private' is also a keyword, make sure we pare it correctly. + // 'private' is also a keyword, make sure we parse it correctly. if (Tok.is(tok::kw_private)) return OpenACCClauseKind::Private; + // 'delete' is a keyword, make sure we parse it correctly. + if (Tok.is(tok::kw_delete)) + return OpenACCClauseKind::Delete; + if (!Tok.is(tok::identifier)) return OpenACCClauseKind::Invalid; diff --git a/clang/test/ParserOpenACC/parse-clauses.c b/clang/test/ParserOpenACC/parse-clauses.c index 656b31444a9eed..3741ed099cf5c2 100644 --- a/clang/test/ParserOpenACC/parse-clauses.c +++ b/clang/test/ParserOpenACC/parse-clauses.c @@ -528,22 +528,30 @@ void VarListClauses() { #pragma acc serial firstprivate(s.array[s.value : 5], s.value), self for(int i = 0; i < 5;++i) {} - // expected-error@+2{{expected ','}} - // expected-warning@+1{{OpenACC clause 'delete' not yet implemented, clause ignored}} -#pragma acc serial delete(s.array[s.value] s.array[s.value :5] ), self + // expected-warning@+4{{OpenACC construct 'exit data' not yet implemented}} + // expected-error@+3{{expected ','}} + // expected-warning@+2{{OpenACC clause 'delete' not yet implemented, clause ignored}} + // expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}} +#pragma acc exit data delete(s.array[s.value] s.array[s.value :5] ) async for(int i = 0; i < 5;++i) {} - // expected-warning@+1{{OpenACC clause 'delete' not yet implemented, clause ignored}} -#pragma acc serial delete(s.array[s.value : 5], s.value), self + // expected-warning@+3{{OpenACC construct 'exit data' not yet implemented}} + // expected-warning@+2{{OpenACC clause 'delete' not yet implemented, clause ignored}} + // expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}} +#pragma acc exit data delete(s.array[s.value : 5], s.value),async for(int i = 0; i < 5;++i) {} - // expected-error@+2{{expected ','}} - // expected-warning@+1{{OpenACC clause 'use_device' not yet implemented, clause ignored}} -#pragma acc serial use_device(s.array[s.value] s.array[s.value :5] ), self + // expected-warning@+4{{OpenACC construct 'exit data' not yet implemented}} + // expected-error@+3{{expected ','}} + // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented, clause ignored}} + // expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}} +#pragma acc exit data use_device(s.array[s.value] s.array[s.value :5] ),async for(int i = 0; i < 5;++i) {} - // expected-warning@+1{{OpenACC clause 'use_device' not yet implemented, clause ignored}} -#pragma acc serial use_device(s.array[s.value : 5], s.value), self + // expected-warning@+3{{OpenACC construct 'exit data' not yet implemented}} + // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented, clause ignored}} + // expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}} +#pragma acc exit data use_device(s.array[s.value : 5], s.value), async for(int i = 0; i < 5;++i) {} // expected-error@+2{{expected ','}} diff --git a/clang/test/ParserOpenACC/parse-clauses.cpp b/clang/test/ParserOpenACC/parse-clauses.cpp index dc985826a4efe9..4dc966ea9879f9 100644 --- a/clang/test/ParserOpenACC/parse-clauses.cpp +++ b/clang/test/ParserOpenACC/parse-clauses.cpp @@ -34,6 +34,11 @@ void templ() { #pragma acc parallel async for(;;){} + + // expected-warning@+2{{OpenACC construct 'exit data' not yet implemented}} + // expected-warning@+1{{OpenACC clause 'delete' not yet implemented, clause ignored}} +#pragma acc exit data delete(I) + ; } struct S { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits