Skip to content

Commit ee090cb

Browse files
committedDec 11, 2024·
[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.
1 parent 2470cfa commit ee090cb

File tree

3 files changed

+28
-11
lines changed

3 files changed

+28
-11
lines changed
 

‎clang/lib/Parse/ParseOpenACC.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,14 @@ OpenACCClauseKind getOpenACCClauseKind(Token Tok) {
8686
if (Tok.is(tok::kw_if))
8787
return OpenACCClauseKind::If;
8888

89-
// 'private' is also a keyword, make sure we pare it correctly.
89+
// 'private' is also a keyword, make sure we parse it correctly.
9090
if (Tok.is(tok::kw_private))
9191
return OpenACCClauseKind::Private;
9292

93+
// 'delete' is a keyword, make sure we parse it correctly.
94+
if (Tok.is(tok::kw_delete))
95+
return OpenACCClauseKind::Delete;
96+
9397
if (!Tok.is(tok::identifier))
9498
return OpenACCClauseKind::Invalid;
9599

‎clang/test/ParserOpenACC/parse-clauses.c

+18-10
Original file line numberDiff line numberDiff line change
@@ -528,22 +528,30 @@ void VarListClauses() {
528528
#pragma acc serial firstprivate(s.array[s.value : 5], s.value), self
529529
for(int i = 0; i < 5;++i) {}
530530

531-
// expected-error@+2{{expected ','}}
532-
// expected-warning@+1{{OpenACC clause 'delete' not yet implemented, clause ignored}}
533-
#pragma acc serial delete(s.array[s.value] s.array[s.value :5] ), self
531+
// expected-warning@+4{{OpenACC construct 'exit data' not yet implemented}}
532+
// expected-error@+3{{expected ','}}
533+
// expected-warning@+2{{OpenACC clause 'delete' not yet implemented, clause ignored}}
534+
// expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}}
535+
#pragma acc exit data delete(s.array[s.value] s.array[s.value :5] ) async
534536
for(int i = 0; i < 5;++i) {}
535537

536-
// expected-warning@+1{{OpenACC clause 'delete' not yet implemented, clause ignored}}
537-
#pragma acc serial delete(s.array[s.value : 5], s.value), self
538+
// expected-warning@+3{{OpenACC construct 'exit data' not yet implemented}}
539+
// expected-warning@+2{{OpenACC clause 'delete' not yet implemented, clause ignored}}
540+
// expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}}
541+
#pragma acc exit data delete(s.array[s.value : 5], s.value),async
538542
for(int i = 0; i < 5;++i) {}
539543

540-
// expected-error@+2{{expected ','}}
541-
// expected-warning@+1{{OpenACC clause 'use_device' not yet implemented, clause ignored}}
542-
#pragma acc serial use_device(s.array[s.value] s.array[s.value :5] ), self
544+
// expected-warning@+4{{OpenACC construct 'exit data' not yet implemented}}
545+
// expected-error@+3{{expected ','}}
546+
// expected-warning@+2{{OpenACC clause 'use_device' not yet implemented, clause ignored}}
547+
// expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}}
548+
#pragma acc exit data use_device(s.array[s.value] s.array[s.value :5] ),async
543549
for(int i = 0; i < 5;++i) {}
544550

545-
// expected-warning@+1{{OpenACC clause 'use_device' not yet implemented, clause ignored}}
546-
#pragma acc serial use_device(s.array[s.value : 5], s.value), self
551+
// expected-warning@+3{{OpenACC construct 'exit data' not yet implemented}}
552+
// expected-warning@+2{{OpenACC clause 'use_device' not yet implemented, clause ignored}}
553+
// expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}}
554+
#pragma acc exit data use_device(s.array[s.value : 5], s.value), async
547555
for(int i = 0; i < 5;++i) {}
548556

549557
// expected-error@+2{{expected ','}}

‎clang/test/ParserOpenACC/parse-clauses.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ void templ() {
3434

3535
#pragma acc parallel async
3636
for(;;){}
37+
38+
// expected-warning@+2{{OpenACC construct 'exit data' not yet implemented}}
39+
// expected-warning@+1{{OpenACC clause 'delete' not yet implemented, clause ignored}}
40+
#pragma acc exit data delete(I)
41+
;
3742
}
3843

3944
struct S {

0 commit comments

Comments
 (0)
Please sign in to comment.