[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