Author: erichkeane Date: 2024-05-31T08:43:48-07:00 New Revision: 85ea1aaf15b3721aaea35280ffdedad36128bf6b
URL: https://github.com/llvm/llvm-project/commit/85ea1aaf15b3721aaea35280ffdedad36128bf6b DIFF: https://github.com/llvm/llvm-project/commit/85ea1aaf15b3721aaea35280ffdedad36128bf6b.diff LOG: [OpenACC] Fix device_type clause appertainment Seemingly I forgot to implement the appertainment checks when doing the original device_type implementation, so we fell through to the 'not implemented' section of the diagnostics. This patch corrects the appertainment, so that we disallow it correctly. Added: Modified: clang/lib/Sema/SemaOpenACC.cpp clang/test/SemaOpenACC/compute-construct-device_type-clause.c Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index 15239f4f35c39..6ae3c64bbf82c 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -246,6 +246,27 @@ bool doesClauseApplyToDirective(OpenACCDirectiveKind DirectiveKind, return false; } + case OpenACCClauseKind::DeviceType: + case OpenACCClauseKind::DType: + switch (DirectiveKind) { + case OpenACCDirectiveKind::Parallel: + case OpenACCDirectiveKind::Serial: + case OpenACCDirectiveKind::Kernels: + case OpenACCDirectiveKind::Data: + case OpenACCDirectiveKind::Init: + case OpenACCDirectiveKind::Shutdown: + case OpenACCDirectiveKind::Set: + case OpenACCDirectiveKind::Update: + case OpenACCDirectiveKind::Loop: + case OpenACCDirectiveKind::Routine: + case OpenACCDirectiveKind::ParallelLoop: + case OpenACCDirectiveKind::SerialLoop: + case OpenACCDirectiveKind::KernelsLoop: + return true; + default: + return false; + } + default: // Do nothing so we can go to the 'unimplemented' diagnostic instead. return true; diff --git a/clang/test/SemaOpenACC/compute-construct-device_type-clause.c b/clang/test/SemaOpenACC/compute-construct-device_type-clause.c index bf2a00a0f7360..376a741a2a6b9 100644 --- a/clang/test/SemaOpenACC/compute-construct-device_type-clause.c +++ b/clang/test/SemaOpenACC/compute-construct-device_type-clause.c @@ -34,6 +34,13 @@ void uses() { #pragma acc kernels dtype(MACRO) while(1); + // expected-error@+2{{OpenACC 'device_type' clause is not valid on 'enter data' directive}} + // expected-warning@+1{{OpenACC construct 'enter data' not yet implemented}} +#pragma acc enter data device_type(I) + // expected-error@+2{{OpenACC 'dtype' clause is not valid on 'enter data' directive}} + // expected-warning@+1{{OpenACC construct 'enter data' not yet implemented}} +#pragma acc enter data dtype(I) + // Only 'async', 'wait', num_gangs', 'num_workers', 'vector_length' allowed after 'device_type'. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits