[flang-commits] [flang] [llvm] [Frontend][OpenMP] Add 6.1 as a valid OpenMP version (PR #153628)
Krzysztof Parzyszek via flang-commits
flang-commits at lists.llvm.org
Mon Aug 18 06:11:29 PDT 2025
https://github.com/kparzysz updated https://github.com/llvm/llvm-project/pull/153628
>From 606202666b16c35c037bceb0764d1835ea2e5121 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Thu, 14 Aug 2025 12:01:55 -0500
Subject: [PATCH 1/4] [Frontend][OpenMP] Add 6.1 as a valid OpenMP version
---
flang/test/Driver/fopenmp-version.F90 | 2 +-
llvm/lib/Frontend/OpenMP/OMP.cpp | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/flang/test/Driver/fopenmp-version.F90 b/flang/test/Driver/fopenmp-version.F90
index c2866561461b7..48b6ddca772c3 100644
--- a/flang/test/Driver/fopenmp-version.F90
+++ b/flang/test/Driver/fopenmp-version.F90
@@ -22,4 +22,4 @@
!RUN: not %flang -c -fopenmp -fopenmp-version=29 %s 2>&1 | FileCheck --check-prefix=ERR-BAD %s
-!ERR-BAD: error: '29' is not a valid OpenMP version in '-fopenmp-version=29', valid versions are 31, 40, 45, 50, 51, 52, 60
+!ERR-BAD: error: '29' is not a valid OpenMP version in '-fopenmp-version=29', valid versions are 31, 40, 45, 50, 51, 52, 60, 61
diff --git a/llvm/lib/Frontend/OpenMP/OMP.cpp b/llvm/lib/Frontend/OpenMP/OMP.cpp
index 555e2a61e411e..9e625b809de9e 100644
--- a/llvm/lib/Frontend/OpenMP/OMP.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMP.cpp
@@ -190,7 +190,7 @@ bool isCombinedConstruct(Directive D) {
}
ArrayRef<unsigned> getOpenMPVersions() {
- static unsigned Versions[]{31, 40, 45, 50, 51, 52, 60};
+ static unsigned Versions[]{31, 40, 45, 50, 51, 52, 60, 61};
return Versions;
}
>From ee3a401236d50b24ab874f198474b09be03d2bf8 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Thu, 14 Aug 2025 13:39:29 -0500
Subject: [PATCH 2/4] warn about future versions
---
flang/lib/Frontend/CompilerInvocation.cpp | 17 ++++++++++++++++-
flang/test/Driver/fopenmp-version.F90 | 4 ++++
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 111c5aa48726f..5d06631b623fd 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -1169,6 +1169,7 @@ static bool parseOpenMPArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
llvm::Triple t(res.getTargetOpts().triple);
constexpr unsigned newestFullySupported = 31;
+ constexpr unsigned latestFinalized = 60;
// By default OpenMP is set to the most recent fully supported version
res.getLangOpts().OpenMPVersion = newestFullySupported;
res.getFrontendOpts().features.Enable(
@@ -1191,12 +1192,26 @@ static bool parseOpenMPArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
diags.Report(diagID) << value << arg->getAsString(args) << versions.str();
};
+ auto reportFutureVersion = [&](llvm::StringRef value) {
+ const unsigned diagID = diags.getCustomDiagID(
+ clang::DiagnosticsEngine::Warning,
+ "The specification for OpenMP %0 is still under development; "
+ "the behavior of new features is subject to change");
+ std::string buffer;
+ llvm::raw_string_ostream versions(buffer);
+ llvm::interleaveComma(ompVersions, versions);
+
+ diags.Report(diagID) << value;
+ };
+
llvm::StringRef value = arg->getValue();
if (!value.getAsInteger(/*radix=*/10, version)) {
if (llvm::is_contained(ompVersions, version)) {
res.getLangOpts().OpenMPVersion = version;
- if (version > newestFullySupported)
+ if (version > latestFinalized)
+ reportFutureVersion(value);
+ else if (version > newestFullySupported)
diags.Report(clang::diag::warn_openmp_incomplete) << version;
} else if (llvm::is_contained(oldVersions, version)) {
const unsigned diagID =
diff --git a/flang/test/Driver/fopenmp-version.F90 b/flang/test/Driver/fopenmp-version.F90
index 48b6ddca772c3..426730dac7fc5 100644
--- a/flang/test/Driver/fopenmp-version.F90
+++ b/flang/test/Driver/fopenmp-version.F90
@@ -23,3 +23,7 @@
!RUN: not %flang -c -fopenmp -fopenmp-version=29 %s 2>&1 | FileCheck --check-prefix=ERR-BAD %s
!ERR-BAD: error: '29' is not a valid OpenMP version in '-fopenmp-version=29', valid versions are 31, 40, 45, 50, 51, 52, 60, 61
+
+!RUN: %flang -c -fopenmp -fopenmp-version=61 %s 2>&1 | FileCheck --check-prefix=FUTURE %s
+
+!FUTURE: The specification for OpenMP 61 is still under development; the behavior of new features is subject to change
>From f1a23b5aef7c3f099e2bfa65fbafe430f076a1ff Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Mon, 18 Aug 2025 08:11:10 -0500
Subject: [PATCH 3/4] Update flang/lib/Frontend/CompilerInvocation.cpp
Co-authored-by: Michael Klemm <michael.klemm at amd.com>
---
flang/lib/Frontend/CompilerInvocation.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 5d06631b623fd..1a88ccf70a15a 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -1195,7 +1195,7 @@ static bool parseOpenMPArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
auto reportFutureVersion = [&](llvm::StringRef value) {
const unsigned diagID = diags.getCustomDiagID(
clang::DiagnosticsEngine::Warning,
- "The specification for OpenMP %0 is still under development; "
+ "The specification for OpenMP version %0 is still under development; "
"the behavior of new features is subject to change");
std::string buffer;
llvm::raw_string_ostream versions(buffer);
>From 49336368dce619a8f2c63eda0d63cae16b60a938 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Mon, 18 Aug 2025 08:11:21 -0500
Subject: [PATCH 4/4] Update flang/lib/Frontend/CompilerInvocation.cpp
Co-authored-by: Michael Klemm <michael.klemm at amd.com>
---
flang/lib/Frontend/CompilerInvocation.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 1a88ccf70a15a..224573fb2f5c3 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -1196,7 +1196,7 @@ static bool parseOpenMPArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
const unsigned diagID = diags.getCustomDiagID(
clang::DiagnosticsEngine::Warning,
"The specification for OpenMP version %0 is still under development; "
- "the behavior of new features is subject to change");
+ "the syntax and semantics of new features may be subject to change");
std::string buffer;
llvm::raw_string_ostream versions(buffer);
llvm::interleaveComma(ompVersions, versions);
More information about the flang-commits
mailing list