From 6048c2f0c752d6f9963bc47a10f208c62882c8d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Clement=20=28=E3=83=90=E3=83=AC=E3=83=B3?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=B3=20=E3=82=AF=E3=83=AC=E3=83=A1?= =?UTF-8?q?=E3=83=B3=29?= Date: Thu, 2 Oct 2025 10:00:47 -1000 Subject: [PATCH] [flang][openacc] Suppport !@acc compiler sentinel (#161706) --- flang/lib/Parser/parsing.cpp | 1 + flang/lib/Parser/prescan.cpp | 5 +++++ flang/test/Semantics/OpenACC/acc-sentinel.f90 | 14 ++++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 flang/test/Semantics/OpenACC/acc-sentinel.f90 diff --git a/flang/lib/Parser/parsing.cpp b/flang/lib/Parser/parsing.cpp index 8a8c6ef673a8..2df6881146af 100644 --- a/flang/lib/Parser/parsing.cpp +++ b/flang/lib/Parser/parsing.cpp @@ -85,6 +85,7 @@ const SourceFile *Parsing::Prescan(const std::string &path, Options options) { if (options.features.IsEnabled(LanguageFeature::OpenACC) || (options.prescanAndReformat && noneOfTheAbove)) { prescanner.AddCompilerDirectiveSentinel("$acc"); + prescanner.AddCompilerDirectiveSentinel("@acc"); } if (options.features.IsEnabled(LanguageFeature::OpenMP) || (options.prescanAndReformat && noneOfTheAbove)) { diff --git a/flang/lib/Parser/prescan.cpp b/flang/lib/Parser/prescan.cpp index 865c149380d8..66e5b2cbd5c7 100644 --- a/flang/lib/Parser/prescan.cpp +++ b/flang/lib/Parser/prescan.cpp @@ -147,6 +147,11 @@ void Prescanner::Statement() { directiveSentinel_[4] == '\0') { // CUDA conditional compilation line. condOffset = 5; + } else if (directiveSentinel_[0] == '@' && directiveSentinel_[1] == 'a' && + directiveSentinel_[2] == 'c' && directiveSentinel_[3] == 'c' && + directiveSentinel_[4] == '\0') { + // OpenACC conditional compilation line. + condOffset = 5; } if (condOffset && !preprocessingOnly_) { at_ += *condOffset, column_ += *condOffset; diff --git a/flang/test/Semantics/OpenACC/acc-sentinel.f90 b/flang/test/Semantics/OpenACC/acc-sentinel.f90 new file mode 100644 index 000000000000..d34d97e8b1b5 --- /dev/null +++ b/flang/test/Semantics/OpenACC/acc-sentinel.f90 @@ -0,0 +1,14 @@ +! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenacc + +subroutine test_sentinel() +! Test for error since we currently do not have an OpenACC module upstream. +!ERROR: Cannot parse module file for module 'openacc': Source file 'openacc.mod' was not found + !@acc use openacc + integer :: i + + !$acc parallel loop + do i = 1, 10 + end do + !$acc end parallel + +end subroutine