[clang] ee090cb - [OpenACC] Treat 'delete' as a valid clause during parsing in C++ mode
via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 11 14:19:24 PST 2024
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 at +2{{expected ','}}
- // expected-warning at +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 at +4{{OpenACC construct 'exit data' not yet implemented}}
+ // expected-error at +3{{expected ','}}
+ // expected-warning at +2{{OpenACC clause 'delete' not yet implemented, clause ignored}}
+ // expected-warning at +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 at +1{{OpenACC clause 'delete' not yet implemented, clause ignored}}
-#pragma acc serial delete(s.array[s.value : 5], s.value), self
+ // expected-warning at +3{{OpenACC construct 'exit data' not yet implemented}}
+ // expected-warning at +2{{OpenACC clause 'delete' not yet implemented, clause ignored}}
+ // expected-warning at +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 at +2{{expected ','}}
- // expected-warning at +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 at +4{{OpenACC construct 'exit data' not yet implemented}}
+ // expected-error at +3{{expected ','}}
+ // expected-warning at +2{{OpenACC clause 'use_device' not yet implemented, clause ignored}}
+ // expected-warning at +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 at +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 at +3{{OpenACC construct 'exit data' not yet implemented}}
+ // expected-warning at +2{{OpenACC clause 'use_device' not yet implemented, clause ignored}}
+ // expected-warning at +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 at +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 at +2{{OpenACC construct 'exit data' not yet implemented}}
+ // expected-warning at +1{{OpenACC clause 'delete' not yet implemented, clause ignored}}
+#pragma acc exit data delete(I)
+ ;
}
struct S {
More information about the cfe-commits
mailing list